- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
数据结构课程设计单链操作
《数据结构》课程设计报告内容及其格式
《数据结构课程设计》报告
题目: 单链表操作
专业: 计算机科学与技术
班级:
单链表操作
针对带头结点的单循环链表,编写实现以下操作的算法函数。
实现要求:
⑴ 单链表建立函数create:先输入数据到一维数组A[M]中,然后根据一维数组A[M]建立一个单循环链表,使链表中个元素的次序与A[M]中各元素的次序相同,要求该函数的时间复杂度为O(m);
⑵ 定位查找函数Locate:在所建立的单循环链表中查找并返回值为key的第1个元素的结点指针;若找不到,则返回NULL;
⑶ 求出该链表中值最大和次大的元素值,要求该算法的时间复杂度为O(m),最大和次大的元素值通过指针变量带回,函数不需要返回值;
⑷ 将链表中所有值比key(值key通过形参传入)小的结点作为值为key的结点前驱,所有值比key大的结点作为值为key的结点后继,并尽量保持原有结点之间的顺序,要求该算法的时间复杂度为O(m);
⑸ 设计一个菜单,具有上述处理要求和退出系统功能。
⒈ 本人完成的工作:
一、定义结构体:LNode
二、编写以下函数:
(1)建立单循环链表
(2)建立定位查找函数
(3)求出链表中最大和次大值
(4)将链表中的值和输入的Key比较,小的作为key前驱结点,大的作为key的后继结点
三、设计具有上述处理要求和退出系统菜单
⒉ 所采用的数据结构:单链表
数据结构的定义:
typedef struct Node //定义结点的结构体
{
DataType data; //数据域
struct Node *next; //指针域
}LNode; //结点的类型
⒊ 所设计的函数
Create(void)
LNode *Create(void) //建立单循环链表,链表头结点head作为返回值
{
int i,j,n,A[M]; //建立数组A【M】
LNode *head,*p,*move;
head=(LNode*)malloc(sizeof(LNode)); //创建空单循环链表
head-next=head;
move=head;
printf(请输入数组元素的个数:); //输入数组
scanf(%d,n);
printf(请输入数组:);
for(i=0;in;i++) //保存数组元素
scanf(%d,A[i]);
//勾链建表,使链表中元素的次序与数组A各元素次序相同
for(j=0;jn;j++) //根据一维数组A[M]建立一个单循环链表
{
p=(LNode*)malloc(sizeof(LNode));
p-data=A[j];
p-next=move-next;
move-next=p;
move=move-next;
}
return head; //返回头指针
}
开始
开始
定义变量:int i ,j,n,A[M];
LNode *head,*p,*move;
建立空单循环链表head
建立一维数组A【M】
j=0
Jn
if (A[j]==32767)break;
p=(LNode*)malloc(sizeof(LNode));
p-data=A[j];
p-next=move-next; //
move-next=p;
move=move-next;
结束
J++
Y
N
Locate(LNode *head,DataType key)
LNode *Locate(LNode *head,DataType key) //建立定位查找函数Locate
{
LNode *q=head-next;
//查找并返回值为key的第1个元素的结点指针;若找不到,则返回NULL
while(q!=head q-data!=key)
q=q-next;
if(q-data==key)
return q;
else
{
printf(查找的结点不存在!!\n);
return NULL;
}
}
Y
Y
开始
定义变量:
*q=head-next;;
结束
q!=headq-data!=key
q=q-next
q-data==key
return q
Return NULlL
Y
N
N
(3)Search(LNode *head,DataType *a,DataType *b)
//求链表的最大值和次大值,分别由*a和*b带回
void Search(LNode *he
原创力文档


文档评论(0)