- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
最新精品文档,知识共享!
一、课程设计题目:
实现两个链表的合并
二、基本功能要求:
1. 建立两个链表A和B,链表元素个数分别为m和n个。
2. 假设元素分别为(x1,x2,…xm),和(y1,y2, …yn)。把它们合并成一个线性表C,使得:
当m=n时,C=x1,y1,x2,y2,…xn,yn,…,xm
当nm时,C=y1,x1,y2,x2,…ym,xm,…,yn
3. 输出线性表C:用直接插入排序法对C进行升序排序,生成链表D,并输出链表D。
三、测试数据:
1. A表(30,41,15,12,56,80)
B表(23,56,78,23,12,33,79,90,55)
2. A表(30,41,15,12,56,80,23,12,34)
B表(23,56,78,23,12)
四、理论分析结果:
1. A表的数据元素个数m=6,B表的数据元素个数 n=9,此时mn
分析合并结果:当mn时,应该先插入B表中的数据元素,在偶数位插入B表中的数据元素,在奇数位插入A表中的数据元素,最后插入B表中剩 余的数据元素。
C=23,30,56,41,78,15,23,12,12,56,33,80,79,90,55
排序结果:
D=12,12,15,23,23,30,33,41,55,56,56,78,79,80,90
2. A表的数据元素个数m=9,B表的数据元素个数 n=5,此时mn
分析合并结果:当m=n时,应该先插入A表中的数据元素,在偶数位插入A表中的数据元素,在奇数位插入B表中的数据元素,最后插入A表中剩余的数据元素。
C=30,23,41,56,15,78,12,23,56,12,80,23,12, 34
排序结果:
D=12,12,12,15,23,23,23,30,34,41,56,56,78,80
五、设计步骤:
5.1 分析问题,给出数学模型,设计相应的数据结构:
1) 分析问题特点,用数学表达式或其它形式描述其数学模型。
2) 选择能够体现问题本身特点的一种或几种逻辑结构。
3) 依据逻辑结构和问题特点,设计并选择相应的存储结构(顺序存储结构和链式存储结构对应的算法实现有区别)。
5.2 算法设计 :
1) 确定所需模块:对于复杂的程序设计,要充分利用模块化程序设计方法和面向对象思想,自顶向下,逐步细化。
2) 各子模块功能描述:给出主要模块的算法描述,用流程图或伪代码表示。
3) 模块之间的调用关系:给出算法各模块之间的关系图示。
5.3 上机实现程序:
为提高工作效率,充分利用上机调试时间,在上机之前应列出程序清单。
5.4 有代表性的各种测试数据去验证算法及程序的正确性:
根据课程设计的要求对给定的数据进行测试,验证算法以及程序的正确性。
5.5 算法分析及优化:
经过上机调试,源程序运行正确,并且实现算法要求的功能,解决课程设计题目中给出的问题后,分析算法的时间复杂度和空间复杂度,如有可能对程序进行优化改进。
六、模块划分:
单链表头文件:LinList.h
主要包括单链表的存储结构、初始化、求数据元素个数、插入、删除数据元素、取数据元素、撤消单链表的函数。
2. 单链表操作头文件:MyList.h
主要包括单链表测试、单链表合并、单链表合并排序函数。
3.测试主函数文件:TestLinList.h
主要包括文件包含、数据导入和操作模块程序。
七、算法设计:
7.1 带头结点的单链表存储结构
typedef struct Node
{
DataType data;
struct Node *next;
}SLNode;
7.2 单链表的初始化
void ListInitiate(SLNode **head)
{
/*如果有内存空间,申请头结点空间并使头指针head指向头结点*/
if((*head = (SLNode *)malloc(sizeof(SLNode)))==NULL)
exit(1);
(*head)-next = NULL;/*尾标记NULL */
}
7.3 求单链表中的数据元素个数
int ListLength(SLNode *head)
{
SLNode *p = head; /*p指向头结点*/
int size = 0; /*size初始为0*/
while(p-next != NULL) /*循环计数*/
{
p = p-next;size ++;
}
return size;
}
7.4 向单链表中插入数据元素
int ListInsert(SLNode *head,int i,DataType x)
{
SLNode *p, *q;
int j;
p = head;
j
您可能关注的文档
最近下载
- 多层住宅小区工程监理规划.docx VIP
- NY_T 3213-2023 植保无人驾驶航空器 质量评价技术规范.docx VIP
- 盘扣式悬挑脚手架施工方案施工计划.doc VIP
- 部编版小学一年级语文上册表格式教案全册.doc VIP
- 电线电缆抗张强度检测结果的测量不确定度评定.doc VIP
- (正式版)H-G-T 22820-2024 化工安全仪表系统工程设计规范.docx VIP
- 绘本故事PPT课件之我好害怕.pptx
- 广东省惠州市博罗县泰美镇城镇总体规划项目建议书.doc VIP
- 虚拟仪器及LabVIEW知到智慧树期末考试答案题库2025年山东科技大学.docx VIP
- 2025年全国Ⅰ卷英语听力评析和听力材料二次开发(课件).pptx
文档评论(0)