数据结构课程设计单链表操作汇总

合集下载

单链表课程设计

单链表课程设计

单链表课程设计一、课程目标知识目标:1. 学生能理解单链表的基本概念,掌握其结构特点及在数据结构中的重要性。

2. 学生能够运用所学知识,实现单链表的创建、插入、删除和查找等基本操作。

3. 学生能够掌握单链表与数组、栈、队列等其他数据结构的关系与区别。

技能目标:1. 学生能够运用编程语言(如C、C++等)实现单链表的相关操作,提高编程能力。

2. 学生能够通过实际操作,培养解决实际问题的能力,提高逻辑思维能力。

情感态度价值观目标:1. 学生通过学习单链表,培养对数据结构的兴趣,提高学习积极性。

2. 学生在学习过程中,学会与他人合作,培养团队精神和沟通能力。

3. 学生能够认识到数据结构在计算机科学中的重要性,增强对专业知识的认同感。

课程性质分析:本课程为计算机科学与技术专业的基础课程,旨在让学生掌握单链表这一基础数据结构,为后续学习更复杂的数据结构打下基础。

学生特点分析:学生已具备基本的编程能力,具有一定的逻辑思维能力,但可能对数据结构的应用场景认识不足,需要通过实际案例激发兴趣。

教学要求:1. 结合实际案例,讲解单链表的理论知识,让学生了解其在实际问题中的应用。

2. 通过课堂讲解、上机实践等教学手段,让学生掌握单链表的相关操作。

3. 注重培养学生的编程能力和逻辑思维能力,提高解决实际问题的能力。

二、教学内容1. 单链表基本概念:介绍单链表的定义、结构特点及其在数据结构中的应用场景。

- 教材章节:第二章第二节- 内容安排:讲解单链表的组成元素(节点、指针)、分类(单向、双向)及优缺点。

2. 单链表基本操作:- 教材章节:第二章第三节- 内容安排:讲解单链表的创建、插入、删除、查找等基本操作,并通过实例演示。

3. 单链表与其它数据结构的对比:- 教材章节:第二章第四节- 内容安排:分析单链表与数组、栈、队列等其他数据结构的区别和联系,突出单链表的特点。

4. 单链表编程实践:- 教材章节:第二章第五节- 内容安排:结合上机实践,让学生动手实现单链表的基本操作,培养编程能力和解决实际问题的能力。

数据结构实验报告--单链表

数据结构实验报告--单链表

数据结构实验报告--单链表数据结构实验报告--单链表1.引言1.1 研究目的本实验旨在通过实践的方式,深入了解单链表的数据结构以及相关操作,提升对数据结构的理解和应用能力。

1.2 实验内容本实验主要包括以下几个方面的内容:●单链表的基本定义和实现●单链表的插入、删除、遍历操作●单链表的逆置操作●单链表的查找和修改操作2.理论基础2.1 单链表的定义单链表是一种常见的线性数据结构,它由一系列的节点组成,每个节点包含数据和指向下一个节点的指针。

2.2 单链表的基本操作①单链表的插入操作在单链表中,可以通过插入操作在指定位置插入一个新节点,该操作主要包括以下步骤:●创建一个新的节点,并为其赋值●将新节点的next指针指向插入位置的后一个节点●将插入位置的前一个节点的next指针指向新节点②单链表的删除操作在单链表中,可以通过删除操作删除指定位置的节点,该操作主要包括以下步骤:●将删除位置的前一个节点的next指针指向删除位置的后一个节点●释放删除节点的内存③单链表的遍历操作单链表的遍历操作主要是依次访问链表中的每一个节点,并执行相应的操作。

④单链表的逆置操作单链表的逆置操作可以将一个单链表中的节点顺序进行颠倒。

⑤单链表的查找操作在单链表中,可以通过查找操作找到指定值的节点。

⑥单链表的修改操作在单链表中,可以通过修改操作修改指定位置的节点的值。

3.实验过程3.1 实验环境本次实验使用C语言进行编程,需要先安装相应的编程环境,如gcc编译器。

3.2 实验步骤①单链表的创建和初始化首先创建一个空链表,并初始化链表的头指针。

