重学数据结构 完整顺序表(工程文件)
来源:互联网 发布:gre数学难吗 知乎 编辑:程序博客网 时间:2024/05/16 19:03
line.htypedef int Status; // Status是函数的类型,其值是函数结果状态代码,如OK等typedef int ElemType; typedef struct SqList { ElemType *elem; // 存储空间基址 int length; // 当前长度 int listsize; // 当前分配的存储容量(以sizeof(ElemType)为单位) }SqList;Status InitList(SqList &L);int ListLength(SqList L);Status ListInsert(SqList &L,int i,ElemType e);Status ListDelete(SqList &L,int i,ElemType &e);void ListPrint(SqList L);linec.cpp#include<malloc.h> // malloc()等#include <stdlib.h>#include <stdio.h>#include "line.h"#define LIST_INIT_SIZE 10 // 线性表存储空间的初始分配量#define LISTINCREMENT 2 // 线性表存储空间的分配增量#define OK 1#define ERROR 0#define OVERFLOW -2 Status InitList(SqList &L) // 算法2.3 { // 操作结果:构造一个空的顺序线性表 L.elem=(ElemType*)malloc(LIST_INIT_SIZE*sizeof(ElemType)); if(!L.elem) exit(OVERFLOW); // 存储分配失败 L.length=0; // 空表长度为0 L.listsize=LIST_INIT_SIZE; // 初始存储容量 return OK; } int ListLength(SqList L) { // 初始条件:顺序线性表L已存在。操作结果:返回L中数据元素个数 return L.length; } Status ListInsert(SqList &L,int i,ElemType e) // 算法2.4 { // 初始条件:顺序线性表L已存在,1≤i≤ListLength(L)+1 // 操作结果:在L中第i个位置之前插入新的数据元素e,L的长度加1 ElemType *newbase,*q,*p; if(i<1||i>L.length+1) // i值不合法 return ERROR; if(L.length>=L.listsize) // 当前存储空间已满,增加分配 { if(!(newbase=(ElemType *)realloc(L.elem,(L.listsize+LISTINCREMENT)*sizeof(ElemType)))) exit(OVERFLOW); // 存储分配失败 L.elem=newbase; // 新基址 L.listsize+=LISTINCREMENT; // 增加存储容量 } q=L.elem+i-1; // q为插入位置 for(p=L.elem+L.length-1;p>=q;--p) // 插入位置及之后的元素右移 *(p+1)=*p; *q=e; // 插入e ++L.length; // 表长增1 return OK; } Status ListDelete(SqList &L,int i,ElemType &e) // 算法2.5 { // 初始条件:顺序线性表L已存在,1≤i≤ListLength(L) // 操作结果:删除L的第i个数据元素,并用e返回其值,L的长度减1 ElemType *p,*q; if(i<1||i>L.length) // i值不合法 return ERROR; p=L.elem+i-1; // p为被删除元素的位置 e=*p; // 被删除元素的值赋给e q=L.elem+L.length-1; // 表尾元素的位置 for(++p;p<=q;++p) // 被删除元素之后的元素左移 *(p-1)=*p; L.length--; // 表长减1 return OK; }void ListPrint(SqList L){ElemType *p;printf("线性表中的元素为:\n");for(p=L.elem;p<L.elem+L.length;p++){ printf("%d ",*p);} }linemain.cpp#include <stdio.h>#include "line.h"void main(){ SqList L;int i,j;ElemType e; InitList(L); printf("请输入5个数据元素:\n"); for(i=1;i<=5;i++){ scanf("%d",&e); ListInsert(L,i,e); }ListPrint(L);printf("\n请输入删除元素所在位置:\n"); scanf("%d",&j);ListDelete(L,j,e);printf("被删除的元素为:");printf("%d\n",e);ListPrint(L);}
阅读全文
0 0
- 重学数据结构 完整顺序表(工程文件)
- 重学数据结构 链表(工程文件)算法2.8 2.9 2.10 2.11
- 重学数据结构 顺序表的添加 删除 算法2.4和2.5
- 再学数据结构之顺序表(一)
- 再学数据结构之顺序表(二)
- 重学数据结构 链表增删
- 数据结构(顺序表-头文件)
- 重学数据结构
- 顺序表(完整操作)
- 数据结构-线性表-顺序存储结构完整可执行代码
- 【数据结构】线性表的顺序存储完整程序
- 重学算法和数据结构
- 【重学数据结构】数制转换
- 顺序表(数据结构)
- 重学数据结构系列之——线性表基础
- 老郭带你学数据结构(C语言系列)1-线性表之静态顺序表
- 老郭带你学数据结构(C语言系列)2-线性表之动态顺序表
- 跟我学数据结构--线性表的顺序存储
- 文章标题
- Linux系统基础(九)
- 基于V4L2+OPENCV的摄像头采集与图像处理方案
- 合并K个有序链表
- CentOS7安装MySql5.7,防火墙关闭,修改防火墙开放端口
- 重学数据结构 完整顺序表(工程文件)
- 架构师之路(5)100亿数据1万属性数据架构设计
- RPC框架简单原理
- 第一章 Linux概述 课后问答题
- JSF标签学习
- Java里遇到的一些问题
- MyBatis中大于号以及小于号的表达方式
- 通过ping++平台完成移动端H5支付
- 微信获取openid