数据结构实验3

上传人:s9****2 文档编号:497232603 上传时间:2023-11-06 格式:DOC 页数:24 大小:216KB
返回 下载 相关 举报
数据结构实验3_第1页
第1页 / 共24页
数据结构实验3_第2页
第2页 / 共24页
数据结构实验3_第3页
第3页 / 共24页
数据结构实验3_第4页
第4页 / 共24页
数据结构实验3_第5页
第5页 / 共24页
点击查看更多>>
资源描述

《数据结构实验3》由会员分享,可在线阅读,更多相关《数据结构实验3(24页珍藏版)》请在金锄头文库上搜索。

1、数据构造与算法实验报告实验序号:3 实验项目名称:链式表的操作学 号姓 名陈忠表专业、班1商智实验地点指引教师林开标实验时间1611.09一、实验目的及规定1 通过实验理解单链表的逻辑构造;2. 通过实验掌握单链表的基本操作和具体的函数实现。二、实验设备(环境)及规定微型计算机;indows 操作系统;Micosoft VsalStudio .0集成开发环境。三、实验内容与环节链式表表达和实现线性表的如下:#includestio.hiluestlihtypedef sct node /定义结点 int data; /结点的数据域为整型structode net; /结点的指针域 LstNod

2、e;typedef ListNo* inList; / 自定义LinkList单链表类型nkList CreatLisR1(); /函数,用尾插入法建立带头结点的单链表isNode LoatNo(LnkLs hea,itkey); /函数,按值查找结点oid eleteLit(LinkList head,t ke); /函数,删除指定值的结点odprni(LnList ed); /函数,打印链表中的所有值oid DeleAll(LinkLst hed); /函数,删除所有结点,释放内存/=主函数=voiman() intn; char c; LinkList ead; had=CratLst(

3、); /用尾插入法建立单链表,返回头指针 ptist(had); /遍历链表输出其值 rinf(Dlt nde (yn):); 输入y或n去选择与否删除结点 can(%c,&ch); if(h=y) | h=Y) print(Plae input Delete_dta:); sc(%,num); /输入要删除的字符串 Deleteis(had,nm); printis(head); leteAll(hea); /删除所有结点,释放内存/=用尾插入法建立带头结点的单链表=LkList CratLsR1(void) eur head; /返回头指针/=按值查找结点,找到则返回该结点的位置,否则返回

4、ULL=LitNde *LocateNde(LinkList hea, itkey) eurnp; /若p=NLL则查找失败,否则p指向找到的值为key的结点/=删除带头结点的单链表中的指定结点=oi eletLst(LinkList a,int ke) /按key值查找结点的 /若没有找到结点,退出/若找到,则从单链表中删除该结点,并释放结点/=打印链表,输出所有结点的值=od rntit(LinkLit head)/=删除所有结点,释放空间=vo Dtell(LinkListhea) 1、 实现并调试单链表的的有关算法;2、改写以上程序,实现功能如下:(1)编写一种删除链表中值为x的结点的

5、直接前趋结点的算法,若有多种值为的结点,则删除第一种x的直接前趋结点。(2)改写CretistR函数,使得链表创立时为非递减有序的单链表。(3)在算法(2)生成的非递减有序的单链表中,编写一种算法,删除单链表中值相似的多余结点。(4)写一种对单循环链表进行逆序输出(打印每个结点的值)的算法。四、实验成果与数据解决一.实验成果如图1所示:图1二.(1)实验成果如图2所示:图(2)实验成果如图3所示:图(3)实验成果如图4所示:图4(4) 实验成果如图5所示:图5五、分析与讨论感觉实验3比之前的实验一、二难度更大,只能浏览同窗的,有疑问便问同窗,这样勉强理解。六、教师评语签名:日期:成绩附源程序清

6、单:一. #inludstio.#nludedib.ype strode /定义结点 indata; /结点的数据域为整型strucnode *nex; /结点的指针域 ListNd;typedefListNd * inkist; / 自定义inkLis单链表类型ikList ratList1(); /函数,用尾插入法建立带头结点的单链表voipintst(LnkList hed);/函数,打印链表中的所有值itode *LocateNode(Lkist hea, int ey); /函数,按值查找结点voidDeeeList(LLt head,it key); /函数,删除指定值的结点 vo

7、d Deletel(LinkListhead); idmi() int um; charc; LnkListead; hed=CretListR1(); prit(List:n); pnlit(ead); pif(Delet noe (y/n):); /输入或n去选择与否删除结点 gtcr(); sanf(%c,ch); if(h=y|c=Y) rit(Plese inputDelet_dta:); ca(%d,&num); /输入要删除的数 DeeteLit(had,num); /删除 rintlt(ead);/打印 eleeAl(had); /删除所有结点,释放内存/=用尾插入法建立带头结

8、点的单链表=LnkList reaLt1(vid) it n,i,cunt; LinLis hed=(ikst)malloc(szef(ListNode); stNod *s, r;/s用来指向新生成的节点。r始终指向L的终端节点。 =head;r-xtUL; ptf(请输入链表节点数:); sanf(%,&n); pritf(输入节点值:);fr ( i 0; ida =cunt; /用新节点的数据域来接受i r-net = ; /用r来接纳新节点 =s;/r指向终端节点 r-next = LL; return head; /返回头指针 turhed; /返回头指针oiprintlit(Li

9、nkLst head) LisNode *p=ha-net; /从开始结点打印 wile(p)pinf(%d,pdata);p=p-net; pntf(n);/=按值查找结点,找到则返回该结点的位置,否则返回NULL=LstNode*oatNode(LnkListhea,t ey) stNe *phadxt; /从开始结点比较 hile( & p-daa!=key) /直到p为NLL或p-dat为ke止pp-next; /扫描下一种结点 re p; /若p=NL则查找失败,否则p指向找到的值为ky的结点/=删除带头结点的单 链表中的指定结点=void DeeteLi(Lkis head,t k

10、ey) sNode p,*r,*=ead; p=Locted(had,ky); /按key值查找结点的 f(=ULL) /若没有找到结点,退出prnf(poitin rrr);eit(); wh(q-next!=p) /p为要删除的结点,为p的前结点q=q-et; r=q-et; ex=rnext; free(); /释放结点/=删除所有结点,释放空间=voeleeAl(LinkList hed) istNd *=hed,*r; wile(pext)rp-ext;fre(p);p=; r(p);二.(1)#ncdestd.hicludsdli.htyeef struct nde /定义结点 int data;

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > 活动策划

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号