②单链表的插入操作按照需求,在链表的指定位置插入一个新节点。

③单链表的删除操作按照需求,删除链表中的指定位置的节点。

④单链表的遍历操作依次访问链表中的每一个节点,并输出其值。

⑤单链表的逆置操作将单链表中的节点顺序进行逆置。

⑥单链表的查找操作按照需求,在链表中查找指定值的节点。

3.2.7 单链表的修改操作按照需求,修改链表中指定位置的节点的值。

数据结构单链表实验报告

数据结构单链表实验报告

数据结构单链表实验报告实验目的:掌握单链表的基本操作,学会使用单链表实现各种算法。

实验内容:实现单链表的基本操作,包括创建、插入、删除、访问等。

利用单链表完成以下算法:- 单链表逆序- 查找单链表中的中间节点- 删除单链表中的倒数第K个节点- 合并两个有序单链表为一个有序单链表实验步骤:1. 创建单链表在创建单链表时,先定义一个结构体Node来表示链表中的节点,节点包括数据域和指针域,指针域指向下一个节点。

然后,用指针p指向链表的头节点,将头节点的指针域初始化为NULL。

2. 插入节点在单链表中插入节点的操作分为两种情况:- 在链表头插入节点- 在链表中间或尾部插入节点无论是哪种情况,先将新节点的指针域指向要插入的位置的下一个节点,再将要插入的位置的指针域指向新节点即可。

3. 删除节点删除链表节点的操作同样分为两种情况:- 删除头节点- 删除中间或尾部节点要删除头节点,先用一个指针将头节点指向的下一个节点保存起来,再将头节点释放掉。

要删除中间或尾部节点,先用一个指针指向要删除节点的前一个节点,然后将指向要删除节点的前一个节点的指针域指向要删除节点的下一个节点,最后将要删除的节点释放掉。

4. 单链表逆序单链表逆序可以使用三个指针来完成,分别为pre指针、cur指针和next指针。

首先将pre指针和cur指针指向NULL,然后循环遍历链表,将cur指针指向当前节点,将next指针指向当前节点的下一个节点,然后将当前节点的指针域指向pre指针,最后将pre指针和cur指针向前移动一个节点,继续进行循环。

5. 查找单链表中的中间节点查找单链表中的中间节点可以使用双指针法,将两个指针p1和p2都指向链表头,然后p1每次向前移动一个节点,而p2每次向前移动两个节点,当p2指向了链表尾部时,p1指向的节点即为中间节点。

6. 删除单链表中的倒数第K个节点删除单链表中的倒数第K个节点可以使用双指针法,在链表中定义两个指针p1和p2,p1指向链表头,p2指向第K个节点,然后p1和p2同时向前移动,直到p2指向链表尾部,此时p1指向的节点即为要删除的节点。

单链表的实验报告总结

单链表的实验报告总结

单链表的实验报告总结单链表是一种常用的数据结构,它由一系列节点组成,每个节点包含了数据和指向下一个节点的指针。

在实验中,我们对单链表进行了操作和实现,通过此次实验,我深刻理解了单链表的特点和应用。

以下是我对此次实验的总结和体会。

在实验中我们实现了单链表的创建和初始化。

通过创建一个头节点,并将头节点的指针指向空,我们成功地初始化了一个空的单链表。

这为后续的操作打下了基础。

接着,我们实现了单链表的插入操作。

通过指定要插入的位置和值,我们可以在单链表的任意位置插入一个新的节点。

这个操作非常灵活,让我感受到了单链表的动态性和可变性。

通过插入操作,我们可以在单链表中任意位置插入新的元素,从而灵活地调整单链表的结构和内容。

在实验中,我们还实现了单链表的删除操作。

通过指定要删除的节点位置,我们可以将该节点从单链表中删除。

这个操作也非常重要,可以帮助我们对单链表中的数据进行动态管理。

通过删除操作,我们可以方便地删除单链表中的某个元素,从而保持单链表的整洁和有序。

除了插入和删除操作,我们还实现了单链表的查找操作。

通过指定要查找的值,我们可以在单链表中查找到对应的节点。

