线性表的基本操作

上传人:回**** 文档编号:203184521 上传时间:2023-04-24 格式:DOC 页数:24 大小:55KB
收藏 版权申诉 举报 下载
线性表的基本操作_第1页
第1页 / 共24页
线性表的基本操作_第2页
第2页 / 共24页
线性表的基本操作_第3页
第3页 / 共24页
资源描述:

《线性表的基本操作》由会员分享,可在线阅读,更多相关《线性表的基本操作(24页珍藏版)》请在装配图网上搜索。

1、实验二 线性表的基本操作一、实验目的1掌握用 /C语言调试程序的基本措施。2.掌握线性表的顺序存储和链式存储的基本运算,如插入、删除等。二、实验规定+C完毕算法设计和程序设计并上机调试通过。2.撰写实验报告,提供实验成果和数据。3分析算法,规定给出具体的算法分析成果,涉及时间复杂度和空间复杂度,并简要给出算法设计小结和心得。三、实验内容:1. 分析并运营如下各子程序的重要功能。程序:顺序存储的线性表和运算#inudfine MAXSE 100in listMXI;it n;/*ier a seqlsin sq_srt(intlit, i p_, n i, int )int j;if(ip_)

2、etrn(1);if (p_n=MAXSIE) reun(2);fr (j=*p_n1; ;j-)is=lstj;lisi=x;(p_n)+;rn(0);/*delee i ae litint deete( lis, i *_, i)int j;if (i=*p_n) reurn();for ( =1; j=*_;j+)listj- =listj;(*_n)-;retrn(0);voi main()int i,em;intf(pae nput the numbe for n);pit(n=);sanf(%,);fr (=0; n; i)pintf(t%=,i); scaf(%d,&liti);

3、printf(Thelst bere inertinisn);for (i=0; i=n; i+) printf(%d ,listi);inf(n);pnf(lease iputthe psition hee you wato inserta valuenposition=);sanf(d,);print(please nputhe valueyowant to inser.nx=);sanf(,);tempsq_iset(list,&n,i,x);switc(tep)case:printf(Theinsertionisuccessful!n);printf(Theist is afterie

4、rtion in);for(i; i=; +) printf( ,listi);rin();ntf(%dn,n);rak;case:ase :ritf(Thnsetin is not sucesul!);brek;/eleting*/printf(The ist befre eleig is);fo (=; i=;+) prinf(% ,lis);prn(n);prit(leae inutthe itio wher ouwant etvanpon);scan(%d,&i);tm=sqdelee(lis,&,i);swith(temp)ae 0:prntf(Te deeing sccesfl!n

5、);pitf(The lst after delei in);or(=0; i#icludemaloc.struc dehrat;struc nd*next;ypedefstruc noe ODE;This functinceatesa lin_is with N nodes.*/ODE *reate_link_ist(int n)it i;NODE *had, *p, *;i (0) eturnULL;hed = (ODE) mallo(sef(NODE));p ha; prif(Plese iput%dhrorte lilisn,n);for(i; i; +)scnf(% ,&(-ata)

6、);=(NOD *)aloc(ieof(ODE);prit(stn);p-net=q;p=q;can(%c ,&(pdata);etcar();-ext=NULL;return (head);/Thi uncion inerta ode wose value i b*/efore thnodewhose vlue isa, if the nodes not xist,*/*tnnst it te of the li/vodnsert(NOD *p_head, ha a, char b)O *, q;q(NODE *)aloc(siof(OD));qdata = ;q-n =NULL;if (*

7、 p_hea= UL) * p_head = q;sp=(ODE*)maloc(sieof(NODE);p = * p_head;whil(-ta ! a& p-xt != NULL)p=p-ne;-nex =pnext;p-net ;/*funcio dee e node woealue i a,*/*ifsce, return0, retn 1*/int deenode(NOE*p_had, ha )NDE *p,*q;q=*head;f (q=NUL)reurn(1);if (-dat =a)*p_head q-ex;free(q);rturn ();elshe(q-daa != a &

8、 qnet !=NULL)p =q; = qnex;if (qdta = a)pnex=q-nex;fre(q);retun(0);l rturn(1);oid in()N *my_had,p; reae lin istwth m nodes */t m;ca ch_a,ch;printf(le iput h numer o ode the link_listnm);scnf(d,m);tchr();rtf(tes1);y_had = (ND ) maloc(sizeof(NOE);_eadcrealnk_it(m);*Oupu the link lis*printf(Te lnk lis i

9、s lke:);p=y_had;hie (p != UL)print(%c,data);p-next;intf(n);/*insert ande whose aluei b befoe a*rntf(leae nput thepoitioforn cha=);getcar();canf(%c,&h_a);gtchar();ritf(aseinptthe lue hatyu antto nsertn c);snf(%c,&hb);gethr();nsr(&my_head,ch_a,ch);prntf(en list aftensrton is like:n);p=y_head;wle ( !=N

10、ULL)pintf(%c ,p-data);p=p-ext;pnt(n);/*delet a oe woe value i *rintf(Plas inpu the poition r a a=);nf(%c,&cha);getar();deletenod(&my_head,c_);pinf(helink ls atr deletingisle:n);p=my_head;hile (p != NUL)print(% ,pdata);p=p-net;printf(n);3. 运营如下程序并分析各子函数的重要功能。#include sdio.hincludepNext!ULL)if(pripNet

11、-datadata)nod-Net=pPri-pe;pPr-pNext=pode;ak;PPipN;if (pP-pext=NLL)/如果要插入的结点最小pPri-Nextpde;/输出链表voi pritLkedLis(pNode ad)pNode temp=ead-Net;while (temp!=NULL)prtf(%d ,temp-data);temp=t-pt;/从链表中删除结点voi dformst(pNodehead,int dta)Node temp=headpNext;pNod Pi=head;hie (temp!=NUL)i (tem-data=dta)pPr-pNext=

12、tp-Next;fe(tep);brek;Pemp;temtmp-Nex;void ain()pNode head(pNoe)malloc(sizeof(srcttagNe);/给头指针分派空间pNod pTmNL;inttemp;hed-pext=ULL;/比较好的习惯就是分派好空间,立即赋值rinf(请输入要放入链表中的数据,以结尾:);/读入数据,以1结尾,把数据插入链表中an(%d,&tem);wile (tem!-1)pTemp=(pNode)mlc(sieo(struct tagNode);pTem-dat=tep;pTmp-Nex=ULL;inseLis(ed,pTemp);sc

13、anf(d,tm);pinf(降序排列的链表为:n);pintLinkedist(ed);printf(n);/下面的代码当删除函数编写成功后,可以取消注释,让其执行,重要是调用函数实现链表结点的删除/rin(请输入要删除数,以-1结尾:);/scanf(d,temp);/ile (tmp!-1)/dlorms(head,temp);/anf(%d,tm);/rnf(删除节点后,链表中剩余数据为:);/printinkdist(hed);/pitf(n);四、思考与提高试将以上链表改为有序表,并分析有序表有哪些明显的长处和缺陷?库函数载和常量定义:(代码,+)#includeostreausi

14、 nmspac s;onst ntMaxSiz=1;(1)顺序表存储构造的定义(类的声明):(代码)tmlate cls aty /定义模板类SeqLstlas Seqistpublic: SeLit( ); /无参构造函数 SeqLs(datatye a ,in); /有参构造函数 SeqList(); /析构函数为空 intLength(); /求线性表的长度 daatype Get(ti); /按位查找,取线性表的第i个元素 inocat(datatype itm); /查找元素item void Inset(in ,daape iem); /在第i个位置插入元素iem dattpDel

15、ete(in i); 删除线性表的第i个元素 vod dipla(); /遍历线性表,按序号依次输出各元素pivat: dattype datMxSie; /寄存数据元素的数组 it egh; 线性表的长度;()初始化顺序表算法实现(不带参数的构造函数)/*输 入:无*前置条件:顺序表不存在*功 能:构建一种顺序表输 出:无*后置条件:表长为0*/实现代码:eplat atatyp:: SeqLst( ) lengh0;(3)顺序表的建立算法(带参数的构造函数)/*输 入:顺序表信息的数组形式a,顺序表长度n*前置条件:顺序表不存在*功 能:将数组中元素建为长度为n的顺序表*输 出:无*后置条

16、件:构建一种顺序表*/实现代码:teplate as dataye eListdatatye:: eqLis(dattye a, int n)if (naxSize) cut数组元素个数不合法ndl;for(t i=0; in;i+) datai=ai;ength=;(4)在顺序表的第个位置前插入元素e算法/输 入:插入元素e,插入位置i*前置条件:顺序表存在,i要合法*功 能:将元素插入到顺序表中位置i处输 出:无*后置条件:顺序表插入新元素,表长加1*实现代码:epate vdSeqLit=MaxSize) ot溢出endl;if (ilength+) coti不合法!=; j-)datj

17、dtaj-1;atai1itm;lngt+;(5)删除线性表中第个元素算法*输 入:要删除元素位置i*前置条件:顺序表存在,i要合法*功 能:删除顺序表中位置为i的元素输 出:无*后置条件:顺序表册除了一种元素,表长减1*/实现代码:tepate cla datatpedaate SeqLt::Dlet(it i) nt it,j;if (legth=0) out表为空,无法删除元素!l;if (i1| ilegh) cuti不合法!enl;item=data;/获得要删除的元素值for (=i; lengt; +)dataj-1dtaj; /注意数组下标从0记leth-;returnitem

18、;(6)遍历线性表元素算法/*输 入:无*前置条件:顺序表存在*功 能:顺序表遍历*输 出:输出所有元素*后置条件:无*实现代码:tempevoid eqListatatype::isplay()if(legh=0)cout表为空,无法输出!endl;or(int i=0;ilengt;i+)outdaai ;()获得线性表长度算法/*输 入:无*前置条件:顺序表存在*功 能:输出顺序表长度*输 出:顺序表长度后置条件:无*/实现代码:tempte in eqLsatatype:Lngth()return th;(8)在顺序线性表中查找e值,返回该元素的位序算法/*输 入:查询元素值e*前置条

19、件:顺序表存在*功 能:按值查找值的元素并输出位置*输 出:查询元素的位置*后置条件:无*实现代码:teplte int SeLis:Lat(tatp item) for (int i0; ilegth;i+) if(atai=iem) rtrn i+1 ; 下标为i的元素等于itm,返回其序号+1rturn 0; /查找失败(9)获得顺序线性表第i个元素的值*输 入:查询元素位置i*前置条件:顺序表存在,i要合法*功 能:按位查找位置为i的元素并输出值*输 出:查询元素的值后置条件:无*/实现代码:temate clas datatyp tatyp qList:Get(i i)if (ile

20、ngt)oi不合法!endl;els reundta-1;()判表空算法*输 入:无*前置条件:无*功 能:判表与否为空*输 出:为空返回1,不为空返回0后置条件:无 */实现代码:templte bool SeLstatatye:Empt()i (ent=0)return 1; elsereturn 0; (11)求直接前驱结点算法/输 入:要查找的元素e,待寄存前驱结点值1*前置条件:无*功 能:查找该元素的所在位置,获得其前驱所在位置。输 出:返回其前驱结点的位序。*后置条件:e值为前驱结点的值*/实现代码:tempaeclassdatatein SLs:Pre(datatype te)

21、int kLocat(tm);if (k0)urn ;lscout无前驱结点!edl;return0; (2)求直接后继结点算法*输 入:要查找的元素e,待寄存后继结点值e1*前置条件:无*功 能:查找该元素的所在位置,获得其后继所在位置。*输 出:返回其后继结点的位序。*后置条件:e1值为后继结点的值*/实现代码:temlateint SeqList:Suc(daaype item)int =Locae(iem)+1;if (legt)ut无后继结点!ndl; rurn ;eserun k;上机实现以上基本操作,写出mai()程序:用以上基本操作算法,实现A=U算法。(运用函数模板实现)/*

22、输 入:集合A,集合B*前置条件:无*功 能:实现A=AU*输 出:无*后置条件:A中添加了B中的元素。*/实现代码:emplaeSeqLisdattye eLis:Add(SeqListLegh();for(n i=1;Inset(+nu,imet(i);return *his;vid ain()Lstint A,B;cotB的成果是:;.Ier(1,1);A.Insert(,);A.Inet(3,);A.Insert(4,);AInsert(5,); /插入集合A中元素B.nsert(,2);BInsert(2,6);B.nsert(3,1);B.st(4,8);BIset(5,9); /

23、插入集合B中元素AAdd(B);A.display();coted;实现代码:emplateoid SeqLdatatye:orderInert(datatyeiem)intu=ths-Leng();or (ni=0;inm;i+)if ((daiitm)o (int k=u;k;-)atakdak1;ai1=item;ength+;rea;i(daiite)fo(int =num;k;k-)data=dak1;dtai=tem;legh+;reak;i main()SqListA,B;.Inert(1,3);A.nr(,5);Ine(3,);A.Inert(4,8);A.Inert(5,10

24、); /插入顺序表out原顺序表为:end;Aipay(); /输出顺序表coutendl;Aordrnsert(2); A.oderInsrt(4); /插入元素cu插入新元素后的顺序表为:endl;Adpay(); /输出重新排序后的顺序表算法实现:,Lb为非递减的有序线性表,将其归并为L,该线性表仍有序(未考虑相似时删除一反复值)(运用函数类板实现)rgeList:*输 入:有序线性表La,有序线性表Lb*前置条件:顺序表已有序*功 能:将两线性表归并,不去掉相似元素*输 出:返回一种新的有序线性表L后置条件:无*/实现代码:tempateSeqLit SqListdaype:lseAd

25、(SeqLst Seq1,qListdattype S)in nu=Se2.Lngt();o(in 0;i=nu;+)Seq1.oderInrt(Seq2.Get(i);retn Se;vid ain()SeqLi La,;LIsrt(1,2);nsert(2,4);a.nert(,); Lanert(4,8); /插入cutLa中元素为:end;L.disly(); /输出Lacoutenl;LIner(,3); Lb.Insert(2,);Lb.Inert(3,8); /插入LboutLb中元素为:edl;L.display(); /输出Lbcoutendl;c=LcElsdd(,Lb); /合并两线性表cout合并后的Lc为:enl;Lc.displa(); /输出合并后的线性表outen;

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!