ImageVerifierCode 换一换
格式:DOCX , 页数:11 ,大小:54.10KB ,
资源ID:6734917      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/6734917.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(数据结构线性链表.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

数据结构线性链表.docx

1、数据结构线性链表数据结构与算法分析课 程 实 验 报 告 项目名称:线性链表的操作学生姓名:学生学号:指导教师:完成日期:【实验目的】1. 理解线性表的链式存储原理 。2. 掌握链表的常用操作算法。【实验内容】1. 创建链表并对其进行输出;2. 利用指针实现对两个线形链表的合并,并输出其结果。【实验方式】个人实验。【实验设备与环境】 PC机,Windows XP操作系统,VC+6.0开发环境【数据结构及函数定义】 以下给出的只是范例,请同学们根据自己编写的程序内容进行填写(1)类的定义:类的数据成员,成员函数 class link 表类 /数据成员public:int element;节点值l

2、ink *next;指向表中下一节点的指针/成员函数link(const int& elemval,link*nextval=NULL) 构造函数1 element=elemval;next=nextval; 给定节点值 link(link*nextval=NULL)构造函数2 next=nextval; link()析构函数 (2)主函数main() 实现初始化操作,完成对子函数的调用 (3)子函数 link *creat() 创建链表 void printlist(link *lp) 输出链表 link *comb(link *la, link *lb) 合并链表【测试数据与实验结果】测试

3、数据: la =2 3 5 6 lb= 4 5 7 8 实验结果: 链表la(2.3.5.6)与链表(4.5.7.8)合并后得到链表(2.3.4.5.6.7.8) 【源程序清单】(请附上源程序)#include using namespace std;/* 单链表节点 */struct nodeint value;node* next;/* 给单链表添加节点 */void insertNode(node* head, int value)node* p = head-next;if ( p = NULL ) p = new node; p-value = value; p-next = NUL

4、L; head-next = p; return;while ( p-next != NULL ) p = p-next;node* tmp = new node;tmp-value = value;tmp-next = NULL;p-next = tmp;/* 遍历输出链表节点 */void print(node* head)node* p = head-next;while ( p != NULL ) cout value next;cout next = NULL;node* p = headA-next;node* q = headB-next;if ( p = NULL ) retu

5、rn headB;if ( q = NULL ) return headA;while ( (p != NULL) & (q != NULL) ) if ( p-value = q-value ) insertNode(head, p-value); insertNode(head, q-value); p = p-next; q = q-next; else if ( p-value value ) insertNode(head, p-value); p = p-next; else if ( p-value q-value ) insertNode(head, q-value); q =

6、 q-next; while ( p != NULL ) insertNode(head, p-value); p = p-next;while ( q != NULL ) insertNode(head, q-value); q = q-next;return head;/* 下面实现不使用任何库函数, 利用交换的方法在原空间实现整体有序。 方法是先确定哪一个链表的第一个节点的值小,把这个链表的头结点作为合并后链表的头结点,然后比较2个有序链表的当前节点的值,如果代表最后合并链表的值小,则不用交换,否则把两个值交换,最后合并链表始终保持两个值中的小值。另一个链表由于交换了一个元素,当前元素可

7、能影响该链表的有序递增,对其进行调整使其保持递增有序,然后重复上述动作,直到一个链表遍历结束,然后把剩余的链表连接起来就行。*/* 调整链表的第一个节点,使其变成递增有序 */void chg2sort(node* head, node* &p)if (head-next = NULL ) /没有节点,直接返回 return;node* s = head;while ( s-next != p ) /s指向p的前一个节点 s = s-next;/下面的一段找到第一个大于p节点值的节点node* q = p;node* r = q;while ( q != NULL ) if ( q-value

8、 value ) r = q; /r始终指向q的前一个节点 q = q-next; else break; /下面调整指针,其实可以统一写出来,为了阅读清晰把q为NULL和非NULL分开写出来if ( q = NULL ) r-next = p; s-next = p-next; p-next = NULL;else if ( q != NULL ) s-next = p-next; r-next = p; p-next = q;/由于链表进行了调换,当前链表指针也需要改变p = s-next;/* 两个有序链表进行合并 */node* merge(node* head1, node* hea

9、d2)node* head; /合并后的头指针node* p = head1-next;node* q = head2-next;/有一个链表为空的情况,直接返回另一个链表if ( p = NULL ) head = head2; return head;else if ( q = NULL ) head = head1; return head;/两个都不为空,先确定哪个链表作为合并后的链表if ( (p != NULL) & (q != NULL) ) if ( p-value value ) head = head1; else head = head2; node* p_prior;

10、/始终指向p节点的前一个节点node* q_prior;while ( (p != NULL) & (q != NULL) ) if ( p -value value ) if ( head = head1 ) p_prior = p; p = p-next; else if ( head = head2 ) /进行当前节点值的交换 int tmp = p-value; p-value = q-value; q-value = tmp; chg2sort(head1, p); /交换元素后的调整 q_prior = q; q = q-next; else if ( p-value = q-va

11、lue ) p_prior = p; p = p-next; q_prior = q; q = q-next; else if ( p-value q-value ) if ( head = head1 ) int tmp = p-value; p-value = q-value; q-value = tmp; chg2sort(head2, q); p_prior = p; p = p-next; else if ( head = head2 ) q_prior = q; q = q-next; if ( p != NULL ) q_prior-next = p;if ( q != NULL

12、 ) p_prior-next = q;return head;void main()/* 建立有序链表A */int a5 = 1, 3, 5, 7, 9;int i;node* headA = new node;headA-next = NULL;for ( i = 0; i next = NULL;for (i = 0; i 5; +i) insertNode(headB, bi);print(headB);/* 利用简单合并的方法合并成整体有序 */node* head = formalMerge(headA, headB);print(head);【测试数据与实验结果】上课纪律(20%)实验过程及结果(40%)实验报告质量(40%)总分:教师签字:

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1