这个操作非常实用,可以帮助我们快速定位和访问单链表中的数据。

通过查找操作,我们可以方便地获取单链表中特定元素的值,从而满足我们对数据的需求。

在实验中,我们还实现了单链表的修改操作。

通过指定要修改的节点位置和新的值,我们可以将单链表中某个节点的值进行修改。

这个操作也非常有用,可以帮助我们对单链表中的数据进行更新和改进。

通过修改操作,我们可以方便地对单链表中的某个元素进行数值的调整,从而满足我们对数据的要求。

通过本次实验,我对单链表的原理和操作有了更深入的理解。

单链表是一种非常灵活和实用的数据结构,可以应用于各种场景和问题。

它的特点是插入和删除操作的效率很高,但查找和修改操作的效率较低。

因此,在实际应用中,我们需要根据具体的需求和场景选择合适的数据结构。

数据结构单链表实验报告

数据结构单链表实验报告

数据结构单链表实验报告范本:数据结构单链表实验报告一、引言本实验旨在掌握数据结构中单链表的基本概念、操作和应用。

通过实际操作,理解单链表的结构与实现,提高数据结构的编程能力和问题解决能力。

二、实验目的1. 理解单链表的概念和特点;2. 掌握单链表的基本操作,包括插入、删除、遍历;3. 学会使用单链表解决实际问题。

三、实验内容1. 单链表的定义和结构设计;2. 单链表的基本操作的实现,包括插入节点、删除节点、遍历;3. 针对具体的问题,设计相应的单链表操作。

四、实验步骤1. 单链表的定义和结构设计:(1)定义单链表的结构体,包含数据域和指针域;(2)实现单链表的初始化函数;(3)实现单链表的销毁函数。

2. 单链表的基本操作的实现:(1)实现单链表的插入节点操作;(2)实现单链表的删除节点操作;(3)实现单链表的遍历操作。

3. 针对具体问题的单链表操作:(1)根据具体需求,设计并实现相应的操作函数;(2)利用单链表解决具体问题。

五、实验结果与分析1. 在实验过程中,成功实现了单链表的定义和结构设计,包括数据域和指针域的正确设置。

2. 实验中实现了插入节点、删除节点和遍历等基本操作。

3. 针对具体问题,通过单链表操作解决了相应的问题。

六、实验总结通过本次实验,加深了对单链表的理解和掌握。

掌握了单链表的基本操作和应用实现,提高了数据结构的编程能力和问题解决能力。

附件:1. 本文所涉及的代码文件;2. 实验过程中所用到的数据文件。

法律名词及注释:1. 数据结构:指的是一组数据的表示方法和相应的操作。

在计算机科学中,数据结构是计算机中存储、组织数据的方式。

2. 单链表:是一种链式存储结构,每个节点包含数据域和指针域。

数据域用于存储数据,指针域用于指向下一个节点。

数据结构课程设计-单链表的插入、删除、查找等

数据结构课程设计-单链表的插入、删除、查找等

单链表的插入、删除、合并等基本操作一、实验目的1、理解数据结构中单链表的定义和建立。

2、掌握单链表中结点结构的C语言描述。

3、熟练掌握单链表的插入、删除和修改等算法的设计与C语言实现。

4、将理论与实际相结合,切实提高自己的逻辑能力和动手能力。

二、设计内容1、输入单链表长度,创建一个单链表。

2、对建立好的单链表进行插入操作。

3、对建立好的单链表进行删除操作。

4、对建立好的单链表进行合并操作。

