单链表基本操作实验

合集下载

单链表的基本操作实验报告

单链表的基本操作实验报告

单链表的基本操作实验报告单链表的基本操作实验报告引言:单链表是一种常见的数据结构,它由一系列节点组成,每个节点包含一个数据元素和一个指向下一个节点的指针。

在本次实验中,我们将学习和实践单链表的基本操作,包括创建链表、插入节点、删除节点以及遍历链表等。

一、实验目的本次实验的主要目的是掌握单链表的基本操作,包括链表的创建、插入节点、删除节点和遍历链表。

通过实践操作,加深对单链表的理解,并掌握如何应用单链表解决实际问题。

二、实验过程1. 创建链表首先,我们需要创建一个空链表。

链表可以通过一个头节点来表示,头节点不存储数据,只用于标识链表的起始位置。

我们可以定义一个指针变量head,将其指向头节点。

2. 插入节点在链表中插入节点是常见的操作。

我们可以选择在链表的头部、尾部或者指定位置插入节点。

插入节点的过程可以分为以下几个步骤:a. 创建一个新节点,并为其赋值;b. 找到要插入位置的前一个节点;c. 将新节点的指针指向前一个节点的下一个节点;d. 将前一个节点的指针指向新节点。

3. 删除节点删除节点是另一个常见的操作。

我们可以选择删除链表的头节点、尾节点或者指定位置的节点。

删除节点的过程可以分为以下几个步骤:a. 找到要删除节点的前一个节点;b. 将前一个节点的指针指向要删除节点的下一个节点;c. 释放要删除节点的内存空间。

4. 遍历链表遍历链表是为了查看链表中的元素。

我们可以从头节点开始,依次访问每个节点,并输出节点的值。

三、实验结果在本次实验中,我们成功完成了单链表的基本操作。

通过创建链表、插入节点、删除节点和遍历链表等操作,我们可以方便地对链表进行增删改查操作。

四、实验总结通过本次实验,我们对单链表的基本操作有了更深入的了解。

单链表是一种非常重要的数据结构,广泛应用于各个领域。

掌握了单链表的基本操作,我们可以更好地解决实际问题,并且为以后学习更复杂的数据结构打下坚实的基础。

在实验过程中,我们还发现了一些问题和不足之处。

单链表的基本操作实验报告

单链表的基本操作实验报告

湖南第一师范学院信息科学与工程系实验报告课程名称:数据结构与算法成绩评定:实验项目名称:单链表的基本操作指导教师:学生姓名:沈丽桃学号: 10403080118 专业班级: 10教育技术实验项目类型:验证实验地点:科B305 实验时间: 2011 年 10 月20 日一、实验目的与要求:实验目的:实现线性链表的创建、查找、插入、删除与输出。

基本原理:单链表的基本操作二、实验环境:(硬件环境、软件环境)1.硬件环境:奔ⅣPC。

2.软件环境:Windows XP 操作系统,TC2.0或VC++。

三、实验内容:(原理、操作步骤、程序代码等)#include<stdio.h>#include<stdlib.h>#include<malloc.h>struct celltype{int element;struct celltype*next;};typedef int position;void main(){struct celltype*head,*p;int x,choice;void INSERT(int x,struct celltype*p);void LOCATE(int x,struct celltype*p);void DELETE(int x,struct celltype*p);p=(struct celltype*)malloc(sizeof(struct celltype));head=p;p->element=0;p->next=NULL;printf(“Please option:1:Insert 2:Locate 3:Delete\n”);printf(“Please choose:”);scanf(“%d”,&choice);switch(choice)case 1:printf(“Please input a node:”);scanf(“%d”,&x);p=head;INSERT(x,p);for(p=head;p!=NULL;p=p->next)printf(“%d”,p->element);printf(“\n”);break;case 2:printf(“Please input the data you want to locate:”); scanf(“%d”,&x);p=head;LOCATE(x,p);break;case 3:printf(“Please input the data you want to delete:”); scanf(“%d”,&x);DELETE(x,p);for(p=head;p!=NULL;p=p->next)printf(“%d”,p->next);printf(“\n”);break;}void INSERT(int x,struct celltype*p){struct celltype*t,*q;q=(struct celltype*)malloc(sizeof(struct celltype)); q->next=x;while((x>p->element)&&(p!=NULL)){t=p;p=p->next;}if((x>p->element)&&(p->next!=NULL)){p->next=q;q->next=NULL;}else{q->next=p;t->next=q;}}void LOCATE(int x,struct celltype*p){while(p->next!=NULL)if(p->next->element==x)printf(“the number %d is in %d\n”,x,p);else printf(“the number not exist!\n”);}void DELETE(int x,struct celltype*p){while((p->element!=x)&&(p->next!=NULL)){t=p;p=p->next;}if(p->element==x)t->next=p->next}error C2018:unknown character ’Oxal’error C2065:’Please’:undeclared identifiererror C4024:’printf’:different types for formal and actual parameter 1error C4047:’function’:’const*differs in levers of indirection from ’int’error C2146:syntaxerror:missing’)’before identifier’option’error C2017:illegal escape sequenceerror C2059:syntax error:’)’error C2143:syntax error:missing’)’before’%’出现了很多错误,主要是因为printf里的一对双引号不是英文状态下的。

