资源预览内容
第1页 / 共19页
第2页 / 共19页
第3页 / 共19页
第4页 / 共19页
第5页 / 共19页
第6页 / 共19页
第7页 / 共19页
第8页 / 共19页
第9页 / 共19页
第10页 / 共19页
亲,该文档总共19页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
数据构造实验报告二学校: 班级: 学号: 姓名: 日期: 程序名: 一、上机实验的问题和规定:单链表的查找、插入与删除。设计算法,实现线性构造上的单链表的产生以及元素的查找、插入与删除。具体实现规定:1. 从键盘输入20个整数,产生不带表头的单链表,并输入结点值。2. 从键盘输入1个整数,在单链表中查找该结点的位置。若找到,则显示“找到了”;否则,则显示“找不到”。3. 从键盘输入个整数,一种表达欲插入的位置i,另一种表达欲插入的数值x,将x插入在相应位置上,输出单链表所有结点值,观测输出成果。4. 从键盘输入1个整数,表达欲删除结点的位置,输出单链表所有结点值,观测输出成果。5. 将单链表中值反复的结点删除,使所得的成果表中个结点值均不相似,输出单链表所有结点值,观测输出成果。6. 删除其中所有数据值为偶数的结点,输出单链表所有结点值,观测输出成果。7. 把单链表变成带表头结点的循环链表,输出循环单链表所有结点值,观测输出成果。8. ()将单链表分解成两个单链表A和B,使A链表中具有原链表中序号为奇数的元素,而B链表中具有原链表中序号为偶数的元素,且保持本来的相对顺序,分别输出单链表A和单链表B的所有结点值,观测输出成果。二、程序设计的基本思想,原理和算法描述:(涉及程序的构造,数据构造,输入/输出设计,符号名阐明等) 这是一种带头结点的线性链表,数据域寄存整形数据,由顾客输入。头结点数据域存链表长度,因此程序中有个求链表长度的函数 int enghLis(LinkisL); /求链表长度L是指向头结点的指针,将长度值存入语句为 L-dat ngtList(L);为了实时观测链表状况,程序中有个输出链表数据的函数 vid Prtit(LinkList L); /输出链表程序可以实现8种不同的操作,这8种不同的操作由8个函数实现,分别是i rateList(iit &L); 创立链表o Loca(LnkListL); 查询数值void InsertList(inkList &L); /插入数值voi DeleteList(LinkList&); 选择删除voi eleterepeat(LLt &L); /删除反复结点voi DelteEen(inkLit &L); /删除数值为偶数的结点vidotte(Linkis &); /变为循环链表divide(Lnkist &L); /分解成两个链表 这些基本操作的实现算法都比较简朴,有些跟课本上同样,有些需要自己稍作思考才干写出,具体程序见第三部分 种不同的操作可以由顾客通过按-H这八个字母键来选择,分别是 A:创立B:查询 C:插入 D:选择删除E:删除反复 F:删除偶数 G:变为循环链表 :分解为两个链表,见第四部分输出截图,可以清晰的看到整个过程主程序中用 开关语句实现:har oerat;pnt(nn输入字符选择链表操作类型n:创立 :查询 :插入 D:选择删除 E:删除反复F:删除偶数G:变为循环链表 H:分解为两个链表n);scanf(%,&pere);swtch(erat) ase a: case :CreateLit(L);beak; case b: cas B: oate(L);brek; ase : se C: etLs(L); re; cae d: case D: Delteist(L);rak; cas e: ae E:eleerepat(L);bek; ase f: cas : DeteEven(L);break; case : case G: oate(L);bk; cs h: case H: Divide();bra; se n:ot lael; fat: prit(输入有误,请重新输入!);break;三、 源程序及注释:#iclue#incldemllochtypef strc LNoe /链表结点int da;trut LNode nt;LNe,*ikList; int rfla=0; /主函数结束标记符oid Crateist(LinkList &L); /创立链表void Loate(LikList L); /查询数值voi InsertLst(LinkLit L); /插入数值oi Dltest(Linkist &); /选择删除idDeerpat(kLis L); /删除反复结点void DelteEve(LinkList &L); /删除数值为偶数的结点od Rtat(LinkList &); /变为循环链表id ide(LikList L); /分解成两个链表intLengL(LinkLst L); /求链表长度voPritList(LinkLs L); /输出链表 /* 主函数*an(vid) cha perate;LikListL;in n;for(n0;ext = ULL; inkst q=L; scanf(%d,&tm); whi(em!=1) LikLst ; p= (Lnkist)malloc(sio(LNode); -dt = tp; p-t NULL; q-next = p; q qne; scanf(,&temp); data = enthList(L); rintLst(L);/* 查询元素*/voi Loate(ikt) f(!L)pintf(错误:链表未创立!);int eement;rntf(查询数值:n输入要查询的数值:); sanf(d,&lemen);iLtpL-xt;in i1; while(p) i(p-a=emet) rintf(找到了,它是链表的第%d个元素。,i);
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号