写在前面:
关于“顺序表”的分析等,如果存在疑惑,想要探究过程,请读者参见文章:
之后再回到这个页面看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结束:\n");
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("\n线性表中的全部元素为:\n");
for(i=0;i<L.length;i++){
printf("%d ",L.elem[i]);
}
printf("\n\n");
}
//查找,若不存在输出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("请输入要查找的数据元素:\n");
scanf("%d",&e);
printf("数据 %d 在表中第 %d 个位置。\n",e,LocateSqList(L,e));
printf("请输入第几个位置插入数据元素:\n");
scanf("%d",&i);
printf("请输入要插入的新数据元素:\n");
scanf("%d",&h);
printf("%d\n",InsertSqList(L,i,h));
PrintSqList(L);//输出更改后的线性表
printf("请输入第几个位置删除数据元素:\n");
scanf("%d",&m);
printf("%d\n",DeleteSqList(L,m));
PrintSqList(L);//输出更改后的线性表
}
运行结果
写在最后:
读两遍下来,如果仍然有不清楚的地方,可在评论区留言。
如果你有其他感到困惑的问题,欢迎留言。