- 1、本文档共15页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 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)