学习日志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
}
以上代码,理解起来并不困难,有问题可以留言告知我!