本文最后更新于48 天前,其中的信息可能已经过时,如有错误请发送邮件到3206482802@qq.com
#include<stdio.h>//标准输入输出库,包含printf、scanf等函数
#include<stdbool.h>//标准布尔类型库,包含true、false等常量,bool类型
#include<stdlib.h>//标准库,包含malloc、free等函数
#define MAXSIZE 10
typedef struct{//顺序表的定义
int *data;//动态分配数组的指针
int Maxsize;//顺序表的最大容量
int length;//顺序表的当前长度
}sqlist;
void Initlist(sqlist *L){//初始化顺序表
L->data=(int*)malloc(MAXSIZE*sizeof(int));//动态分配数组空间
L->Maxsize=MAXSIZE;//初始化最大容量
L->length=0;//初始化长度为0
}
void IncreaseSize(sqlist *L,int len){//增加顺序表容量
int *p=L->data;//保存原数组指针
L->data=(int*)malloc(L->Maxsize+len*sizeof(int));//动态分配新数组空间
for(int i=0;i<L->length;i++){
L->data[i]=p[i];//复制原数组元素到新数组
}
L->Maxsize+=len;//更新最大容量
free(p);//释放原数组空间
}
bool Insertlist(sqlist *L,int i,int e){//插入元素
if(i<1||i>L->length+1){//判断插入位置是否合法
return false;
}
if(L->length>=L->Maxsize){//如果当前长度大于等于最大容量,则增加容量
IncreaseSize(L,5);//增加5个容量
}
for(int j=L->length;j>=i;j--){//将元素向后移动,腾出下表i-1位置给新元素
L->data[j]=L->data[j-1];//将元素向后移动
}
L->data[i-1]=e;//插入元素
L->length++;//更新长度
return true;
}
bool deletelist(sqlist *L,int i,int *e){//删除元素
if(i<1||i>L->length){//判断删除位置是否合法
return false;
}
*e=L->data[i-1];//保存删除元素
for(int j=i;j<L->length;j++){
L->data[j-1]=L->data[j];//将元素向前移动
}
L->length--;//更新长度
return true;
}
void Printlist(sqlist L){//打印顺序表
for(int i=0;i<L.length;i++){//遍历顺序表,打印每个元素
printf("sqlist L[%d]=%d\n",i,L.data[i]);
}
}
void textprintlist(sqlist L){
for(int i=0;i<L.Maxsize;i++){//遍历顺序表,打印每个元素
printf("sqlist L[%d]=%d\n",i,L.data[i]);
}
}
int main(){
sqlist L;
Initlist(&L);//初始化顺序表
printf("insertlist before:length=%d,Maxsize=%d\n",L.length,L.Maxsize);
textprintlist(L);
Insertlist(&L,1,1);//插入元素
Insertlist(&L,2,2);
Insertlist(&L,3,3);
Insertlist(&L,4,4);
Insertlist(&L,5,5);
Insertlist(&L,6,6);
Insertlist(&L,7,7);
Insertlist(&L,8,8);
Insertlist(&L,9,9);
Insertlist(&L,10,10);
printf("\n");
printf("insertlist after1:length=%d,Maxsize=%d\n",L.length,L.Maxsize);
Printlist(L);
Insertlist(&L,11,11);
Insertlist(&L,12,12);
Insertlist(&L,13,13);
Insertlist(&L,14,14);
Insertlist(&L,15,15);
Insertlist(&L,16,16);
Insertlist(&L,17,17);
Insertlist(&L,18,18);
Insertlist(&L,19,19);
Insertlist(&L,20,20);
printf("\n");
printf("increase after2:length=%d,Maxsize=%d\n",L.length,L.Maxsize);
Printlist(L);
int a=0;
Insertlist(&L,1,a);
printf("\n");
printf("insertlist in the middle of the list after2:length=%d,Maxsize=%d,inserted element=%d\n",L.length,L.Maxsize,a);
Printlist(L);
int e=1;
deletelist(&L,1,&e);
printf("\n");
printf("deletelist after:length=%d,Maxsize=%d,deleted element=%d\n",L.length,L.Maxsize,e);
Printlist(L);
}