学习日志2:
这是我自己写的用c语言写的实现顺序表的基本操作的代码,内容简单,容易理解,在此分享给大家,经过测试是可以运行的,下面这段代码包括插入、删除、操作这三个基本操作,我不做过多的讲解,一些算法思想大家可以去参考其他博主写的教程,他们说的非常详细,本次的分享只是学习成果的分享,供大家参考,代码一些注释可能有误,希望大家谅解,也请各位大佬明确指出需要改进的地方!我会认真修改,大家可以参考耿国华的《数据结构—用C语言描述(第3版)》
#include<stdio.h> #include<stdlib.h> #define maxsize 100//顺序表最大的空间 typedef struct { int elem[maxsize];//顺序表中的元素 int last;//顺序表最后一个元素的下标 }seplist; int inslist(seplist* L,int i,int e);//插入 int delist(seplist* L,int i,int *e);//删除 int locate(seplist L,int e);//查找 void main() { //顺序表的建立 int n,i,j,e; seplist L; int M; printf("请输入线性表的长度\n"); scanf("%d",&n); L.last=n-1; printf("请输入顺序表各个元素\n"); for(i=0;i<=L.last;i++) scanf("%d",&L.elem[i]); printf("顺序表为\n"); for(i=0;i<=L.last;i++) printf("%d ",L.elem[i]); printf("\nlast的值为 %d\n",L.last); //顺序表建立已经完成 //下面为插入 printf("\n接下来进行插入操作\n"); printf("请输入需要插入元素的位置\n"); scanf("%d",&j);//j为插入元素的位置 printf("请输入需要插入元素的内容\n"); scanf("%d",&e);//e为插入元素的内容 if(inslist(&L,j,e)==0)//返回值为0 { printf("插入失败\n");//开始重新插入 printf("开始重新插入\n"); printf("请输入需要插入元素的位置和内容"); scanf("%d%d",&j,&e); inslist(&L,i,e); printf("\n"); } printf("新的顺序表为\n"); for(i=0;i<=L.last;i++) printf("%d ",L.elem[i]); printf("\n"); printf("插入成功\n"); printf("last的值为 %d\n",L.last); //插入已经完成 //下面为删除 printf("\n下面进行删除的操作\n"); printf("请输入删除的位置\n"); scanf("%d",&j);//j为删除位置 if(delist(&L,j,&M)==0)//M为需要返回的删除值 { printf("删除失败!\n");//开始重新删除 printf("下面进行重新删除\n"); printf("请输入删除的位置\n"); delist(&L,j,&M); } printf("新的顺序表为\n"); for(i=0;i<=L.last;i++) printf("%d ",L.elem[i]); printf("\n"); printf("删除成功!\n"); printf("删除数为 %d\n",M); printf("last的值为 %d\n",L.last); //删除已经完成 //下面为查找 printf("\n下面进行查找操作\n"); printf("请输入查找元素的内容\n"); scanf("%d",&e); if(locate(L,e)!=-1) { printf("查找成功!\n"); printf("查找的内容为%d\t查找的位置为%d\n",e,locate(L,e)); } else printf("查找失败!\n"); system("pause"); } //下面为插入 int inslist(seplist* L,int i,int e)//i为插入的位置,e为插入的元素 { int k; if((i<1)||(i>L->last+2))//判断插入的位置是否合法 { printf("\n插入位置不合法\n"); return 0;//0插入失败 } if((L->last>=maxsize-1))//判断插入的位置是否插入表的外面 { printf("\n表已满,无法插入\n"); return 0;//0插入失败 } for(k=L->last;k>=i-1;k--)//从最后开始依次将元素往后移, L->elem[k+1]=L->elem[k];//直到插入位置的下标停下 L->elem[i-1]=e;//插入元素 L->last++;//顺序表的大小变化 return 1; } //下面为删除 int delist(seplist* L,int i,int *e)//i是删除的位置,e为删除的元素内容 { int k; if((i<1)||(i>L->last+1))//判断删除的位置是否合法 { printf("\n删除位置不合法\n"); return 0; } *e=L->elem[i-1];//将删除的元素存放到e所指向的变量中 for(k=i;k<=L->last;k++) L->elem[k-1]=L->elem[k]; L->last--;//顺序表的大小变化 return 1; } //下面为查找 int locate(seplist L,int e)//e为查找的元素 { int i=0;//i为计时器,初值为0 while ((i<=L.last)&&(L.elem[i]!=e)) i++; if(i<=L.last) return i+1;//找到e返回位置 else return -1;//没找到返回-1 }
讯享网
以上代码,理解起来并不困难,有问题可以留言告知我!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/44713.html