单链表的实验报告

单链表的实验报告

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

在本次实验中,我们将学习如何使用单链表来实现一些基本的操作,并通过实验验证其功能和效率。

一、实验目的本次实验的主要目的是掌握单链表的基本概念和操作方法,包括插入、删除、查找等操作,并通过实际操作来验证其正确性和效率。

二、实验过程1. 单链表的定义和初始化首先,我们需要定义一个单链表的结构,并初始化一个空链表。

链表的结构可以使用C语言中的结构体来表示,其中包含一个数据域和一个指向下一个节点的指针。

2. 插入操作在已有链表中插入一个新的节点,可以分为两种情况:在链表头部插入和在链表中间插入。

我们可以通过修改指针的指向来实现插入操作。

3. 删除操作删除链表中的一个节点,同样可以分为两种情况:删除头节点和删除中间节点。

删除操作需要注意指针的重新连接,以防止链表断裂。

4. 查找操作在链表中查找指定的元素,可以通过遍历链表的方式来实现。

从链表头开始,依次比较节点的数据域,直到找到目标元素或者遍历到链表尾部。

5. 其他操作在实际应用中,还可以对链表进行排序、逆序、合并等操作,这些操作都可以通过适当的算法来实现。

三、实验结果通过实际操作,我们验证了单链表的各种操作方法的正确性和效率。

在插入、删除和查找操作中,链表的时间复杂度为O(n),其中n为链表的长度。

而在其他操作中,时间复杂度则根据具体算法的实现方式而定。

四、实验总结通过本次实验,我们深入了解了单链表的结构和操作方法,并通过实际操作来验证了其功能和效率。

单链表作为一种常用的数据结构,在实际应用中具有广泛的用途,例如链表可以用来实现栈、队列等其他数据结构,也可以用于解决一些实际问题,如链表的反转、环的检测等。

总之,掌握单链表的基本概念和操作方法对于学习和理解数据结构具有重要意义。

通过实验的方式,我们不仅能够加深对单链表的理解,还能够提高编程能力和解决实际问题的能力。

单链表的基本操作

单链表的基本操作

单链表的基本操作一、实验目的1、掌握线性链表的操作特点,即指针是逻辑关系的映像。

2、掌握动态产生单链表的方法。

3、熟练掌握单链表的插入、删除操作特点,即指针赋值的先后次序。

4、熟练掌握单链表的取元素操作二、实验内容1、定义单链表类型并动态创建单链表2、实现线性表链式存储结构下元素的插入操作3、实现线性表链式存储结构下元素的删除操作4、实现线性表链式存储结构下取元素操作三、实验环境TC或VC++或Java四、实验步骤1、单链表的存储定义2、从键盘上依次输入21、18、30、75、42、56,逆序创建单链表,并输出单链表中的各元素值。

3、分别在单链表的第3个位置和第9个位置插入67和10,给出插入成功或失败的信息,并输出单链表中的各元素值。

4、删除单链表中的第6个数据元素和第8个数据元素,给出删除成功或失败的信息,并输出单链表中的各元素值。

