顺序表c语言,简单的顺序表c语言实现

该博客介绍了如何使用C++实现顺序表(SqList)的数据结构,包括初始化、显示、追加、插入和删除元素等基本操作。示例代码展示了如何动态管理数组,如扩容和移动元素来保持数据的完整性和正确性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#include

#include

//存放的数据类型

#define ElemType int

//表的大小

#define MAX_SIZE 100

typedef struct {

ElemType *e;//数据

int len;//已经存放的数据数目

int size;//可以存放的数据数目

} SqList;

void initSqList(SqList* list);

void showList(SqList* list);

void appendElem(SqList*list,ElemTypee);

void insertElem(SqList* list,int i,ElemType e) ;

void delElem(SqList *list,int i);

int main(int argc, char *argv[])

{

SqList *list=(SqList*)malloc(sizeof(SqList));

initSqList(list);

appendElem(list,3);

appendElem(list,6);

appendElem(list,1);

appendElem(list,2);

showList(list);

insertElem(list,3,10);

showList(list);

delElem(list,4);

showList(list);

free(list);

return 0;

}

//初始化

void initSqList(SqList* list){

list->e = (ElemType *)malloc(sizeof(ElemType)*MAX_SIZE);

list->len=0;

list->size=MAX_SIZE;

printf("initList successful!\n");

return;

}

//打印表中数据

void showList(SqList* list){

if(list == NULL || list->len == 0) {

printf("this list is empty!\n");

return;

}

int i,len;

len=list->len;

printf("this list have %d elems:\n",len);

for(i=0;i

printf("%d ",list->e[i]);

}

printf("\n");

return;

}

//在表的最后附加数据

void appendElem(SqList*list,ElemTypee){

int len=list->len,size=list->size;

if(len+1>size) {

printf("append err:this list is full\n");

return;

}

list->e[len] = e;

list->len++;//不能使用局部变量len++

return;

}

//在表的第i个元素之前插入新数据

void insertElem(SqList* list,int i,ElemType e){

int len=list->len,size=list->size;

if(len+1>size || i<1 || i>len+1) {

printf("insert err\n");

return;

}

if(i==len+1) {

appendElem(list,e);

return;

}

int j;

ElemType *p;

for(j=len;j>=i;j--){//第i个元素以及以后元素依次向后移动一位

p=&list->e[j];

*p = list->e[j-1];

}

list->e[j]=e;

list->len++;

return;

}

//删除第i个元素

void delElem(SqList *list,int i){

int len=list->len;

if(i<1 || i>len || len<0){

printf("del err\n");

return;

}

int j;

ElemType *p;

for(j=i;j

p=&list->e[j-1];//数组元素序号由0开始,元素位数由1开始

*p=list->e[j];

}

list->len--;

return;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值