- 1、本文档共11页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
在链表中删除相同点
数据结构上机实验报告
题目:在链表中删除相同节点
学生姓名
学生学号
学院名称 计算机学院
专 业 计算机科学与技术
时 间
目 录
第一章 需求分析 1
1.1 原题表述 1
1.2 问题解决方案 1
第二章 概要设计 2
2.1 抽象数据类型 2
2.2 主要算法描述 2
2.3 主要算法分析 3
第三章 详细设计 4
3.1 程序代码 4
第四章 调试分析 7
4.1 出现的问题及解决方法 7
第五章 测试分析 8
5.1 测试样例 8
第六章 未来展望与思考 9
需求分析
1.1 原题表述
假设有两个无序的双向循环链表A和B,结构体为:前驱指针left,后继指针 right,数据date。将它们的头指针分别设为:pHeadA,pHeadB,输入A和B的数值,新建链表,接着构造函数,删除两个链表中相同的节点。
1.2 问题解决方案
1、需要构建双循环链表,对于输入的链表,需要删除重复的结点,需要删除结点的函数。
2、首先把A中含有与B中相同的数据节点找出来组成一个新的链表C
3、遍历链表C,删除A和B的所有和C中节点值相同的节点。
解决方案要求:(1)输入参数:pA、pB两个链表
(2)输出参数:A和B中所有相同数据节点组成的链表C
(3)输出参数:删除与C中节点值相同节点之后的链表A和B
第二章 概要设计
2.1 抽象数据类型
ADT DNode {
数据对象:D = { ai = ai | ai ElemSet,i = 1,2,3,…,n, n = 0}
数据关系:S = { ai - 1 ,ai | ai -1 ,ai D, i = 2,3,4,…,n}
基本操作:
CreatList(L)
操作结果:构建双循环链表
DeleteSame(L)
初始条件:已建立双循环链表
操作结果:删除链表中的重复元素
Subset(L1,L2,L3)
初始条件:已建立链表L1,L2
操作结果:将L1,L2的交集存入L3
Delete(L1,L2)
初始条件:已存在链表L1,L2
操作结果:在L1中删除L2中的元素
Display(L)
初始条件:已存在链表L
操作结果:依次输出L中的元素
}
2.2 主要算法描述
2.3 主要算法分析
CreatList(L) 一重循环 时间复杂度 = O(n)
DeleteSame(L) 二重循环 时间复杂度 = 0(n2)
Subset(L1,L2,L3)二重循环 时间复杂度 = 0(n2)
Delete(L1,L2)二重循环 时间复杂度 = 0(n2)
Display(L) 一重循环 时间复杂度 = O(n)
第三章 详细设计
3.1 程序代码
#includestdio.h
#includemalloc.h
typedef int ListData;
typedef struct DNote{
ListData data;
struct DNote * left, * right;
}DblNode;
typedef DblNode * DblList;
//构建双循环链表
void CreatList(DblList L){
int val;
L = (DblList)malloc(sizeof(DblNode));
DblList p,q = L;
while(scanf(%d,val) val != -1){
p = (DblList)malloc(sizeof(DblNode));
p - data = val;
p - left = q;
q - right = p;
q = p;
}
q - right = L;
L - left = q;
}
//求交集
void Subset(DblList L1, DblList L2, DblList L){
DblList p, q;
L = (DblList)malloc(sizeof(DblNode));
DblList r, s = L;
p = L1 - right;
wh
文档评论(0)