5、取单链表中的第5个数据元素和第7个数据元素五、问题讨论1、单链表具有什么优缺点?2、单链表的定义与顺序表的定义有什么区别?3、逆序创建单链表有什么好处?4、为什么单链表中取元素、插入和删除操作在开始不判断给定位置i的合法性?5、如何改进单链表的定义,使其可以在操作前判断判断给定位置i的合法性?六、实验报告内容1、实验目的2、实验内容和具体要求3、完成情况和实验记录,实验记录为实验过程中遇到的问题及解决方法4、程序清单5、所输入的数据及相应的运行结果6、问题回答7、实验心得实验代码:#include<stdio.h>#include<stdlib.h>#include<malloc.h>#define ERROR 0;typedef struct LNode{int data;struct LNode *next;}LNode,*LinkList;LinkList InitList(LinkList L){LinkList node = NULL;node = (LinkList)malloc(sizeof(LNode));if(!node){return ERROR;}node->next = NULL;L = node;return L;}int ListLength(LinkList L){LinkList p = NULL;int count = 0;p = L;while(p->next){count++;p = p->next;}return count;}LinkList CreateList_L(LinkList L,int n){int i;LinkList p = NULL;for(i=n;i>0;i--){p = (LinkList)malloc(sizeof(LNode)); scanf("%d",&p->data);p->next = L->next;L->next = p;}return L;}LinkList ListInsert(LinkList L,int i,int e) {int j = 0;LinkList s = NULL,p = NULL;p = L;while(p&&j<i-1){p = p->next;j++;}if(!p||j>i-1){printf("输入的位置不合法!!!\n"); return L;}s = (LinkList)malloc(sizeof(LNode));s->data = e;s->next = p->next;p->next = s;return L;}LinkList ListDelete(LinkList L,int i){int j;LinkList q = NULL,p = NULL;p = L;j = 0;while(p->next&&j<i-1){p = p->next;j++;}if(!(p->next)||j>i-1){printf("输入的位置不合法!!!\n"); return L;}q = p->next;p->next = q->next;free(q);return L;}int GetElem(LinkList L,int i){int j,e;LinkList p = NULL;if(i<1||i>ListLength(L)){printf("输入的位置不合法!!!\n");return;}p = L->next;j = 1;while(j<i){p = p->next;j++;}e = p->data;printf("第%d位的数据元素为%d\n",i,e);}void menu(){printf("*************目录**************\n"); printf("输出单链表中的各元素值 1\n"); printf("在单链表中插入数据元素 2\n"); printf("在单链表中删除数据元素 3\n"); printf("取出单链表中的数据元素 4\n"); printf(" 结束程序 0\n"); printf("*******************************\n"); }void main(){int n,m,i,e;LinkList L = NULL,p = NULL;L = InitList(L);printf("请输入元素个数:");scanf("%d",&n);printf("依次输入%d个数据元素:",n);L = CreateList_L(L,n);do{printf("\n \n");menu();printf("请输入你的选择:");scanf("%d",&m);switch(m){case 1:printf("现在链表的元素为:");p = L->next;while(p!=NULL){printf("%d ",p->data);p = p->next;}printf("\n");break;case 2:printf("依次输入插入位置和数据元素(空格隔开):");scanf("%d %d",&i,&e);L = ListInsert(L,i,e);break;case 3:printf("输入需要删除的元素的位置:");scanf("%d",&i);L = ListDelete(L,i);break;case 4:printf("输入需要取出的元素的位置:");scanf("%d",&i);GetElem(L,i);break;case 0:printf("已结束程序!!!\n"); break;default:printf("输入错误!!!\n"); }}while(m!=0);}。

数据结构单链表实验报告

数据结构单链表实验报告

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

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

利用单链表完成以下算法:- 单链表逆序- 查找单链表中的中间节点- 删除单链表中的倒数第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、巩固该存贮结构的构造方法,深入理解和灵活掌握链表的插入、删除等操作。

二、实验要求1、定义一链表类型,并定义带有头结点的单链表。

2、将教材中链表的建立、初始化、插入、删除等函数实现。

3、链表能够存储10名学生的基本信息(包括姓名、学号和成绩)。

