大家好,感谢您过来浏览本人的博客,由于想打好数据结构的基础,所以从一开始就不想落下,实践与理论相结合,相信一定会学好这门非常重要的课程。这篇文章介绍了顺序表的一些相关操作,其中包括初始化,创建,循环遍历,查找,插入,删除,内容简单,相信许多大佬都已经非常熟练,那就给萌新提提建议吧,定虚心接受!
线性表的顺序存储——顺序表
typedef struct{ //使用结构体来存放顺序表的首地址,长度和当前分配的存储容量int * p;
int length;
int listsize;
}List;
动态开辟存储空间用到函数void * malloc(unsigned int size);
改变开辟空间大小用到函数void *realloc(void *p,unsigned int size);
以上俩函数都在头文件#include<stdlib.h>中。本该是掌握的知识,现在才翻书学习。
整体使用C语言代码实现,如下
#include<stdio.h>
#include<stdlib.h>
#define size 100 //顺序表存储空间的初始分配量
#define sizeincrement 10 //顺序表存储空间的分配增量
#define OK 1
#define ERROR 0
typedef struct{
int * p;
int length;
int listsize;
}List;
int InitList(List &L){ //初始化顺序表
L.p=(int *)malloc(size*sizeof(int));
if(!L.p)
return ERROR;
L.length=0;
L.listsize=size;
return OK;
}
int ListWrite(List &L){ //构建顺序表
int n,i,*q;
q=L.p;
printf("请输入数据个数:");
scanf("%d",&n);
printf("请输入数据:");
for(i=0;i<n;i++){
scanf("%d",q++);
++L.length;
}
return OK;
}
void ListPrint(List &L){ //遍历后输出顺序表
for(int i=0;i<L.length;i++)
printf("%d\t",L.p[i]);
printf("\n");
}
int ListInsert(List &L){ //顺序表的插入
int i,n,m;
printf("请输入插入元素的位置:");
scanf("%d",&i);
if (i<1||i>L.length+1)
return ERROR;
if(L.length>=L.listsize){ //当前存储空间已满,增加分配
L.p=(int *)realloc(L.p,(L.listsize+sizeincrement)*sizeof(int));
if(!L.p)
exit(1);
L.listsize+=sizeincrement;
}
printf("请输入所要插入的元素:");
scanf("%d",&n);
for(m=L.length-1;m>=i-1;m--)
L.p[m+1]=L.p[m];
L.p[i-1]=n;
L.length++;
return OK;
}
int ListDelete(List &L){ //顺序表的删除
int i,m;
printf("请输入要删除元素的位置:");
scanf("%d",&i);
if(i<1||i>L.length)
return ERROR;
for(m=i;m<L.length;m++)
L.p[m-1]=L.p[m];
L.length--;
return OK;
}
int Listfind(List &L){ //顺序表的查找
int i,m;
printf("请输入所要查找的元素:");
scanf("%d",&i);
for(m=0;m<L.length;m++){
if(L.p[m]==i){
printf("存在,位置为%d\n",m+1);
break;
}
if(m==L.length-1)
printf("不存在\n");
}
return OK;
}
int Listupdate(List &L){ //顺序表的更新
int i,m,e;
printf("请输入要更改的数据:");
scanf("%d",&i);
printf("更改为:");
scanf("%d",&e);
for(m=0;m<L.length;m++){
if(L.p[m]==i){
L.p[m]=e;
break;
}
if(m==L.length-1)
printf("不存在\n");
}
return OK;
}
void menu(){
printf("************************\n");
printf("1.创建一个顺序表\n");
printf("2.遍历顺序表\n");
printf("3.查找顺序表元素\n");
printf("4.插入元素\n");
printf("5.删除元素\n");
printf("6.更新元素\n");
printf("0.结束\n");
printf("************************\n");
printf("请选择操作:\n");
}
int main(){
List L0;
InitList(L0);
int i;
menu();
while(scanf("%d",&i)){
switch(i){
case 1:ListWrite(L0);break;
case 2:ListPrint(L0);break;
case 3:Listfind(L0);break;
case 4:ListInsert(L0);break;
case 5:ListDelete(L0);break;
case 6:Listupdate(L0);break;
case 0:return 0;
default:printf("输入有误请重新输入");
}
}
return 0;
}