#include<stdio.h>
#include<stdlib.h>
#define InitSize 8//默认内存空间为8
typedef struct{
int *data; //指针指向data中的第一个元素
int MaxSize;//顺序表的最大容量
int length;//顺序表的长度
}SqList;
void InitList(SqList &L){//初始化顺序表
L.data==(int *)malloc(InitSize*sizeof(int));
L.length=0;
L.MaxSize=InitSize;
}
void IncreaseList(SqList &L,int len){//扩大表的容量,扩大长度为len
int *q=L.data; //将data中的数据存放到q中
L.data=(int *)malloc((L.MaxSize+len)*sizeof(int));//扩大顺序表容量
for(int i=0;i<L.length;i++) //将q中的数据复制到新容量的data中
L.data[i]=q[i];
L.MaxSize=L.MaxSize+len; //顺序表最大容量增加len
free(q);
}
void CreateElem(SqList &L){ //写入元素
int i,n;
scanf("%d",&n);
printf("你将在顺序表中写入%d个数据\n",n);
for(i=0;i<n;i++){
printf("请输入第 %d 个元素:",i+1);
scanf("%d",&L.data[i]);
L.length++;
}
}
void show_Sq(SqList &L){
printf("当前顺序表中的元素:\n");
for(int i=0;i<L.length;i++){
printf("%d ",L.data[i]);
}
printf("\n");
}
bool InsertList(SqList &L,int i,int e){//插入元素 第i个位置插入e
if(i<1||i>L.length+1)
return false;
if(L.length>L.MaxSize||L.length==L.MaxSize)
return false;
for(int j=L.length;j>i-1;j--)
L.data[j]=L.data[j-1];
L.data[i-1]=e;
L.length++;
printf("插入一个元素后");
show_Sq(L);
return true;
}
bool DeleteList(SqList &L,int i){//删除顺序表中第i个位置的元素
if(i<1||i>L.length) //i不符合要求就返回false
return false;
for(int j=i;j<=L.length-1;j++)
L.data[j-1]=L.data[j];
L.length--; //如果i刚好等于顺序表长度,不执行循环,直接减少length的长度
printf("删除一个元素");
show_Sq(L);
return true;
}
int LocateElem(SqList &L,int e){//按值查找
for(int i=0;i<L.length;i++){
if(L.data[i]==e){
printf("找到%d,它在第%d位",e,i+1);
return i+1;
}
}
return 0;
}
int main(){
SqList L;//声明一个顺序表L
InitList(L); //初始化顺序表
IncreaseList(L,5); //扩容
printf("扩容后的内存=%d",L.MaxSize);
CreateElem(L); //添加元素
show_Sq(L); //展示顺序表中的元素
printf("当前顺序表的长度:%d\n",L.length);
//InsertList(L,3,6); //在顺序表第3个位置插入元素6
DeleteList(L,3);
LocateElem(L,2);
return 0;
}
顺序表的插入删除查找
最新推荐文章于 2024-04-09 16:45:26 发布
该博客展示了如何使用C语言实现顺序表的基本操作,包括初始化、扩容、插入元素、删除元素以及按值查找元素。代码详细解释了每个函数的功能,如InitList用于初始化顺序表,IncreaseList用于扩大表的容量,CreateElem用于写入元素,InsertList用于插入元素,DeleteList用于删除元素,LocateElem用于查找元素的位置。
摘要由CSDN通过智能技术生成