C语言实现--顺序表(顺序存储结构)
写在前面:
关于“顺序表”的分析等,如果存在疑惑,想要探究过程,请读者参见文章:
之后再回到这个页面看C语言实现“链队列”, 为提高效率在这里不再重复进行分析介绍,C++与C语言分析过程相同,两者代码实现主要区别在于“编程语法”上,读者可以对比两篇文章中的代码部分体会。
代码实现
说明:采用C语言,编译环境为DevC++。
//导入头文件 #include<malloc.h> #include<stdio.h> //定义线性表 typedef struct{ int *elem;//数据元素 int length;//当前长度 int listsize;//存储容量 }SqList; //初始化线性表 void InitSqList(SqList &L){ L.elem=(int *) malloc(50*sizeof(int)); L.length=0;//空表 L.listsize=50; } //创建顺序表 void CreatSqList(SqList &L){ int i=0; printf("请输入数据,以-10000结束: "); scanf("%d",&L.elem[i]); while(L.elem[i]!=-10000 && L.length<L.listsize){ ++L.length; i++; scanf("%d",&L.elem[i]); } } //输出 void PrintSqList(SqList &L){ int i; printf(" 线性表中的全部元素为: "); for(i=0;i<L.length;i++){ printf("%d ",L.elem[i]); } printf(" "); } //查找,若不存在输出0 int LocateSqList(SqList L,int e){ int i=0; int *p=L.elem; while(i<L.length){ p++; i++; if((*p)==e) return i+1; if(i==L.length) return 0; } } //插入 int InsertSqList(SqList &L,int i,int h){ int *p; int *q; p=&(L.elem[L.length+1]); q=&(L.elem[i-1]); for(p;p>=q;p--) *p=*(p-1); ++L.length;//插入前 表长+1 *(q)=h; return 0;//返回0表示成功 } //删除 int DeleteSqList(SqList &L,int m){ int *p; int *q; p=&(L.elem[L.length]); q=&(L.elem[m]); for(q;q<p;q++) *(q-1)=*q; --L.length;//删除后 表长-1 return 0;//返回0表示成功 } //主函数 int main(){ SqList L; int e; int i; int h; int m; InitSqList(L); CreatSqList(L); PrintSqList(L); printf("请输入要查找的数据元素: "); scanf("%d",&e); printf("数据 %d 在表中第 %d 个位置。 ",e,LocateSqList(L,e)); printf("请输入第几个位置插入数据元素: "); scanf("%d",&i); printf("请输入要插入的新数据元素: "); scanf("%d",&h); printf("%d ",InsertSqList(L,i,h)); PrintSqList(L);//输出更改后的线性表 printf("请输入第几个位置删除数据元素: "); scanf("%d",&m); printf("%d ",DeleteSqList(L,m)); PrintSqList(L);//输出更改后的线性表 }
运行结果
写在最后:
如果你有其他感到困惑的问题,欢迎留言。