欢迎来到天天文库
浏览记录
ID:42643328
大小:115.00 KB
页数:7页
时间:2019-09-19
《线性表顺序存储结构的11个基本操作函数》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、1.设计线性表顺序存储结构的□个基本操作函数,并编程实现之*/#include#include#include#defineLIST_INIT_SIZE100#defineLISTINCREMENT10typedefcharElemType;typedefstruct{ElemType*elem;intlength;intlistsize;}SqList;boolcompare(ElemTypep,ElemTypee){if(p==e)retu
2、rntrue;elsereturnfalse;}voidlnitList(SqList&L)〃构造一个空的线性表L{L.elem=(ElemType*)malloc(UST_INIT_SIZE*sizeof(ElemType));if(IL.elem)exit(O);L.length=O;L.listsize=LISTINITSIZE;MH*MM夕}voidDestroyList(SqList&L)〃销毁线性表L{free(L.elem);L.elem=NULL;if(L.elem)exit(O);L
3、.length=O;}voidClearList(SqList&L)〃将L重置为空表L.elem=, ,;L.length=O;}boolListEmpty(SqList&L)〃若L为空表,返回TRUE,否则FALSE{if(L.length==O)returntrue;elsereturnfalse;}intListLength(SqListL)〃返回L中元素个数{returnL」ength;}boolGetElemfSqListLJnti,ElemType&e)〃用e返回数据中第i个元素的值{i
4、f(IL.Iength)returnfalse;else讦(i>L.length
5、
6、i7、;}}intPrio吒lem(SqListL,ElemTypecur_e,ElemType&pre_e)//若cur_e是L的数据元素,[=L不是第一个,用pre_e返回它的前驱。否则操作失败inti=LocateElem(L,cur_e);if(i==O)printf("不存在您定位的元素!");elseif(i==l)printf("您指定的是首元素,无前驱!H);elsepre_e=L.elem[i-2];returni;intNextElem(SqListLzElemTypecur_e8、,ElemType&next_e){inti=LocateElem(Lzcur_e);if(i==O)printf(n不存在您定位的元素!H);elseif(i==L.length)printf("您指定的是末元素,无后继!");next_e=L.elem[i];returni;boolListlnsert(SqList&LJnti,ElemTypee)〃在L的第i个位置之前插入新的数据e,L的长度增加1ElemType*newbase,*pz*q;if(i9、10、i>L.length+l)r11、eturnfalse;else{if(L.length>二L」istsize){newbase=(ElemType*)realloc(L.elem,(L.listsize+LISTINCREMENT)*sizeof(ElemType));if(!newbase)exit(O);L.elem=newbase;L」istsize+二LISTINCREMENT;}q=&(L.elem[i-l]);for(p=&(L.elem[L.length-l]);p>=q;-p)*(p+l)=*p;*q=e;L.ele12、m[L.length+l]=,O,;++L」ength;returntrue;}boolListDelete(SqList&L,inti,ElemType&e)〃删除第i个元素,并用e返冋,长度减1ElemType*p,*q;讦(iL」ength)returnfalse;elsep=&(L.elem[i-l]);e=*p;q=L.elem+L」ength・l;for(++p;p<=q;++p)*(p-l)=*p;L.elem[Llength
7、;}}intPrio吒lem(SqListL,ElemTypecur_e,ElemType&pre_e)//若cur_e是L的数据元素,[=L不是第一个,用pre_e返回它的前驱。否则操作失败inti=LocateElem(L,cur_e);if(i==O)printf("不存在您定位的元素!");elseif(i==l)printf("您指定的是首元素,无前驱!H);elsepre_e=L.elem[i-2];returni;intNextElem(SqListLzElemTypecur_e
8、,ElemType&next_e){inti=LocateElem(Lzcur_e);if(i==O)printf(n不存在您定位的元素!H);elseif(i==L.length)printf("您指定的是末元素,无后继!");next_e=L.elem[i];returni;boolListlnsert(SqList&LJnti,ElemTypee)〃在L的第i个位置之前插入新的数据e,L的长度增加1ElemType*newbase,*pz*q;if(i9、10、i>L.length+l)r11、eturnfalse;else{if(L.length>二L」istsize){newbase=(ElemType*)realloc(L.elem,(L.listsize+LISTINCREMENT)*sizeof(ElemType));if(!newbase)exit(O);L.elem=newbase;L」istsize+二LISTINCREMENT;}q=&(L.elem[i-l]);for(p=&(L.elem[L.length-l]);p>=q;-p)*(p+l)=*p;*q=e;L.ele12、m[L.length+l]=,O,;++L」ength;returntrue;}boolListDelete(SqList&L,inti,ElemType&e)〃删除第i个元素,并用e返冋,长度减1ElemType*p,*q;讦(iL」ength)returnfalse;elsep=&(L.elem[i-l]);e=*p;q=L.elem+L」ength・l;for(++p;p<=q;++p)*(p-l)=*p;L.elem[Llength
9、
10、i>L.length+l)r
11、eturnfalse;else{if(L.length>二L」istsize){newbase=(ElemType*)realloc(L.elem,(L.listsize+LISTINCREMENT)*sizeof(ElemType));if(!newbase)exit(O);L.elem=newbase;L」istsize+二LISTINCREMENT;}q=&(L.elem[i-l]);for(p=&(L.elem[L.length-l]);p>=q;-p)*(p+l)=*p;*q=e;L.ele
12、m[L.length+l]=,O,;++L」ength;returntrue;}boolListDelete(SqList&L,inti,ElemType&e)〃删除第i个元素,并用e返冋,长度减1ElemType*p,*q;讦(iL」ength)returnfalse;elsep=&(L.elem[i-l]);e=*p;q=L.elem+L」ength・l;for(++p;p<=q;++p)*(p-l)=*p;L.elem[Llength
此文档下载收益归作者所有