网站可以一个人做吗,莆田网站制作计划,肃宁县网站建设,山东网页定制线性表的顺序表示指的是用一组地址连续的存储单元依次存储线性表的数据元素。在高级程序设计语言中#xff0c;通常都用数组来描述数据结构中的顺序存储结构。同时#xff0c;由于线性表的长度可变#xff0c;且所需最大存储空间随问题不同而不同#xff0c;在C语言中可用动…线性表的顺序表示指的是用一组地址连续的存储单元依次存储线性表的数据元素。在高级程序设计语言中通常都用数组来描述数据结构中的顺序存储结构。同时由于线性表的长度可变且所需最大存储空间随问题不同而不同在C语言中可用动态分配的一维数组如下描述。#define LIST_INIT_SIZE 10 //线性表存储空间的初始分配量#define LISTINCREMENT 2 //线性表存储空间的分配增量typedef struct{ElemType *elem//存储空间基址int length //当前长度int listsize//当前分配的存储容量}SqList顺序表的基本操作(12个)用C语言实现如下//SeqList.h#ifndef SEQLIST_H#defineSEQLIST_H#defineLIST_INIT_SIZE10#defineLISTINCREMENT2#defineTRUE1#defineFALSE0typedefstruct{ElemType*elem;intlength;intlistsize;}SqList;typedefintBoolean;intInitList(SqList*L);intDestroyList(SqList*L);intClearList(SqList*L);intListEmpty(SqListL);intListLength(SqListL);intGetElem(SqListL,inti,ElemType*e);intLocateElem(SqListL,ElemTypee,int(*compare)(ElemType,ElemType));intPriorElem(SqListL,ElemTypecur_e,ElemType*pre_e);intNextElem(SqListL,ElemTypecur_e,ElemType*next_e);intListInsert(SqList*L,inti,ElemTypee);intListDelete(SqList*L,inti,ElemType*e);intListTraverse(SqListL,void(*vi)(ElemType*));下面是各个函数的实现代码#includeSeqList.h#include#includeintInitList(SqList*L)//操作结果构造一个空的顺序线性表{(*L).elem(ElemType*)malloc(LIST_INIT_SIZE*sizeof(ElemType));if(!(*L).elem)printf(MemoryAllocationFailure\n);//分配内存失败(*L).length0;(*L).listsizeLIST_INIT_SIZE;return1;}intDestroyList(SqList*L)//初始条件顺序表L已存在。操作结果销毁顺序表L{free((*L).elem);(*L).elemNULL;(*L).length0;(*L).listsize0;return1;}intClearList(SqList*L)//初始条件顺序表L已存在。操作结果将L重置为空表{(*L).length0;return1;}intListEmpty(SqListL)//初始条件顺序表L已存在。操作结果若L为空表返回TRUE否则返回FALSE{if(L.length0)returnTRUE;elsereturnFALSE;}intListLength(SqListL)//初始条件顺序表L已存在。操作结果返回L中数据元素的个数{returnL.length;}intGetElem(SqListL,inti,ElemType*e)//初始条件顺序表L已存在1iListLength(L)//操作结果用e返回L中的第i个数据元素的值{if(i1||iL.length)printf(ERROR\n);*e*(L.elemi-1);return1;}intLocateElem(SqListL,ElemTypee,int(*compare)(ElemType,ElemType)){//初始条件顺序表L已存在compare()是数据元素判定函数(满足为1否则为0)//操作结果返回L中第1个与e满足关系compare()数据元素的位序。//若这样的数据元素不存在则返回值为0ElemType*p;inti1;pL.elem;while(iL.length!compare(*p,e))i;if(iL.length)returni;elsereturn0;}intPriorElem(SqListL,ElemTypecur_e,ElemType*pre_e){//初始条件顺序表L已存在//操作结果若cur_e是L的数据元素且不是第一个则用pre_e返回它的前驱否则操作失败pre_e无定//义inti2;ElemType*pL.elem1;while(iL.length*p!cur_e){p;i;}if(iL.length)return-1;else{*pre_e*--p;return1;}}intNextElem(SqListL,ElemTypecur_e,ElemType*next_e){//初始条件顺序表L已存在//操作结果若cur_e是L的数据元素且不是最后一个则用next_e返回它的后继否则操作失败next_e无//定义inti1;ElemType*pL.elem;while(i{i;p;}if(iL.length)return-1;else{*next_e*p;return1;}}intListInsert(SqList*L,inti,ElemTypee){//初始条件顺序表L已存在1iListLength(L)1//操作结果在L中第i个位置之前插入新的数据元素eL的长度加1ElemType*newbase,*q,*p;if(i1||i(*L).length1)//i值不合法printf(ERROR\n);if((*L).length(*L).listsize)//当前存储空间已满增加分配{newbase(ElemType*)realloc((*L).elem,((*L).listsizeLISTINCREMENT)*sizeof(ElemType));if(!newbase)printf(MemoryAllocationFailure\n);//存储分配失败(*L).elemnewbase;//新基址(*L).listsizeLISTINCREMENT;//增加存储容量}q(*L).elemi-1;//q为插入位置for(p(*L).elem(*L).length-1;pq;--p)//插入位置及之后的元素右移*(p1)*p;*qe;//插入e(*L).length;//表长加1return1;}intListDelete(SqList*L,inti,ElemType*e){//初始条件顺序表L已存在1iListLength(L)//操作结果删除L的第i个数据元素并用e返回其值L的长度减1ElemType*p,*q;if(i1||i(*L).length)printf(ERROR\n);p(*L).elemi-1;*e*p;q(*L).elem(*L).length-1;for(p;pq;p)*(p-1)*p;(*L).length--;return1;}intListTraverse(SqListL,void(*vi)(ElemType*)){//初始条件顺序表L已存在//操作结果依次对L每个数据元素调用函数vi()。一旦vi()失败则操作失败// vi()的形参加*表明可通过调用vi()改变元素的值ElemType*p;inti;pL.elem;for(i1;iL.length;i)vi(p);printf(\n);return1;}以下是测试主函数int main(){SqListL;ElemTypee,e0;inti;intj,k;iInitList(L);printf(初始化L后L.elem%uL.length%dL.listsize%d\n,L.elem,L.length,L.listsize);for(j1;j5;j)iListInsert(L,1,j);printf(在L的表头依次插入15后*L.elem);for(j1;j5;j)printf(%d,*(L.elemj-1));printf(\n);printf(L.elem%uL.length%dL.listsize%d\n,L.elem,L.length,L.listsize);iListEmpty(L);printf(L是否空i%d(1:是0:否)\n,i);iClearList(L);printf(清空L后L.elem%uL.length%dL.listsize%d\n,L.elem,L.length,L.listsize);iListEmpty(L);printf(L是否空i%d(1:是0:否)\n,i);for(j1;j10;j)ListInsert(L,j,j);printf(在L的表尾依次插入110后*L.elem);for(j1;j10;j)printf(%d,*(L.elemj-1));printf(\n);printf(L.elem%uL.length%dL.listsize%d\n,L.elem,L.length,L.listsize);ListInsert(L,1,0);printf(在L的表头插入0后*L.elem);for(j1;jListLength(L);j)printf(%d,*(L.elemj-1));printf(\n);printf(L.elem%u(有可能改变)L.length%d(改变)L.listsize%d(改变)\n,L.elem,L.length,L.listsize);GetElem(L,5,e);printf(第5个元素的值为%d\n,e);for(j3;j4;j){kLocateElem(L,j,comp);if(k)printf(第%d个元素的值为%d的平方\n,k,j);elseprintf(没有值为%d的平方的元素\n,j);}for(j1;j2;j){GetElem(L,j,e0);iPriorElem(L,e0,e);if(i-1)printf(元素%d无前驱\n,e0);elseprintf(元素%d的前驱为%d\n,e0,e);}for(jListLength(L)-1;jListLength(L);j){GetElem(L,j,e0);iNextElem(L,e0,e);if(i-1)printf(元素%d无后继\n,e0);elseprintf(元素%d的后继为%d\n,e0,e);}kListLength(L);for(jk1;jk;j--){iListDelete(L,j,e);if(i0)printf(删除第%d个数据失败\n,j);elseprintf(删除的元素值为%d\n,e);}printf(依次输出L的元素);ListTraverse(L,visit);printf(L的元素值加倍后);ListTraverse(L,dbl);ListTraverse(L,visit);DestroyList(L);printf(销毁L后L.elem%uL.length%dL.listsize%d\n,L.elem,L.length,L.listsize);return0;}