4、由主函数按照用户要求对各个链表操作访问。

5、每操作之前要有明确的说明,操作后要输出操作结果。

6、分析顺序表链表的插入、删除、查找的时间和空间复杂度。

三、实验内容1、在自己的U盘的“姓名+学号”文件夹中创建“实验3”文件夹,本次实验的所有程序和数据都要求存储到本文件夹中。

2、完成链表操作的如下函数:单链表的建立、插入、删除#include<stdio.h>#include<stdlib.h>static int N=5;typedef struct _sy{ char name[12];int no;struct _sy *next;}stud;stud *Create(int m) //创建链表{ int i;stud *h,*p,*q;h=(stud*)malloc(sizeof(stud));if(h!=NULL){ p=h;for(i=0;i<m;i++){ q=(stud*)malloc(sizeof(stud));if(q!=NULL){ printf("依次输入第%d个人的姓名和学号:\n",i+1);scanf("%s%d",q->name,&q->no);q->next=NULL;p->next=q;p=q;}}}printf("\n");return(h);}stud *Delete(stud *sy,int post) //删除一个学生的数据{ int i;stud *cur,*pre;cur=sy;if(0==post){ return(sy);}else{ if(1==post){ cur=cur->next;sy->next=cur->next;free(cur);}else{ for(i=2;i<post+1;i++){ cur=cur->next;pre=cur;}cur=cur->next;pre->next=cur->next;free(cur);}return(sy); }}stud *Insert(stud *sy,int post) //插入一个新的学生的数据 { int i;stud *cur,*pre,*node;if(sy!=NULL){ cur=sy;node=(stud*)malloc(sizeof(stud));if(node!=NULL){ printf("请输入新人的姓名和学号:\n");scanf("%s%d",node->name,&node->no);if(1==post){ node->next=sy->next;sy->next=node;}else{ for(i=2;i<post+2;i++){ pre=cur;cur=cur->next;}node->next=pre->next;pre->next=node;}}}printf("\n");return(sy);}void Print(stud *sy) //输出学生信息{ int post=1;stud *cur;cur=sy->next;printf("当前的学生信息如下所示:\n");while(cur!=NULL){ printf("第%d个人的姓名是:%s,学号为:%d\n",post,cur->name,cur->no); cur=cur->next;post++;}N=--post;}int main(){ int mm,post,i;stud *head;head=Create(N);Print(head);for(i=0;i<1;i++){ printf("请输入要删除的学号的位置:\n");scanf("%d",&mm);Delete(head,mm);Print(head);printf("请输入要插入学号的位置:\n");scanf("%d",&post);Insert(head,post);Print(head);}return 0;}。

链表基本操作实验报告

链表基本操作实验报告
void LinkedListInsert(LinkedList L,int i,ElemType x) {LinkedList p,s; int j; j=1;p=L;
while(p&&j<i) {p=p->next;j++;} if(p==NULL||j>i)
printf("插入位置不正确\n"); else{s=(LNode *)malloc(sizeof(LNode));
{printf("%d ",p->data); p=p->next;} } printf("\n"); }
int LinkedListLength (LinkedList L) {LinkedList p;
int j; p=L->next; j=0; while(p!=NULL)
{j++;p=p->next;} return j; }
8.向链表中插入元素
插入元素之后的链表 9.从链表中删除元素
删除位置为 6 的元素(是 3)
10.清空单链表
五、 实验体会
经过这次单链表基本操作实验,自己的编程能力有了进一步的提高,认识到自 己以前在思考一个问题上思路不够开阔,不能灵活的表达出自己的想法,虽然在 打完源代码之后出现了一些错误,但是经过认真查找、修改,最终将错误一一修 正,主要是在写算法分析的时候出现了障碍,经过从网上查找资料,自己也对程 序做了仔细的分析,对单链表创建、插入、删除算法画了详细的 N-S 流程图。
r=L; r 指向头结点
使用 malloc 函数动态分配存储空间,指针 p 指向新开辟的结点,并将元素存
放到新开辟结点的数据域,

数据结构单链表实验报告

数据结构单链表实验报告

数据结构单链表实验报告一、实验目的1、深入理解单链表的数据结构及其基本操作。

