c语言实现顺序表的基本操作.docx
c语言实现顺序表的基本操作
顺序表(也称作线性表或数组列表)是一种线性数据结构,它使用一段地址连续的存储单元依次存储线性表的数据元素。在C语言中,我们可以使用数组来实现顺序表,并定义一系列基本操作,如初始化、插入、删除、查找和遍历等。
c代码
#includestdio.h
#includestdlib.h
#defineMAXSIZE100//顺序表的最大长度
#defineSUCCESS1
#defineERROR0
#defineTRUE1
#defineFALSE0
typedefintStatus;//Status是函数的类型,其值是函数结果状态代码,如OK等
typedefintElemType;//ElemType顺序表存储元素的类型
//顺序表结构定义
typedefstruct{
ElemTypedata[MAXSIZE];//存储空间的数组
intlength;//当前长度
}SqList;
//初始化顺序表
StatusInitList(SqList*L){
L-length=0;//空表长度为0
returnSUCCESS;
}
//销毁顺序表(实际上对于静态数组实现的顺序表,这一步可以省略)
StatusDestroyList(SqList*L){
//对于静态数组实现的顺序表,这里实际上什么都不用做
//如果是动态分配的内存,则需要释放内存
returnSUCCESS;
}
//顺序表长度
intListLength(SqListL){
returnL.length;
}
//查找元素(按值查找)
intLocateElem(SqListL,ElemTypee){
for(inti=0;iL.length;i++){
if(L.data[i]==e){
returni+1;//返回位置(第几个元素),注意这里是从1开始计数
}
}
return0;//未找到返回0
}
//插入元素
StatusListInsert(SqList*L,inti,ElemTypee){
if(i1||iL-length+1){
returnERROR;//插入位置不合法
}
if(L-length==MAXSIZE){
returnERROR;//表满
}
for(intk=L-length-1;k=i-1;k--){
L-data[k+1]=L-data[k];//将插入位置及之后的元素后移
}
L-data[i-1]=e;//插入新元素
L-length++;//表长增1
returnSUCCESS;
}
//删除元素
StatusListDelete(SqList*L,inti,ElemType*e){
if(i1||iL-length){
returnERROR;//删除位置不合法
}
*e=L-data[i-1];//将被删除元素赋值给e
for(intk=i;kL-length;k++){
L-data[k-1]=L-data[k];//将删除位置之后的元素前移
}
L-length--;//表长减1
returnSUCCESS;
}
//打印顺序表
voidPrintList(SqListL){
for(inti=0;iL.length;i++){
printf(%d,L.data[i]);
}
printf(\n);
}
intmain(){
SqListL;
InitList(L);
//插入元素
ListInsert(L,1,10);
ListInsert(L,2,20);
ListInsert(L,3,30);
PrintList(L);//输出:102030
//查找元素
intpos=LocateElem(L,20);
if(pos){
printf(Element20foundatposition:%d\n,pos);
}else{
printf(Element20notfound.\n);
}
//删除元素
ElemTypedeletedElem;
ListDelete(L,2,deletedElem);
printf(Deletedelement:%d\n,deletedElem);
PrintList(L);//输出:1