单链表的完整代码

合集下载

C++链表的创建与操作

C++链表的创建与操作

C++链表的创建与操作我们知道,数组式计算机根据事先定义好的数组类型与长度自动为其分配一连续的存储单元,相同数组的位置和距离都是固定的,也就是说,任何一个数组元素的地址都可一个简单的公式计算出来,因此这种结构可以有效的对数组元素进行随机访问。

但若对数组元素进行插入和删除操作,则会引起大量数据的移动,从而使简单的数据处理变得非常复杂,低效。

为了能有效地解决这些问题,一种称为“链表”的数据结构得到了广泛应用。

1.链表概述链表是一种动态数据结构,他的特点是用一组任意的存储单元(可以是连续的,也可以是不连续的)存放数据元素。

链表中每一个元素成为“结点”,每一个结点都是由数据域和指针域组成的,每个结点中的指针域指向下一个结点。

Head是“头指针”,表示链表的开始,用来指向第一个结点,而最后一个指针的指针域为NULL(空地址),表示链表的结束。

可以看出链表结构必须利用指针才能实现,即一个结点中必须包含一个指针变量,用来存放下一个结点的地址。

实际上,链表中的每个结点可以用若干个数据和若干个指针。

结点中只有一个指针的链表称为单链表,这是最简单的链表结构。

再c++中实现一个单链表结构比较简单。

例如,可定义单链表结构的最简单形式如下struct Node{int Data;Node *next;};这里用到了结构体类型。

其中,*next是指针域,用来指向该结点的下一个结点;Data是一个整形变量,用来存放结点中的数据。

当然,Data可以是任何数据类型,包括结构体类型或类类型。

在此基础上,我们在定义一个链表类list,其中包含链表结点的插入,删除,输出等功能的成员函数。

class list{Node *head;public:list(){head=NULL;}void insertlist(int aDate,int bDate); //链表结点的插入void Deletelist(int aDate); //链表结点的删除void Outputlist(); //链表结点的输出Node*Gethead(){return head;}};2.链表结点的访问由于链表中的各个结点是由指针链接在一起的,其存储单元文笔是连续的,因此,对其中任意结点的地址无法向数组一样,用一个简单的公式计算出来,进行随机访问。

C++链表类的实现(面向对象的思想)

C++链表类的实现(面向对象的思想)
cout<<"请按任意键继续..."<<endl; _getch();
//节点的指针复位 pNode = g_World.getObjectLink().m_pHead;
//遍历链表(删除节点) while(pNode != NULL)
{ if(pNode->m_pObject->IsDead()) { //删除节点 g_World.getObjectLink().DeleteNode(pNode->m_pObject); cout<<"删除节点成功"<<endl; count --; break; } pNode = pNode->pNext;
2:删除节点
//
3:插入节点
//程序说明:Class Object,World,LinkObject
//
Object:是节点的数据域的数据
//
World: 用于返回链表对象
//
LinkObject:链表类,提供了对链表操作的基本方法
//代码行数:300
//作者:CreateDBW 时间:2012 年 12 月 10 日
count ++; if(count == flag) {
//为新增的节点分配内存 Node *pInsertNode = new Node(pObj); //新增节点的后一个节点的地址(pNode->pNext) //存储在新增节点(pInsertNode)的 pNext 中. pInsertNode->pNext = pNode->pNext; //把新增节点的地址 pInsertNode 存储到 pNode->pNext //中 pNode->pNext = pInsertNode; return ; } pNode = pNode->pNext; } //如果要插入的节点是在最后就用下面的函数 AddNode(pObj); } LinkObject::~LinkObject() {

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

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

湖南第一师范学院信息科学与工程系实验报告课程名称:数据结构与算法成绩评定:实验项目名称:单链表的基本操作指导教师:学生姓名:沈丽桃学号: 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里的一对双引号不是英文状态下的。

单链表的基本操作

单链表的基本操作

10)调用头插法的函数,分别输入10,20,分别回车:
11)调用尾插法的函数,分别输入30,40
12)查找单链表的第四个元素:
13)主函数中传入参数,删除单链表的第一个结点:
14)主函数传入参数,删除第0个未位置的元素,程序报错:
15)最后,输出单链表中的元素:
return 0;
}
6)编译,连接,运行源代码:
7)输入8,回车,并输入8个数,用空格分隔开,根据输出信息,可以看出,链表已经拆分为两个
五、实验总结
1.单链表采用的是数据+指针的表示形式,指针域总是指向下一个结
点(结构体)的地址,因此,在内存中的地址空间可以是不连续的,操作比顺序存储更加的方便
2.单链表使用时,需要用malloc函数申请地址空间,最后,删除元
素时,使用free函数释放空间。

