网站大量收购闲置独家精品文档,联系QQ:2885784924

数据结构课程设计单链表操作.doc

  1. 1、本文档共16页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
数据结构课程设计单链表操作

《数据结构课程设计》报告 题目: 单链表操作 专业: 计算机科学与技术 班级: 单链表操作 针对带头结点的单循环链表,编写实现以下操作的算法函数。 实现要求: ⑴ 单链表建立函数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; //返回头指针 } 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; } } (3)Search(LNode *head,DataType *a,DataType *b) //求链表的最大值和次大值,分别由*a和*b带回 void Search(LNode *head,DataType *a,DataType *b) { LNode *p,*Max,*Secmax; p=head-next-next;//*Max和*Secmax指第一个结点,*p指向第二个结点, Max=head-next; Secmax=head-next-next;; while(p!=head) { if(Max-data p-data) //*Max指向最大值 { if(p-data Secmax-data) Secmax=p; } else //*Sexmax指向次大值 { Secmax=Max; Max=p

文档评论(0)

haihang2017 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档