List类成员函数拓展实验报告.doc

  1. 1、本文档共15页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
2015/2016(1) 实验题目 学生姓名 韩笑 学生学号 201426811704 学生班级 计算机+自动化1402班 ****** 提交日期 2015-11-15 计算机科学与技术学院(软件学院) 实验报告 题目的内容 将A1和B1中的数据导入链表中,形成链表A2和B2,并打印各自链表元素; 将链表A2和B2中的元素各自排序(从大到小),形成链表A3和B3,并打印各自链表元素。 合并链表A3,B3,合并后的链表C的元素从大到小排列,并打印链表C。对于给定的整数n,编写一个算法把新的节点插入到链表中第n个节点之后的位置,该链表的第一个节点由first指向。 做题思路及设计 分析题目:作业中共有三题,都是基于链表并对其函数进行扩充,链表类在前一次实验中已经编写过了,因此本次实验只需在已有链表类的基础上增加成员函数即可。 List 类:在本实验中不再重复描述,大致结构框架如下 Node节点示意图: List示意图: 第 一 问:函数名定为add,first开始往后遍历,由于如果利用push_back函数在每插入一元素时都会对链表进行一次遍历,在时间效率上不高,因此不直接采用push_back函数而直接在循环过程中保留上次插入结点的位置,与上次插入的结点后直接插入结点,代码如下(详细含义见第四部分代码注释): void add(int* x, int size){ if(size == 0) first = new node(); else first = new node(x[0]); which value is x[0] to node first node* q = first; //create a pointer q points to first for(int i = 1; i size; i++){ node *a = new node(x[i]); q-next = a; q = q-next; } q-next = NULL; Size = size; } List(int* x, int size){ if(size == 0); else first-key = x[0]; node* q = first; for(int i = 1; i size; i++){ node *a = new node(x[i]); q-next = a; q = q-next; } q-next = NULL; Size = size; } 第 二 问:函数名定为sort,先复制构造新的链表,利用快速排序实现对新链表的排序,快排最核心的思想就是划分,确定一个枢轴元素(pivot),每一趟划分的目的就是把待排序列分为两部分,前一部分比枢轴小(序列A),后一部分比枢轴大(序列B)。经过一趟划分之后序列变为:{A} pivot {B}。以下是具体步骤: 1、确定每一次划分的枢轴元素为当前待排序列的头节点。 2、设置pHead和pEnd两个游标,pEnd指向序列A中的最后一个元素,初始化为枢轴本身(待排序列头节点)。让pHead遍历一遍待排序列,当所指元素比枢轴小时,将pEnd往前游一格,交换pEnd和pHead所指元素的值,这样仍能保证pEnd指向的元素是序列A中的最后一个元素。 3、交换pEnd所指元素和枢轴元素的值。 4、对序列A和B重复步骤1~4。 第 三 问:函数名定为merge_and_sort,先判断两链表是否已排好序,若没有,则先调用sort函数对其进行排序(此步骤对于本题目可删,但为保留程序可拓展性因此保留),之后创建两个结点依次对应两链表的first结点,从大到小依次通过push_back函数插入新建链表中,并返回该新建链表,具体代码见第四部分。 程序调试、测试、运行记录 主要的测试经过如下: 源代码代码实现 工程名为:List 具体函数声明/定义如下: List.h #pragma once //compile only once #ifndef _List_H_ //if didnt define _List_H_ before #define _List_H_ //define _List_H_ #include iostream //include header iostream using namesp

文档评论(0)

ktj823 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档