3.链表上机题

3.链表上机题

链表实验题一、实验内容1.编程实现链表的基本操作函数。

(1). void CreatList(LinkList &La,int m)//依次输入m个数据,并依次建立各个元素结点,逐个插入到链表尾;建立带表头结点的单链表La;(2). void ListPrint(LinkList La)//将单链表La的数据元素从表头到表尾依次显示。

(3).void ListInsert (LinkList &L,int i,ElemType e){//在带头结点的单链表L中第i个数据元素之前插入数据元素e(4). void ListDelete(LinkList &La, int n, ElemType &e)//删除链表的第n个元素,并用e返回其值。

(5). int Search(LinkList L, ElemType x)//在表中查找是否存在某个元素x,如存在则返回x在表中的位置,否则返回0。

(6). int ListLength(LinkList L) //求链表L的表长(7). void GetElem(LinkList L, int i, ElemType &e)//用e返回L中第i个元素的值链表的结点类型定义及指向结点的指针类型定义可以参照下列代码:typedef struct Node{ElemType data; // 数据域struct Node *next; // 指针域}LNode, *LinkList;2. 设有链表A和B,其中的数据内容均为整型数值,且都按增序排列,生成新的链表C、D,满足下列要求:= (C中元素为A和B的并集)(1) C A B(2) D=A-B (D中元素为在A中出现但不在B中出现的元素)且C、D元素都按增序排列。

编程要求:输入:键盘输入链表A的数据元素(至少5个)键盘输入链表B的数据元素(至少5个)输出:屏幕分别打印链表A,B,C,D的数据元素。

数据结构单链表实验报告

数据结构单链表实验报告

数据结构单链表实验报告一、实验目的本次实验的主要目的是深入理解和掌握数据结构中的单链表概念、原理和操作方法,通过实际编程实现单链表的创建、插入、删除、查找等基本操作,提高对数据结构的实际应用能力和编程技能。

二、实验环境本次实验使用的编程语言为C++,编程工具为Visual Studio 2019。

三、实验原理单链表是一种常见的数据结构,它由一系列节点组成,每个节点包含数据域和指针域。

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

单链表的优点是可以动态地分配内存,灵活地插入和删除节点,但其缺点是访问特定位置的节点需要从头开始遍历,时间复杂度较高。

四、实验内容(一)单链表的创建创建单链表的基本思路是依次创建节点,并将节点通过指针链接起来。

以下是创建单链表的代码实现:```cppinclude <iostream>using namespace std;//定义链表节点结构体struct ListNode {int data;ListNode next;ListNode(int x) : data(x), next(NULL) {}};//创建单链表ListNode createList(){int num, value;cout <<"请输入节点个数: ";cin >> num;ListNode head = NULL;ListNode tail = NULL;for (int i = 0; i < num; i++){cout <<"请输入第"<< i + 1 <<"个节点的值: ";cin >> value;if (head == NULL) {head = newNode;tail = newNode;} else {tail>next = newNode;tail = newNode;}}return head;}```(二)单链表的插入操作单链表的插入操作可以分为在表头插入、在表尾插入和在指定位置插入。

北科大数据结构上机题代码

北科大数据结构上机题代码《数据结构》上机题1、输入数据建立单链表,并求相邻两节点data值之和为最大的第一节点。

例如输入:26473 0,建立:所求结果=4 程序结构:类型说明;建表函数:Creatlist(L); 求值函数:Adjmax(L);main( ){ 变量说明;调用Creatlist(L)建表;调用Adjmax(L)求值;打印数据;释放链表空间;Y继续?N停止 } 上机题1:#include #include typedef int datatype;//设当前数据元素为整型 typedef struct node//节点类型 { datatype data;//节点的数据域struct node *next;//节点的后继指针域 }Linknode,*Link;//linknode为节点说明符,link为节点指针说明符 Link Createlist()//创建单链表的算法 { int a,c;float b; Link H,P,r;//H,P,r分别为表头,新节点和表尾节点指针H=(Link)malloc(sizeof(Linknode)); //建立头节点 r=H; do{ c=(fflush(stdin),scanf(\ //判断输入的是否是整数a=(int)b; if(c!=1||a!=b||a>-2^16||a-2^16||adata=a;//存入数据 r->next=P;//新节点链入表尾r=P; do { c=(fflush(stdin),scanf(\ //判断输入的是否是整数 a=(int)b; if(c!=1||a!=b||a>-2^16||a-2^16||anext=NULL;//将尾节点的指针域置空 return(H);//返回已创建的头节点 } Link Adjmax(Link H)//求链表中相邻两节点data值之和为最大的第一节点的指针的算法 { Link p,p1,q; int i,j; p=p1=H->next; if(p1==NULL) return(p1); //表空返回 q=p->next; if(q==NULL)return(p1); //表长=1时返回 i=p->data+q->data;//相邻两节点data值之和 while(q->next){ p=q;q=q->next;//取下一对相邻节点的指针j=p->data+q->data; if(j>i){p1=p;i=j;//取和为最大的第一节点指针} } return (p1); } void main()//主函数 { Link A,B,p,q; int a,b; do { printf(\请输入一组整数(以0为结束符,数之间回车):\\n\ p=A=Createlist();//创建新链表 B=Adjmax(A);//求链表中相邻两节点data值之和为最大的第一节点的指针a=(int)(B->data);//取第一节点的data值printf(\第一节点的data值为:%d\\n\ while(p->next)//释放链表空间{q=p;p=p->next;free(q);} free(p); printf(\是否继续输入下一组整数:是:1,否:0\\n\scanf(\}while(b); } 上机题2、实现算术表达式求值程序。

实验四 链表

实验二链表的基本操作一、实验目的掌握链表的基本概念、结构的定义,通过设计程序掌握链表上的基本操作:建立、插入、删除、查找以及链表合并等,并理解线性表的两种存储结构:顺序表和链表的区别。

二、实验准备1. 复习C语言中指针的用法,特别是结构体的指针的用法。

2. 了解链表(含带头结点的链表、循环链表)的概念,链表的结构定义方法。

单链表是线性表的链式存储表示,是用一组任意的存储单元依次存储线性表的数据元素。

因此,为了表示每个数据元素a i与其直接后继元素a i+1之间的逻辑关系,对数据元素a i来说,除了存储其本身的信息之外,还需存储一个指示其直接后继的信息(即直接后继的存储位置),而这部分就是用指针来完成的。

3. 掌握线性表在链式存储结构上实现基本操作:建立、查找、插入、删除等算法。

在实现这些算法的时候,要注意判断输入数据的合法性,除此之外还要要注意以下内容:✧在实现查找的时候,首先要判断该顺序表是否为空,其次要判断查找后的结果(查到时输出查到的数据,未查到时给出相关提示)。

✧在实现插入的时候,由于是链式存储,它可以随机产生和回收存储空间,所以它不要判断线性表是否为满,但仍需判断要插入的位置是否合法,原因同实验一,其次要注意插入的时候语句的顺序不可颠倒,否则出错。

例如:ps所指向结点要插入在p所指向的结点之后,则:正确形式:s->next=p->next; p->next=s;错误形式:p->next=s;s->next=p->next(因为此时p->next已经指向s了)在实现删除的时候,首先要判断线性表是否为空,为空则不能删除;其次在删除后要回收空间。

例如:删除如上图所示s所指向的结点p->next=p->next->next;free(s);4. 链表部分相关操作代码:⑴单链表的结构定义:#include <stdio.h>typedef int elemtype;typedef struct lnode{ elemtype data;struct lnode *next;}*linklist;⑵建立单链表的算法int n; /*n作为整个程序的全局变量*/linklist *creat(void){ linklist *head, *p1, *p2;n=0;p1=p2=(linklist *)malloc(sizeof(linklist));scanf(“%d”,&p1->data);head=null;while(p1->data!=0){ n=n+1;if(n==1) head=p1;else p2->next=p1;p2=p1;p1=(linklist *)malloc(sizeof(linklist));scanf(“%d”,&p1->data);}p2->next=null;return(head);}⑶单链表的插入算法int insert(linklist *head, int i,elemtype e) { linklist *p, *s;int j;p=head; j=0;while(p && j<i-1){ p=p->next;++j;}if(!p||j>i-1){ printf(“无法插入”);return 0;}s=(linklist *)malloc(sizeof(lnode));s->data=e;s->next=p->next;p->next=s;return 1;}⑷单链表的删除算法int deltree(linklist *head,int i,elemtype e){ linklist *p, *q;int j;lp=head; j=0;while(p->next && j<i-1){ p=p->next;++j;}if(!(p->next)||j>i-1){ printf(“无法删除”);return 0;}q=p->next;p->next=q->next;e=q->data;free(q);return 1;}三、实验内容1. /*函数link()的功能是将带头结点的单链表l2链接到l1的后面,程序中存在几处错误,请改正并调试运行*/#include "linklist.h"void link(linklist l1,linklist l2){linklist p,q;p=l1;while (p->next)p=q->next;q=l2;p->next=q;free(l2);}void main(){ linklist l1,l2;l1=creat2(); /*生成带头结点的单链表l1*/print(l1); /*输出单链表l1*/l2=creat2(); /*生成带头结点的单链表l2*/print(l2); /*输出单链表l2*/link(l1,l2); /*将单链表l2链接到l1的后面*/print(l1); /*输出单链表l1*/}2./* 编写一个函数perm,将带头结点单链表中的所有值为奇数的结点集中到链表的左边,值为偶数的结点集中到链表的右边*/#include "linklist.h"linklist perm(linklist head){linklist pre,p;pre=head;p=head->next;while (p && p->data%2==1){ pre= p ;p= p->next ;}while (p){ if (p->data%2==1){ pre->next=p->next;p->next=head->next;head->next=p;p=pre->next;}else{ pre=p;p=p->next;}}}/*主函数,请勿改动,请将perm中的函数补充完整*/int main(){ linklist head;head=creat2(); /*尾插法建立单链表*/print(head); /*输出单链表head*/perm(head);print(head);delList(head);return 0;}3.设计程序:/*建立一个带头结点的单链表,然后将该链表进行倒置。

《数据结构》实验3链表

二、源代码以及输入数据输出结果为:
三、源代码以及实验结果为
四、源代码以及实验结果为
五、源代码以及实验结果为
六、源代码以及实验结果为
七、附加题以及实验体会:
{
NODE *s; /*定义指向结点类型的指针*/
s=(NODE *)malloc(sizeof(NODE));
/*生成新结点*/
3
4
5
return 1;
}
/*删除P所指向的结点的后继结点*/
void DelLinkList(NODE *p)
{ NODE *q;
if(p->next!=0)
{ q=p->next; /* q指向p的后继结点*/
ch=getchar();
while(ch!='$')
{ p=(NODE *)malloc(sizeof(NODE));
p->data=ch;
1
2
ch=getchar();
}
return (head);
}
/*在链表的P指定结点之后插入值为x的结点*/
int InsLinkList(NODE *p, char x)
四、设有两个单链表A、B,其中元素递增有序,编写算法将A、B归并成一个按元素值递减(允许有相同值)有序的链表C,要求用A、B中的原结点形成,不能重新申请结点。
五、已知单链表表示的线性表中含有两类的数据元素(字母字符,数字字符)。试设计算法,按结点的值将单链表拆分成两个循环链表,分别只含有数字或字母。要求:利用原表中的结点空间作为这两个表的结点空间,头结点可另开辟空间。
附加题:如果换成循环单链表该如何实现?
即题目变成:已知单循环链表表示的线性表中含有两类的数据元素(字母字符,数字字符)。试设计算法,按结点的值将单链表拆分成两个循环链表,分别只含有数字或字母。

数据结构 实验一:实现单链表各种基本运算的算法

- 1 -实验一:实现单链表各种基本运算的算法一、 实验目的1、 掌握单链表存储结构的类型定义;2、 实现单链表各种基本运算的算法。

二、 实验环境1、 Windows 操作系统;2、 Visual C++ 6.0三、 实验内容实现单链表各种基本运算的算法。

四、 概要设计1.存储结构的类型定义:Typedef struct LNode{ElemType data;Struct LNode *next;}LinkList;2.单链表示意图:3.项目组成图:4.algo2_2.cpp 的程序文件包含的函数原型及功能:InitList(LinkList *&L) 初始化单链表LDestroyList(LinkList *&L) 释放单链表LListEmpty(LinkList *L)判断单链表L 是否为空表ListLength(LinkList *L)返回单链表L 的元素个数DispList(LinkList *L)输出单链表LGetElem(LinkList *L,int i,ElemType &e)获取单链表L 的第i 个元素LocateElem(LinkList *L,ElemType e)在单链表L 中查找元素eListInsert(LinkList *&L,int i,ElemType e)在单链表L 中的第i 个位置上插入元素e…… head a 1 a 2 a 3 a n ∧ListDelete(LinkList *&L,int i,ElemType &e)在单链表L中删除第i个元素5.exp2_2.cpp程序文件简介:InitList(LinkList *&L) 初始化单链表LDestroyList(LinkList *&L) 释放单链表LListEmpty(LinkList *L) 判断单链表L是否为空表ListLength(LinkList *L) 返回单链表L的元素个数DispList(LinkList *L) 输出单链表LGetElem(LinkList *L,int i,ElemType &e) 获取单链表L的第i个元素LocateElem(LinkList *L,ElemType e) 在单链表L中查找元素eListInsert(LinkList *&L,int i,ElemType e) 在单链表L中的第i个位置上插入元素e ListDelete(LinkList *&L,int i,ElemType &e) 在单链表L中删除第i个元素6.proj2-2的项目的模块结构:在文件algo2-2中,(1)定义单链表结构类型;(2)初始化单链表(3)定义释放单链表的函数(4)定义判断单链表是否为空的函数(5)定义返回单链表元素个数的函数(6)定义输出单链表的函数(7)定义获取第i个元素的函数(8)定义查找元素的函数(9)定义插入元素的函数(10)定义删除元素的函数在文件exp2-2中分别调用algo2-2中所定义的函数7.函数调用关系图:五、详细设计源代码清单见附录。

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

#include #include #include typedef int DataType; typedef struct Node {DataType data; struct Node *next; }LinkList; LinkList *creaTaiList() /*建立带头结点的单链表*/ {LinkList *L=(LinkList *)malloc(sizeof(LinkList)); LinkList *s,*r=L; int x; scanf("%d",&x); while(x!=-1) {s=(LinkList *)malloc(sizeof(LinkList)); s->data=x; r->next=s; r=s; scanf("%d",&x);} r->next=NULL; return L; } void visitElem(LinkList *L) /*遍历单链表*/ {LinkList *s;s=L; while (s->next) {s=s->next;printf("%d,",*s);} printf("\n"); } LinkList * getElem(LinkList *L,int i) /*按序号查找*/ {LinkList *p=L; int j=0; while(p&&j{p=p->next;j++;} if((!p||(j>i))) {printf("\n位置错,请重新选择操作!\n"); return NULL;} else return p; } int insertElem(LinkList *L,int i,int x) /*直接插入*/ {LinkList *p,*s; int j; p=L; j=0; while(p&&j{p=p->next;j=j+1; } if((!p)||(j>i-1)) {printf("error!\n");return 0;} else {s=(LinkList *)malloc(sizeof(LinkList)); s->data=x; s->next=p->next; p->next=s; return 1; }} int deleteElem(LinkList *L,int w,DataType *e) /*删除第i个结点*/ { LinkList *p,*q;int j; p=L;j=0; while ((p->next)&&(j{ p=p->next;j++; } if((!p->next)||(j>w-1)) {printf("error");return 0;} q=p->next; p->next=q->next; *e=q->data; free(q); return 1; } void longElem(LinkList *L) /*求表长*/ { LinkList *s; int a=0; s=L->next; while (s) {s=s->next;a=a+1;} printf("该单链表的长度为:%d\n",a); } void reverse (LinkList *L) /*逆置单链表*/ { LinkList *p,*q; p=L->next; L->next=NULL; while(p) {q=p; p=p->next; q->next=L->next; L->next=q; } } void insertyouxuElem(LinkList *L)/*元素插入到有序的单链表中*/ { LinkList *s,*q,*p; int x; q=L;p=L->next; printf("请输入你要插入的数:"); scanf("%d",&x); while (p&&p->data{q=p;p=p->next;} s=(LinkList *)malloc(sizeof(LinkList)); s->data=x; s->next=q->next; q->next=s; printf("插入成功!插入后的单链表为:"); } LinkList *uniona(LinkList *A,LinkList *B) /*合并两个表*/ {LinkList *C, *p, *q, *s; p=A->next; q=B->next; C=A; C->next=NULL; while(p&&q) {if(p->data<=q->data) {s=p; p=p->next; } else {s=q; q=q->next; } s->next=C->next; C->next=s; } if(!q) q=p; while(q) {s=q; q=q->next; s->next=C->next; C->next=s; }free(B); return C; } void menu() { //system("cls"); printf("**********************************\n"); printf("* 1.建立单链表 2.遍历单链表 *\n"); printf("* 3.按序号查找 4.插入 *\n"); printf("* 5.删除 6.求表长 *\n"); printf("* 7.逆置单链表 8.插入有序表 *\n"); printf("* 9.合并单链表 0.退出操作 *\n"); printf("**********************************\n"); //printf("请输入要进行的操作(0-9):\t"); } main() {LinkList *h,*o,*p,*R,*A,*B; int i,x; int q; int select; //DataType x; DataType *m; m=(DataType *)malloc(sizeof(DataType)); menu(); while(1) { //system("cls"); //menu(); printf("请输入要进行的操作(0-9):"); scanf("%d",&select); if(select==0)break; if(select>9||select<0) {printf("输入错误,请重新输入相应0-9整数:"); } switch(select) {case 1:printf("请输入元素:"); h=creaTaiList(); printf("建立的点链表为:"); visitElem(h); break; case 2:visitElem(h);break; case 3: printf("请输入要查找的序号:"); scanf("%d",&i); o=getElem(h,i); if(o) printf("%d\n",*o); break; case 4:printf("进入插入,请输入要插入的位置:"); scanf("%d",&i,&x); printf("请输入要插入的数字:"); scanf("%d",&x); q=insertElem(h,i,x); printf("更改后的点链表为:"); visitElem(h);break; case 5:printf("进入删除,请输入删除的位置:"); scanf("%d",&i); q=deleteElem(h,i,m); if(q==1) {printf("删除成功,且删除的元素为:%d\n",*m); printf("删除后的点链表为:"); visitElem(h);break;} else printf("error"); case 6:longElem(h);break; case 7:reverse (h);printf("逆置后的点链表为:"); visitElem(h);break; case 8:printf("建立一个有序的点链表,并将x插入其中:"); p=creaTaiList(); printf("建好的有序点链表为:"); visitElem(p); insertyouxuElem(p); visitElem(p);break; case 9:printf("分别建立A,B点链表\n"); printf("输入有序的A族元素:"); A=creaTaiList(); printf("输入有序的B族元素:"); B=creaTaiList(); printf("点链表A为:");visitElem(A); printf("点链表B为:");visitElem(B); R=uniona(A,B); printf("合并后的点链表为:"); visitElem(R);break; default :printf("输入错误,请重新输入!");continue; } } }

相关文档
最新文档