2、掌握单链表的创建、插入、删除、查找等操作的实现方法。

3、通过实际编程,提高对数据结构和算法的理解和应用能力。

二、实验环境1、操作系统:Windows 102、编程语言:C 语言3、开发工具:Visual Studio 2019三、实验原理单链表是一种常见的数据结构,它由一系列节点组成,每个节点包含数据域和指针域。

指针域用于指向下一个节点,从而形成链表的链式结构。

单链表的基本操作包括:1、创建链表:通过动态分配内存创建链表的头节点,并初始化链表为空。

2、插入节点:可以在链表的头部、尾部或指定位置插入新的节点。

3、删除节点:根据给定的条件删除链表中的节点。

4、查找节点:在链表中查找满足特定条件的节点。

四、实验内容(一)单链表的创建```cinclude <stdioh>include <stdlibh>//定义链表节点结构体typedef struct Node {int data;struct Node next;} Node;//创建单链表Node createList(){Node head =(Node)malloc(sizeof(Node));if (head == NULL) {printf("内存分配失败!\n");return NULL;}head>data = 0;head>next = NULL;return head;}int main(){Node list = createList();//后续操作return 0;}```在创建单链表时,首先为头节点分配内存空间。

若内存分配失败,则提示错误信息并返回`NULL`。

成功分配内存后,初始化头节点的数据域和指针域。

(二)单链表的插入操作插入操作分为三种情况:头部插入、尾部插入和指定位置插入。

1、头部插入```cvoid insertAtHead(Node head, int data) {Node newNode =(Node)malloc(sizeof(Node));if (newNode == NULL) {printf("内存分配失败!\n");return;}newNode>data = data;newNode>next = head>next;head>next = newNode;}```头部插入时,创建新节点,将新节点的数据域赋值,并将其指针域指向原头节点的下一个节点,然后更新头节点的指针域指向新节点。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验2 链表的操作实验容:1)基础题:编写链表基本操作函数,链表带有头结点(1)CreatList_h()//用头插法建立链表(2)CreateList_t()//用尾插法建立链表(3)InsertList()向链表的指定位置插入元素(4)DeleteList()删除链表中指定元素值(5)FindList()查找链表中的元素(6)OutputList()输出链表中元素2)提高题:(1)将一个头节点指针为heada的单链表A分解成两个单链表A和B,其头结点指针分别为heada和headb,使得A表中含有原单链表A中序号为奇数的元素,B表中含有原链表A中序号为偶数的元素,且保持原来的相对顺序。

(2)将一个单链表就地逆置。