三、概要设计抽象数据类型线性表的定义如下:ADTA List{数据对象:D={ai I ai∈ElemSet , i=1 ,2 , … , n n>=0 }数据关系:R1={<ai-1 , ai> I ai-1 , ai∈D , i=2 , … , n }基本操作:Creates( &L )操作结果:构建一个空的线性表L。

Insertsl( &L , k ,i)初始条件:线性表L已存在。

操作结果:在带有头结点单链表的第k个元素之前插入元素i。

Deletesl( &L , i, j )初始条件:线性表L已存在。

操作结果:删除指定位置j元素i。

Hebing( &L )初始条件:线性表L已存在。

操作结果:清除新链表中相同的元素。

}ADT List四、算法流程图五、算法源代码#include <stdio.h> #include <malloc.h>typedef struct node {int data;struct node *next; }node;node *head;int k;node * creates(){node *p,*s,*h;int j=1,x, n;p=h=(node*)malloc(sizeof(node));h->next=NULL;printf("请输入链表长度:");scanf("%d",&n);printf("请输入 %d 个数字创建链表:",n);while(j<=n){scanf("%d",&x);s=(node*)malloc(sizeof(node));s->data=x;p->next=s;p=s;j++;}p->next=NULL;return h;}void insertsl(node *head, int k, int i){/*在带有头结点单链表的第k个元素之前插入元素i*/ int j;node *p, *t;p=head;j=0;while ( p&&j<k-1 ) /*若p不指向空,并且没有找到合适位置则继续循环*/ {p = p->next;j++;}if (!p||j>k-1) /*k小于1或大于表长*/printf("插入位置不对。

单链表的基本操作(查找,插入,删除)

单链表的基本操作(查找,插入,删除)

单链表的基本操作(查找,插⼊,删除)这周⽼师给的作业跟上周貌似差不多。

只是⽤了单链表。

完成单链表的基本操作函数。

1) 初始化单链表2) 给定的数据元素存放在⼀维数组中,分别完成头插法和尾插法建⽴单链表3) 将数据元素从键盘依次输⼊,分别完成头插法和尾插法建⽴单链表4) 输出单链表的长度5) 实现按位查找和按值查找6) 实现插⼊和删除操作7) 实现遍历单链表操作#include <cstdio>#include <cstring>#include <cstdlib>//查找1.内容2.序号//插⼊//删除typedef struct student{int num;char name[10];}STU;typedef struct Node{STU data;struct Node * next;}Node;void denglu(Node *L);//登录函数void chazhao(Node *L);//查找函数void Printf(Node *L);//输出函数void CreateFromHead(Node *L);//头插法void CreateFormTail(Node *L);//尾插法void panduan(Node *L);//判断头插还是尾插void Get(Node *L);//按序号结点查找void Locate(Node *L);//按内容查找(值)void Inslist(Node *L);//插⼊void Dellist(Node *L);//删除void Dellist(Node *L)//删除{system("CLS");int n;printf("请输⼊要删除的结点\n");scanf("%d",&n);if(n<=0){printf("输⼊的数据不合法,请重新输⼊\n");Dellist(L);}Node *pre,*r;int k=0;pre=L;while(pre->next !=NULL&&k<n-1){pre=pre->next;k=k+1;}if(pre->next==NULL){printf("没有找到该结点,请重新输⼊\n");Dellist(L);}r=pre->next;pre->next=r->next;free(r);printf("删除成功!\n");denglu(L);}void Inslist(Node *L)//插⼊{system("CLS");int n;printf("请输⼊在第⼏个位置插⼊数据\n");scanf("%d",&n);printf("请输⼊插⼊的学号,姓名\n");int num1;char name1[10];scanf("%d %s",&num1,name1);Node *pre,*s;int k=0;if(n<=0){printf("输⼊的数据不合法,请重新输⼊\n");Inslist(L);}pre=L;while(pre!=NULL&&k<n-1){pre=pre->next;k=k+1;}if(pre==NULL){printf("⽆法找到该节点,请重新输⼊\n");Inslist(L);}s=(Node*)malloc(sizeof(Node));strcpy(s->data .name ,name1);s->data.num=num1;s->next =pre->next ;pre->next =s;printf("插⼊成功!\n");denglu(L);}void Locate(Node *L)//按内容查找(值){system("CLS");int n;printf("请输⼊要查找的学号\n");scanf("%d",&n);Node *p;p=L->next;while(p!=NULL){if(p->data.num!=n){p=p->next;}elsebreak;}printf("你要查找的学号所对应的信息为%d %s\n",p->data.num,p->);denglu(L);}void Get(Node *L)//按序号结点查找{system("CLS");int n;printf("请输⼊你要查找的结点\n");scanf("%d",&n);if(n<=0){printf("输⼊的数据不合法,请重新输⼊\n");Get(L);}Node *p;p=L;int j=0;while((p->next!=NULL)&&(j<n)){p=p->next;j++;}if(n==j){printf("你要查找的结点的储存位置的数据为%d %s\n",p->data.num,p->); }denglu(L);}void Printf(Node *L){int q=0;Node *p=L->next;while(p!=NULL){q++;printf("%d %s\n",p->data.num,p->); p=p->next;}printf("单链表长度为%d\n",q);denglu(L);}void chazhao(Node *L){printf("1.按序号查找\n");printf("2.按内容查找\n");printf("3.返回主界⾯\n");int aa;scanf("%d",&aa);switch(aa){case 1:Get(L);case 2:Locate(L);case 3:denglu(L);break;default:printf("输⼊错误请重新输⼊\n");chazhao(L);}}void denglu(Node *L){int a;printf("请选择你要做什么\n");printf("1.查找\n");printf("2.插⼊\n");printf("3.删除\n");printf("4.打印现有的学⽣信息及单链表长度\n"); printf("5.退出\n");scanf("%d",&a);switch(a){case 1:chazhao(L);case 2:Inslist(L);case 3:Dellist(L);case 4:Printf(L);case 5:printf("谢谢使⽤\n");exit(0);default:printf("输⼊错误请重新输⼊\n");denglu(L);}}void CreateFromHead(Node *L)//头插法{Node *s;int n;//n为元素个数printf("请输⼊元素个数\n");scanf("%d",&n);printf("请输⼊学号姓名\n");for(int i=1;i<=n;i++){s=(Node *)malloc(sizeof(Node));scanf("%d %s",&s->data.num,s->); s->next=L->next;L->next=s;}}void CreateFormTail(Node *L)//尾插法{Node *s,*r;r=L;int n;//n为元素个数printf("请输⼊元素个数\n");scanf("%d",&n);printf("请输⼊学号姓名\n");for(int i=1;i<=n;i++){s=(Node *)malloc(sizeof(Node));scanf("%d %s",&s->data.num,s->);r->next=s;r=s;if(i==n){r->next=NULL;}}}Node *InitList(Node *L)//初始化单链表{L=(Node *)malloc(sizeof(Node));L->next=NULL;return L;}void panduan(Node *L){int q;printf("请选择⽤哪种⽅式建⽴链表\n");printf("1.头插法\n");printf("2.尾插法\n");scanf("%d",&q);switch(q){case (1):CreateFromHead(L);printf("输⼊成功!\n");break;case (2):CreateFormTail(L);printf("输⼊成功!\n");break;default:printf("输⼊错误请重新输⼊\n");panduan(L);}}int main(){Node *L=NULL;L=InitList(L);panduan(L);denglu(L);return 0;}ps.贴上来的代码空格有点⼩奇怪啊。

