(严蔚敏)第2章顺序表实验(简单)

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

#includeiostreamusingnamespacestd;#defineOK1#defineERROR0#defineOVERFLOW-2typedefintStatus;#defineLIST_INIT_SIZE100//线性表存储空间的初始分配量#defineLISTINCREMENT10//线性表存储空间的分配增量typedefstruct{int*elem;//存储空间基址intlength;//当前长度intlistsize;//当前分配的存储容量}SqList;//算法2.3intInitList_Sq(SqList&L){//顺序表初始化L.elem=newint[LIST_INIT_SIZE];if(!L.elem)exit(OVERFLOW);L.length=0;L.listsize=LIST_INIT_SIZE;returnOK;}//算法2.4intListInsert_Sq(SqList&L,inti,inte){//在顺序表第i个位置之前插入eint*p,*q,*newbase;if(i1||iL.length+1)return0;//i值不合法if(L.length=L.listsize){//若存储空间已满,增加分配newbase=(int*)realloc(L.elem,(L.listsize+LISTINCREMENT)*sizeof(int));if(!newbase)exit(OVERFLOW);//存储分配失败L.elem=newbase;//新地址L.listsize+=LISTINCREMENT;//增加存储容量}q=&(L.elem[i-1]);//q为插入位置for(p=&(L.elem[L.length-1]);p=q;--p)*(p+1)=*p;//插入位置及之后的结点右移*q=e;//插入结点e++L.length;;return1;}voidListCreate_Sq(SqList&L,intn){//建立顺序表L,并输入n个元素的值inti,e;InitList_Sq(L);for(i=1;i=n;i++){coutdata=;cine;ListInsert_Sq(L,i,e);}}//算法2.5intListDelete_Sq(SqList&L,inti,int&e){//删除顺序表的第i个结点int*p,*q;if(i1||iL.length)returnERROR;p=&(L.elem[i-1]);//p为被删除结点的位置e=*p;q=L.elem+L.length-1;for(++p;p=q;++p)*(p-1)=*p;//被删除结点之后的结点左移--L.length;cout被删除的结点为:eendlendl;returnOK;}voidListPrint_Sq(SqListL){//顺序表的输出cout顺序表为:endl;int*p=L.elem;for(inti=0;i=L.length-1;i++)cout*(p++);coutendlendl;;}//算法2.6:顺序表的按值查找intLocateElem(SqListL,inte){inti=1;//i的初值为第1个结点的序号int*p=L.elem;//p的初值为第1个结点的位置while(i=L.length&&*p!=e){i++;p++;}if(i=L.length)returni;elsereturn0;}voidmain(){intn,i,e,sta;SqListL1;cout建立顺序表L1:endl;cout输入几个结点值?n=;cinn;ListCreate_Sq(L1,n);ListPrint_Sq(L1);cout删除第几个结点?i=;cini;sta=ListDelete_Sq(L1,i,e);if(sta==ERROR)cout该结点不存在!\n\n;ListPrint_Sq(L1);cout待查找结点的值是多少?e=;cine;i=LocateElem(L1,e);if(i==0)cout值为e的结点不存在!\n\n;elsecout值为e的结点是第i个结点\n\n;}

1 / 3
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功