铜仁市论坛

首页 » 分类 » 分类 » C语言数据结构静态顺序表
TUhjnbcbe - 2021/8/27 16:41:00
济南白癜风医院 https://baijiahao.baidu.com/s?id=1696552376715502314&wfr=spider&for=pc
C语言数据结构---顺序表(静态)

一、头文件与宏定义

标准输入输出头文件ElemType定义为元素类型int顺序表静态分配空间长度为6

#includestdio.h#defineElemTypeint#defineMAXSIZE6

二、结构体定义

一个存放元素的数组,长度为MAXSIZE存放长度为len,len可以随着插入数据而改变

typedefstruct{ElemTypedata[MAXSIZE];intlen;}Sqlist;

三、函数声明

函数的总体思路为“创、销、增、删、改、查”

必要操作:

创--初始化销--销毁增--增加数据删--删除数据改--修改数据查--查询数据

数据完整性校验:数据表判断是否为空,数据表判断是否为满

转换:人类常识“1”位置与计算机“0”位置的对应转换

voidinitList(Sqlistlist);//初始化顺序表boolisEmpty(Sqlistlist);//判断顺序表是否为空boolisFull(Sqlistlist);//判断顺序表空间是否已满voidappend(Sqlistlist,ElemTypee);//追加数据boolinsert(Sqlistlist,inti,ElemTypee);//在i位置插入数据evoidprint(Sqlistlist);//遍历数据intlocateElem(Sqlistlist,ElemTypee);//查找某个元素位置ElemTypegetElem(Sqlistlist,inti);//查找某个元素位置的值booldeleteElem(Sqlistlist,inti);//删除某个位置的元素

四、函数体

初始化顺序表

/*function:初始化顺序表param:Sqlistreturn:void*/voidinitList(Sqlistlist){for(inti=0;iMAXSIZE;i++){list.data=0;}list.len=0;}

判断顺序表是否为空

/**判断顺序表是否为空*/boolisEmpty(Sqlistlist){if(list.len==0){returntrue;}else{returnfalse;}}

判断顺序表空间是否已满

/**判断顺序表是否已满*/boolisFull(Sqlistlist){if(list.len=MAXSIZE){returntrue;}else{returnfalse;}}

追加数据

/*function:顺序表追加数据param:Sqlist,ElemTypereturn:void*/voidappend(Sqlistlist,ElemTypee){if(list.lenMAXSIZE){list.data[list.len]=e;list.len++;printf("#结果插入一条数据!\n");}else{printf("#结果顺序表已满!\n");return;}}

在i位置插入数据e

/*function:顺序表在i位置插入数据param:Sqlist,int,ElemTypereturn:bool布尔值*/boolinsert(Sqlistlist,inti,ElemTypee){intindex=i-1;//位置转下标if(index0

indexlist.len

list.len=MAXSIZE){//判断小标是否合法,顺序表是否已满returnfalse;}else{for(intj=list.len;jindex;j--){//控制i位置开始的元素往后移动,腾出i位置的空间list.data[j]=list.data[j-1];}list.data[index]=e;//在位置i插入数据elist.len++;//顺序表长度加1returntrue;}}

遍历数据

/*function:顺序表遍历数据param:Sqlistreturn:void*/voidprint(Sqlistlist){printf("#结果");for(inti=0;ilist.len;i++){printf("%d",list.data);}}

查找某个元素位置

/**查找元素位置*/intlocateElem(Sqlistlist,ElemTypee){intindex=-1;for(inti=0;ilist.len;i++){if(e==list.data){index=i+1;}}returnindex;}

查找某个元素位置的值

/**查找某个位置的元素值*/ElemTypegetElem(Sqlistlist,inti){if(i1

ilist.len){return-;}else{returnlist.data[i-1];}}

删除某个位置的元素

/**删除某个位置的元素*/booldeleteElem(Sqlistlist,inti){intindex=i-1;//转位置为下标if(index0

indexlist.len){returnfalse;}else{for(intj=index;jlist.len;j++){list.data[j]=list.data[j+1];}list.len--;}}

五、函数入口

数据表功能化操作

循环控制数据操作

intmain(){Sqlistlist;intcmd;while(true){printf("\n\n--------操作顺序表(静态),最大长度为%d\n",MAXSIZE);printf("操作:\n(1.初始化\t2.追加数据\t3.插入数据\t4.遍历数据\t\n5.删除数据\t6.按值查找数据\t7.按位置查找数据)");printf("\n请输入操作:");scanf("%d",cmd);printf("#############\n");switch(cmd){case1://初始化顺序表initList(list);break;case2://追加数据intappdata;printf("输入追加数据的值:");scanf("%d",appdata);append(list,appdata);break;case3://插入数据intinsertdata;intinsertlocate;printf("插入数据:");scanf("%d",insertdata);printf("插入的位置:");scanf("%d",insertlocate);boolisInsert;isInsert=insert(list,insertlocate,insertdata);if(isInsert){printf("插入成功!");}else{printf("插入失败,位置选择有问题……");}break;case4://遍历数据表print(list);printf("\n");break;case5://删除数据intdeletelocate;printf("删除数据位置:");scanf("%d",deletelocate);deleteElem(list,2);break;case6://按值查找intsearchvalue;intnumber;printf("查找某个值:");scanf("%d",searchvalue);number=locateElem(list,searchvalue);printf("元素位置:%d",number);break;case7://按序号查找intsearchlocate;printf("查找序号:");scanf("%d",searchlocate);printf("第%d个元素的值为%d",searchlocate,getElem(list,searchlocate));break;default:return-1;break;}printf("\n");}return0;}

六、运行情况

原虫子

在看和转发都是你对知识的贡献

1