即原表(a1,a2,。

an),逆置后新表(an,an-1,。

a1)/*程序功能 :单链表基本功能操作编程者 :天啸日期 :2016-04-14版本号 :3.0*/#include <stdio.h>#include <stdlib.h>typedef struct List{int data;struct List *next;}List;void CreatList_h(List *L) //头插法{int i = 0;int n = 0;int goal;List *p;printf("请输入数据的个数:\n");scanf("%d",&n);L -> next = NULL;for(i=0;i<n;i++){printf("请输入第%d个数:\n",i+1);scanf("%d",&goal);p = (struct List*)malloc(sizeof(struct List));p -> data = goal;p -> next = L->next; //将L指向的地址赋值给p;L -> next = p;}}void CreateList_t(List *L) //尾插法{int i;int n;int goal;List *p;List *q=L;printf("请输入数据的个数:\n");scanf("%d",&n);for (i=0;i<n;i++){printf("请输入第%d个数:\n",i+1);scanf("%d",&goal);p = (struct List*)malloc(sizeof(struct List));p -> data = goal;q -> next = p;q = p;}q -> next = NULL;}void InsList(List *L,int i,int e) //插入{List *s;List *p = L;int j = 0;while (p&&j<i-1){p = p->next;++j;}s = (struct List*)malloc(sizeof(struct List));s -> data = e; //插入L中s -> next = p -> next;p -> next = s;return ;}void DeleteList(List*L,int e) //删除{List *q;List *p = L;while (p->next&&p->next->data!=e){p = p -> next;}if (!(p->next)){printf("不存在该元素!\n");exit(0);}q = p -> next;p -> next = q->next;e = q -> data;free(q);return ;}void FindList(List*L,int e) //查找元素{int j = 1;List *p = L->next;while (p&&p->data!=e){p = p->next;++j;}if (!p){printf("不存在该元素!\n");exit(0);}printf("您查找的元素位置为:%d\n",j);return ;}void DisPlay(List *L) //输出链表{List *p = L->next;printf("您输入的数据为:\n");while (p!=NULL){printf ("%d ",p->data);p = p -> next;}printf("\n");}void Inverse(List*L) //单链表就地逆置{List *q;List *p = L->next;L -> next = NULL;while (p != NULL){q = p -> next; //q指针保留原链表当前处理节点的下一个节点p -> next = L -> next; //将当前处理节点p插入到逆置L的表头L -> next = p;p = q; //p指向下一个待插入的节点}}void DisCreat(List*L) //链表拆分{int i = 0; //i记录表A中结点的序号List *p;List *B = (struct List*)malloc(sizeof(struct List)); //创建 B 表表头B -> next = NULL; //B表初始化List*ra = L,*rb = B; //ra和rb将分别指向将创建的A 表和B表的尾结点p = L -> next; //p指向待处理的结点L -> next = NULL; //置空新的 A 表 while (p != NULL){i++; //序号加 1if (i%2 == 0){ //处理序号为偶数的链表结点rb -> next = p; // 若B表尾描入新结点rb = p; //rb指向新的尾结点}else{ //处理原序号为奇数的结点ra -> next = p; //在A表尾插入新结点ra = p;}p = p->next; //将p指向新的待处理结点}ra -> next = NULL;rb -> next = NULL;p = L -> next;printf("奇数位数据为:\n"); //输出奇数位数据while (p != NULL){printf ("%d ",p -> data);p = p -> next;}printf("\n");List *q = B->next;printf("偶数位数据为:\n"); //输出偶数位数据while(q != NULL){printf ("%d ",q->data);q = q -> next;}printf("\n");return ;}int main(){int n;int i;int e;int No;List*L = (struct List*)malloc(sizeof(struct List));List*B = (struct List*)malloc(sizeof(struct List));char yes_no = 'y';while(yes_no=='y'||yes_no=='Y') //循坏开始{system("cls");printf("\t\t\t|---------------------------------|\n"); //交互式界面printf("\t\t\t| 单链表基本操作 |\n");printf("\t\t\t|---------------------------------|\n");printf("\t\t\t| 1---头插法建立链表 |\n");printf("\t\t\t| 2---尾差法建立链表 |\n");printf("\t\t\t| 3---指定位置插入 |\n");printf("\t\t\t| 4---指定元素删除 |\n");printf("\t\t\t| 5---查找链表元素 |\n");printf("\t\t\t| 6---输出链表元素 |\n");printf("\t\t\t| 7---单链表就地逆置 |\n");printf("\t\t\t| 8---单链表拆分 |\n");printf("\t\t\t| 0---退出 |\n");printf("\t\t\t|---------------------------------|\n");printf("\t\t\t| 计科14-2 第5组^_^|\n");printf("\t\t\t|---------------------------------|\n");printf("请选择运算方式:\n");scanf ("%d",&No);switch(No){case 1:{CreatList_h(L);DisPlay(L);break;}case 2:{CreateList_t(L);DisPlay(L);break;}case 3:{printf("请输入需要插入元素的位置:\n");scanf("%d",&i);printf("请输入需要插入的元素:\n");scanf("%d",&e);InsList(L,i,e);DisPlay(L);break;}case 4:{printf("请输入需要删除的元素:\n");scanf("%d",&e);DeleteList(L,e);DisPlay(L);break;}case 5:{printf("请输入需要查找的元素:\n");scanf("%d",&e);FindList(L,e);DisPlay(L);break;}case 6:{DisPlay(L);break;}case 7:{Inverse(L);DisPlay(L);break;}case 8:{DisCreat(L);break;}case 0:system("cls");printf("\n\n\n\t\t\t尚有很多不足之处,望多多指教!");exit(0);break;default:printf(" 请输入正确的数字。

相关文档
最新文档