欢迎来到天天文库
浏览记录
ID:52815991
大小:15.96 KB
页数:5页
时间:2020-03-30
《数据结构之线性表的所有操作.docx》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、#include#include#defineList_init_size100//线性表的初始化容量设置为100#defineList_increase_size10//线性表的增量#defineOVERFLOW-1//返回OVERFLOW表示下标越界或者内存分配失败#defineOK0//表示函数成功返回typedefintElemType;typedefElemTypeET;typedefstruct{ET*data;//用来储存线性表的基址intsize;//用来记录线性表的容量intlength;//用来储存线性表
2、的当前元素个数}AdtList;intInitList(AdtList&L){//初始化线性表,传入的是线性表的引用L.data=(ET*)malloc(List_init_size*sizeof(ET));if(L.data==NULL){returnOVERFLOW;//内存分配失败}L.length=0;L.size=List_init_size;returnOK;}intDestroyList(AdtList&L){//销毁线性表,传入参数L的引用if(L.data)//如果L.data不为NULL,即线性表存在free(L.data);//释放空间re
3、turnOK;}intclearList(AdtList&L){//清空线性表if(L.data)//如果线性表存在L.length=0;//置为空表return0;}boolListEmpty(AdtList&L){//判断线性表时候为空if(L.data){//如果线性表存在if(L.length==0)returntrue;//如果当前元素个数为0说明为空表elsereturnfalse;}returnfalse;}intGetElem(AdtListL,inti,ET&e){//用e返回线性表L的第i个元素e=*(L.data+i-1);returnOK
4、;}intcompare(ETa,ET*b){//compare函数,用来判断a和b是否相等if(a==*b)return1;//如果相等则返回-1elsereturn0;}intLocateElem(AdtListL,ETe,int(*compare)(ET,ET*)){inti;for(i=0;i5、-1elsereturni;//如果找到了的话就返回下标}intPriorElem(AdtListL,ETcur_e,ET&pre_e){//查找e的前趋if(L.data){if(LocateElem(L,cur_e,compare)&&LocateElem(L,cur_e,compare)!=0){//如果e是L中的元素,并且e对应的下标不为0pre_e=*(L.data+LocateElem(L,cur_e,compare)-1);returnOK;}elsereturn-1;}}intNextElem(AdtListL,ETcur_e,ET&next_e6、){if(L.data){if(LocateElem(L,cur_e,compare)&&LocateElem(L,cur_e,compare)!=L.length-1){//如果e是L中的元素,并且e对应的下标不为最后一个next_e=*(L.data+LocateElem(L,cur_e,compare)+1);returnOK;}elsereturn-1;}}intList_insert(AdtList&L,inti,ETe){//在线性表的第i个位置之前插入e元素if(i<17、8、i>L.length+1)return-1;//i值不合法if(L.leng9、th>=L.size){ET*p;p=(ET*)realloc(L.data,(L.size+List_increase_size)*sizeof(ET));if(p==NULL)exit(-1);L.data=p;L.size=L.size+List_increase_size;}intflag=i-1;//想要插入e的位置for(intj=L.length-1;j>=flag;j--){L.data[j+1]=L.data[j];}*(L.data+flag)=e;++L.length;return1;}intListdelete(AdtList&L,int10、i,ET&e){if(L
5、-1elsereturni;//如果找到了的话就返回下标}intPriorElem(AdtListL,ETcur_e,ET&pre_e){//查找e的前趋if(L.data){if(LocateElem(L,cur_e,compare)&&LocateElem(L,cur_e,compare)!=0){//如果e是L中的元素,并且e对应的下标不为0pre_e=*(L.data+LocateElem(L,cur_e,compare)-1);returnOK;}elsereturn-1;}}intNextElem(AdtListL,ETcur_e,ET&next_e
6、){if(L.data){if(LocateElem(L,cur_e,compare)&&LocateElem(L,cur_e,compare)!=L.length-1){//如果e是L中的元素,并且e对应的下标不为最后一个next_e=*(L.data+LocateElem(L,cur_e,compare)+1);returnOK;}elsereturn-1;}}intList_insert(AdtList&L,inti,ETe){//在线性表的第i个位置之前插入e元素if(i<1
7、
8、i>L.length+1)return-1;//i值不合法if(L.leng
9、th>=L.size){ET*p;p=(ET*)realloc(L.data,(L.size+List_increase_size)*sizeof(ET));if(p==NULL)exit(-1);L.data=p;L.size=L.size+List_increase_size;}intflag=i-1;//想要插入e的位置for(intj=L.length-1;j>=flag;j--){L.data[j+1]=L.data[j];}*(L.data+flag)=e;++L.length;return1;}intListdelete(AdtList&L,int
10、i,ET&e){if(L
此文档下载收益归作者所有