数据结构实验报告单链表

数据结构实验报告单链表

数据结构实验报告_单链表数据结构实验报告——单链表一、实验目的1.掌握单链表的基本概念和原理。

2.了解单链表在计算机科学中的应用。

3.掌握单链表的基本操作,如插入、删除、遍历等。

4.通过实验,加深对理论知识的理解,提高编程能力。

二、实验内容1.实验原理:单链表是一种线性数据结构,由一系列节点组成,每个节点包含数据域和指针域。

其中,指针域指向下一个节点,最后一个节点的指针域指向空。

单链表的主要操作包括插入、删除、遍历等。

2.实验步骤:(1)创建一个单链表。

(2)实现插入操作,即在链表的末尾插入一个新节点。

(3)实现删除操作,即删除链表中的一个指定节点。

(4)实现遍历操作,即输出链表中所有节点的数据。

3.实验代码:下面是使用Python语言实现的单链表及其基本操作的示例代码。

class Node:def __init__(self, data):self.data = dataself.next = Noneclass LinkedList:def __init__(self):self.head = Nonedef insert(self, data):new_node = Node(data)if self.head is None:self.head = new_nodeelse:current = self.headwhile current.next is not None:current = current.nextcurrent.next = new_nodedef delete(self, data):if self.head is None:returnif self.head.data == data:self.head = self.head.nextreturncurrent = self.headwhile current.next is not None and current.next.data != data:current = current.nextif current.next is None:returncurrent.next = current.next.nextdef traverse(self):current = self.headwhile current is not None:print(current.data)current = current.next4.实验结果:通过运行上述代码,我们可以看到单链表的基本操作得到了实现。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间: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; //结点的类型⒊所设计的函数(1)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;i<n;i++) //保存数组元素scanf("%d",&A[i]);//勾链建表,使链表中元素的次序与数组A各元素次序相同for(j=0;j<n;j++) //根据一维数组A[M]建立一个单循环链表{p=(LNode*)malloc(sizeof(LNode));p->data=A[j];p->next=move->next;move->next=p;move=move->next;}return head; //返回头指针}(2)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;}p=p->next;}*a=Max->data; //把最大和次大值分别赋值给*a和*b *b=Secmax->data;}(4)Sort(LNode *head)//查找key,把链表中比key小的作为前驱结点,比key大的作为后继结点LNode *Sort(LNode *head){ //*front指向key前部分链表,*rear指向key后部分链表LNode *k,*p,*front,*rear,*L; DataType key;front=head;p=head->next;printf("请输入key:");scanf("%d",&key);L=Locate(head,key); //调用Locate()查找keyk=L;rear=k;while(p!=head){if(front->next!=k) //判断key前面链表是否已经比较完毕{if(p->data > k->data)//将key结点前驱比key大的插到key后面{front->next=front->next->next; //断开结点p->next=rear->next; //插入结点rear->next=p;rear=rear->next;p=front->next; //*p指回key的前驱结点}else{p=p->next; //移动指针front=front->next;}}else{p=rear->next;if(p->data < k->data)//将key结点后继比key小的插到key前面{rear->next=rear->next->next; //断开结点p->next=front->next; //插入结点front->next=p;front=front->next;p=rear->next; //*p指回key的后继结点}else{p=p->next; //移动指针rear=rear->next;}}}return head; //返回头指针}(5)主函数:void main() //主函数{LNode *L,*W,*H;DataType a,b;int key,choice; //choice记载操作,key为输入值printf("\n");H=Create(); //调用Create()建立单循环链表//界面美化printf("\n");printf("***************************************************************\n");printf("* *\n");printf("* 定位查找-------------------------------------------------1 *\n");printf("* 输出最大和次大值-----------------------------------------2 *\n");printf("* 输出比较值key后的结果------------------------------------3 *\n");printf("* 重新输入一个数组-----------------------------------------4 *\n");printf("* 退出系统-------------------------------------------------0 *\n");printf("* *\n");printf("***************************************************************\n");printf("\n");//功能选择printf("请选择系统功能:");scanf(" %d", &choice);printf("\n");while(choice != 0){switch (choice){case 1: //查找数值key并返回指针{printf("请输入要查找的值:");scanf("%d",&key);L=Locate(H,key);if(L!=NULL)printf("查找成功!!\n");}break;case 2: //求链表的最大和次大值{Search(H,&a,&b);printf("最大值:%d\n",a);printf("次大值:%d\n",b);}break;case 3: //将key插入链表中{H=Sort(H);W=H->next;printf("结果是:"); //输出结果while(W!=H){printf(" %d",W->data); //依次输出W=W->next;}printf("\n");}break;case 4:main();default:printf("请输入正确的选项!!\n"); //错误处理}//功能重复printf("********************************************************* ******\n");printf("* *\n");printf("* 定位查找-------------------------------------------------1 *\n");printf("* 输出最大和次大值-----------------------------------------2 *\n");printf("* 输出比较值key后的结果------------------------------------3 *\n");printf("* 重新输入一个数组-----------------------------------------4 *\n");printf("* 退出系统-------------------------------------------------0 *\n");printf("* *\n");printf("********************************************************* ******\n");printf("请选择系统功能:");scanf(" %d", &choice);}}⒋运行结果:⒌问题与总结(1)在编写Create()函数时,要根据一维数组A【M】建立单循环链表,一开始只是用for语句结合头结点创建单链表方法。

相关文档
最新文档