数据结构课程设计实现两个链表的合并Word格式.docx
- 文档编号:14893338
- 上传时间:2022-10-25
- 格式:DOCX
- 页数:16
- 大小:154.33KB
数据结构课程设计实现两个链表的合并Word格式.docx
《数据结构课程设计实现两个链表的合并Word格式.docx》由会员分享,可在线阅读,更多相关《数据结构课程设计实现两个链表的合并Word格式.docx(16页珍藏版)》请在冰豆网上搜索。
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,此时m>
n
=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算法分析及优化:
经过上机调试,源程序运行正确,并且实现算法要求的功能,解决课程设计题目中给出的问题后,分析算法的时间复杂度和空间复杂度,如有可能对程序进行优化改进。
六、模块划分:
1.单链表头文件:
LinList.h
主要包括单链表的存储结构、初始化、求数据元素个数、插入、删除数据元素、取数据元素、撤消单链表的函数。
2.单链表操作头文件:
MyList.h
主要包括单链表测试、单链表合并、单链表合并排序函数。
3.测试主函数文件:
TestLinList.h
主要包括文件包含、数据导入和操作模块程序。
七、算法设计:
7.1带头结点的单链表存储结构
typedefstructNode
{
DataTypedata;
structNode*next;
}SLNode;
7.2单链表的初始化
voidListInitiate(SLNode**head)
{
/*如果有内存空间,申请头结点空间并使头指针head指向头结点*/
if((*head=(SLNode*)malloc(sizeof(SLNode)))==NULL)
exit
(1);
(*head)->
next=NULL;
/*尾标记NULL*/
}
7.3求单链表中的数据元素个数
intListLength(SLNode*head)
SLNode*p=head;
/*p指向头结点*/
intsize=0;
/*size初始为0*/
while(p->
next!
=NULL)/*循环计数*/
{
p=p->
next;
size++;
returnsize;
7.4向单链表中插入数据元素
intListInsert(SLNode*head,inti,DataTypex)
SLNode*p,*q;
intj;
p=head;
j=-1;
next!
=NULL&
&
j<
i-1)
j++;
}
if(j!
=i-1)
printf("
Eorror:
插入位置参数错!
\n"
);
return0;
if((q=(SLNode*)malloc(sizeof(SLNode)))==NULL)
exit
(1);
q->
data=x;
next=p->
p->
next=q;
return1;
}//注:
此单链表是带头结点的
7.5从单链表中删除数据元素
intListDelete(SLNode*head,inti,DataType*x)
SLNode*p,*s;
p=head;
=NULL&
next->
p=p->
j++;
if(j!
=i-1)
删除位置参数错!
s=p->
*x=s->
data;
free(s);
7.6从单链表中取数据元素
ListGet(SLNode*head,inti,DataType*x)
SLNode*p;
j=-1;
i)
=i)
取数据元素位置参数出错!
*x=p->
7.7撤消单链表
voidDestroy(SLNode**head)
SLNode*p,*p1;
p=*head;
while(p!
=NULL)
p1=p;
p=p->
free(p1);
*head=NULL;
7.8单链表测试函数
voidSingleList(inta[],intal)
inti,x;
SLNode*head;
ListInitiate(&
head);
//向单链表插入数据元素
for(i=0;
i<
al;
i++)
if(ListInsert(head,i,a[i])==0)
{
printf("
Error:
插入数据元素错误!
\n"
return;
}
//从单链表取数据元素
printf("
结果:
"
i<
ListLength(head);
i++)
if(ListGet(head,i,&
x)==0)
取数据元素错误!
elseprintf("
%d"
x);
Destroy(&
//撤消单链表
7.9单链表合并函数
voidCombineList(inta[],intb[],intal,intbl)
inti,j=0,x;
int*list;
list=(int*)malloc((al+bl)*sizeof(int));
if(al<
bl)//a[]数组的数据元素个数<
b[]数组的数据元素个数
//较长数组的数据元素赋给动态数组的偶数位
for(i=0;
2*al;
i+=2)
{
if(i%2==0)
{
list[i]=b[j];
}
j=0;
//恢复公共下标初始值
//较短数组的数据元素赋给动态数组的奇数位
if(i%2==1)
list[i]=a[j];
//较长数组剩余数据元素赋值
for(i=2*al;
al+bl;
list[i]=b[j];
else//a[]数组的数据元素个数>
=b[]数组的数据元素个数
//较长数组b[]的数据元素赋给动态数组的偶数位
2*bl;
//较短数组a[]的数据元素赋给动态数组的奇数位
//较长数组a[]剩余数据元素赋值
for(i=2*bl;
list[i]=a[j];
if(ListInsert(head,i,list[i])==0)
插入A的数据元素错误!
free(list);
//从单链表取数据元素
else
7.10直接插入法排序
for(i=0;
al+bl-1;
temp=list[i+1];
j=i;
while(j>
-1&
temp<
list[j])
list[j+1]=list[j];
j--;
list[j+1]=temp;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 课程设计 实现 两个 合并