数据结构链表结构的相关函数库的设计

合集下载

c链表库函数

c链表库函数

c链表库函数全文共四篇示例,供读者参考第一篇示例:C语言是一种广泛应用于系统编程的高级语言,而链表(Linked List)是C语言中常用的数据结构之一。

在C语言中,链表并不像数组一样有现成的库函数可以直接调用,需要通过自定义函数来实现链表的操作。

为了方便使用链表,不少开发者封装了链表操作的库函数,提供了一些常用的链表操作接口,以供开发者使用。

本文将介绍一些常见的C链表库函数及其用法。

一、链表的概念及基本操作链表是一种线性表的存储结构,由若干节点(Node)组成,每个节点包含数据域和指针域。

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

链表的最后一个节点指针域为空(NULL),表示链表的末尾。

常见的链表操作包括创建链表、插入节点、删除节点、遍历链表、查找节点等。

下面我们来看看C语言中常用的链表库函数。

二、常见的C链表库函数1. 创建链表在C语言中,创建链表的函数通常包括初始化链表头节点和链表节点的操作。

```#include <stdio.h>#include <stdlib.h>//定义链表节点typedef struct node {int data;struct node* next;} Node;2. 插入节点插入节点是链表操作中的重要操作,可以在链表的任意位置插入新节点。

常见的插入方式包括头部插入和尾部插入。

```//头部插入节点void insertNodeAtHead(Node* head, int data) {Node* newNode = (Node*)malloc(sizeof(Node));newNode->data = data;newNode->next = head->next;head->next = newNode;}以上是常见的C链表库函数,这些函数可以帮助我们更方便地操作链表。

在实际开发中,可以根据需要自定义更多的链表操作函数,以满足具体的需求。

系统数据结构设计

系统数据结构设计

系统数据结构设计一、引言在计算机科学和软件工程领域,系统数据结构设计是指为了有效地存储和组织数据而设计的一种方法。

一个好的数据结构设计可以提高系统的性能、可靠性和可维护性。

本文将详细介绍系统数据结构设计的相关概念、原则和步骤,并以一个示例来说明如何进行系统数据结构设计。

二、概念1. 数据结构:数据结构是指数据元素之间的关系和操作的集合。

常见的数据结构包括数组、链表、栈、队列、树、图等。

2. 系统数据结构:系统数据结构是指在一个系统中用于存储和组织数据的特定数据结构。

不同的系统可能有不同的数据结构设计。

三、原则1. 效率:系统数据结构应该能够高效地完成各种操作,如插入、删除、查找等。

选择合适的数据结构可以提高系统的效率。

2. 可扩展性:系统数据结构应该具有良好的扩展性,能够适应系统的需求变化。

例如,当系统需要处理更多的数据时,数据结构应该能够容纳更多的数据。

3. 可靠性:系统数据结构应该具有良好的容错性,能够处理异常情况和错误输入。

例如,当系统遇到无效的数据时,数据结构应该能够正确处理并给出合理的错误提示。

四、步骤1. 分析需求:首先需要明确系统的需求,包括数据的类型、数量、访问方式等。

根据需求分析,确定系统数据结构的基本要求。

2. 选择数据结构:根据需求和基本要求,选择合适的数据结构。

例如,如果系统需要高效地进行查找操作,可以选择二叉搜索树或哈希表作为数据结构。

3. 设计数据结构:根据选择的数据结构,设计系统数据结构的具体实现。

包括定义数据结构的属性和操作,并确定数据结构之间的关系。

4. 实现数据结构:根据设计,使用编程语言实现系统数据结构。

需要注意编码规范和错误处理。

5. 测试和优化:对实现的数据结构进行测试,包括功能测试、性能测试和边界测试。

根据测试结果进行优化,提高系统的性能和可靠性。

五、示例假设我们要设计一个学生管理系统,需要存储学生的姓名、年龄和成绩。

根据需求分析和基本要求,我们选择使用链表作为数据结构。

数据结构实验报告

数据结构实验报告

《数据结构》实验报告姓名:学号:班级:学院:实验一单链表实验(一)实验目的1.理解线性表的链式存储结构。

2.熟练掌握动态链表结构及有关算法的设计。

3.根据具体问题的需要,设计出合理的表示数据的链表结构,并设计相关算法。

(二)实验任务编写算法实现下列问题的求解1.求链表中第i个结点的指针(函数),若不存在,则返回NULL。

2.在第i个结点前插入值为x的结点。

3.删除链表中第i个元素结点。

4.在一个递增有序的链表L中插入一个值为x的元素,并保持其递增有序特性。

5.将单链表L中的奇数项和偶数项结点分解开,并分别连成一个带头结点的单链表,然后再将这两个新链表同时输出在屏幕上,并保留原链表的显示结果,以便对照求解结果。

6.求两个递增有序链表L1和L2中的公共元素,并以同样方式连接成链表L3。

(三)主要仪器设备PC机,Windows操作平台,Visual C++(四)实验分析顺序表操作:定义一个顺序表类,该类包括顺序表的存储空间、存储容量和长度,以及构造、插入、删除、遍历等操作的方法(五)源程序头文件文件名:linklist.h#include<iostream>using namespace std;struct node{int data;node *next;};class list{public:list();int length()const{return count; //求链表长度}~list();void create(); //链表构建,以0为结束标志void output(); //链表输出int get_element(const int i)const; //按序号取元素node *locate(const int x) const; //搜索对应元素int insert(const int i,const int x); //插入对应元素int delete_element(const int i); //删除对应元素node *get_head(){return head; //读取头指针}void insert2(const int x);friend void SplitList(list L1, list&L2, list &L3);friend void get_public(list L1, list L2, list &L3);private:int count;node *head;};list::list(){head=new node;head->next=NULL;count=0;}void list::create() //链表构建,以0为结束标志{int x;cout<<"请输入当前链表,以0为结束符。

数据结构课程设计实验1_城市链表

数据结构课程设计实验1_城市链表

数据结构课程设计实验报告实验一链表部分选题为:2.4.3—城市链表1、需求分析(1)创建一个带有头结点的单链表。

(2)结点中应包含城市名和城市的位置坐标。

(3)对城市链表能够利用城市名和位置坐标进行有关查找、插入、删除、更新等操作。

(4)能够对每次操作后的链表动态显示。

2、概要设计为了实现以上功能,可以从以下3个方面着手设计。

(1)主界面设计为了实现城市链表相关操作功能的管理,设计一个含有多个菜单项的主控菜单子程序以系统的各项子功能,方便用户使用本程序。

本系统主控菜单运行界面如下所示。

(2)存储结构设计本系统主要采用链表结构类型来表示存储在“城市链表”中的信息。

其中链表结点由4个分量组成:城市名name、城市的横坐标posx、城市的纵坐标posy、指向下一个结点的指针next。

(3)系统功能设计本程序设计了9个功能子菜单,其描述如下:①建立城市链表。

由函数creatLink()实现。

该功能实现城市结点的输入以及连接。

②插入链表记录。

由函数insert()实现。

该功能实现按坐标由小到大的顺序将结点插入到链表中。

③查询链表记录。

由searchName()函数和searchPos()函数实现。

其中searchName()实现按照城市名查询的操作,searchPos()实现按照城市坐标查询的操作。

④删除链表记录。

由delName()函数和delPos()函数实现。

其中delName()函数实现按照城市名删除的操作,delPos()函数实现按照城市坐标删除的操作。

⑤ 显示链表记录。

由printList ()函数实现。

该功能实现格式化的链表输出操作,可以显示修改后的链表状态。

⑥ 更新链表信息。

由update ()函数实现。

该功能实现按照城市名更新城市的坐标信息。

⑦ 返回城市坐标。

由getPos ()函数实现。

该功能实现给定一个已存储的城市,返回其坐标信息的操作。

⑧ 查看与坐标P 距离小于等于D 的城市。

由getCity ()函数实现。

c语言链表的创建方法

c语言链表的创建方法

c语言链表的创建方法在C语言中,链表是一种常见的数据结构,它由一系列节点组成,每个节点包含一个值和一个指向下一个节点的指针。

链表可以动态地添加或删除节点,因此在许多应用程序中被广泛使用。

链表的创建方法大致可以分为以下几个步骤:1. 定义一个节点结构体链表的节点通常包含一个值和一个指针,指针指向下一个节点。

因此,我们需要定义一个结构体来表示节点:```struct Node {int data;struct Node* next;};```其中,`data`表示节点的值,`next`表示指向下一个节点的指针。

2. 创建第一个节点创建第一个节点时,我们需要先分配一段内存,然后将节点的值和指针都赋值为NULL:```struct Node* head = NULL;head = (struct Node*)malloc(sizeof(struct Node));head->data = 1;head->next = NULL;```这里我们使用了`malloc`函数来分配内存,并将返回的指针强制转换为`struct Node*`类型,然后将节点的值和指针赋值为1和NULL。

3. 添加新节点添加新节点时,我们需要先找到链表的末尾,然后在末尾添加新节点:```struct Node* newNode = NULL;newNode = (struct Node*)malloc(sizeof(struct Node));newNode->data = 2;newNode->next = NULL;struct Node* current = head;while (current->next != NULL) {current = current->next;}current->next = newNode;```这里我们定义了一个新节点`newNode`,然后遍历链表找到末尾节点,将末尾节点的指针指向新节点。

数据结构与程序设计考研

数据结构与程序设计考研

数据结构与程序设计考研数据结构与程序设计是计算机科学与技术领域的核心课程之一,也是许多高校计算机专业考研的重点内容。

掌握数据结构与程序设计的相关知识,对于提高编程能力、理解算法原理以及解决实际问题具有重要意义。

一、数据结构概述数据结构是计算机存储、组织数据的方式。

它不仅影响数据的存储效率,也直接影响到算法的执行效率。

常见的数据结构包括数组、链表、栈、队列、树、图等。

- 数组:一种线性数据结构,可以存储具有相同类型的元素。

- 链表:由一系列节点组成,每个节点包含数据部分和指向下一个节点的指针。

- 栈:一种后进先出(LIFO)的数据结构,只能在一端进行数据的插入和删除。

- 队列:一种先进先出(FIFO)的数据结构,数据从一端进入,从另一端离开。

- 树:由节点组成的层次结构,每个节点有零个或多个子节点,但只有一个父节点。

- 图:由顶点(或称为节点)和边组成,可以表示复杂的关系。

二、程序设计基础程序设计是使用编程语言来解决特定问题的过程。

程序设计的基础包括:- 算法:解决问题的步骤和方法,是程序设计的核心。

- 控制结构:包括顺序结构、选择结构和循环结构,是程序设计的基本逻辑。

- 函数:封装一段代码,可以重复使用,提高代码的可读性和重用性。

- 面向对象编程:一种编程范式,强调使用“对象”来设计和构建程序。

三、数据结构与算法的关系数据结构与算法是相辅相成的。

数据结构提供了数据存储的方式,而算法则是在这些数据上执行操作的方法。

例如:- 排序算法:如快速排序、归并排序等,依赖于数据的存储方式。

- 搜索算法:如二分搜索、深度优先搜索(DFS)和广度优先搜索(BFS),它们的效率与数据结构紧密相关。

四、程序设计中的常见问题在程序设计过程中,常见的问题包括:- 时间复杂度:算法执行所需时间的度量,通常用大O表示法。

- 空间复杂度:算法执行过程中所需的存储空间。

- 递归与迭代:递归是一种调用自身的函数,而迭代是重复执行的循环结构。

系统数据结构设计

系统数据结构设计

系统数据结构设计一、概述系统数据结构设计是指在软件开发过程中,根据系统需求和功能设计,确定系统中各个数据对象之间的关系和组织方式。

良好的数据结构设计可以提高系统的性能、可维护性和可扩展性,同时也能提高系统的安全性和稳定性。

本文将详细介绍系统数据结构设计的相关内容。

二、数据结构设计原则1. 高效性:数据结构设计应考虑系统的性能需求,选择适当的数据结构和算法,以提高系统的运行效率。

2. 可维护性:数据结构设计应具有良好的可读性和可维护性,方便后续的系统维护和修改。

3. 可扩展性:数据结构设计应具备良好的扩展性,能够适应系统功能的增加和变化。

4. 安全性:数据结构设计应考虑系统的安全需求,保护数据的完整性和机密性。

三、常用的数据结构1. 数组:数组是一种线性数据结构,可以按照下标访问元素。

适用于元素个数固定且访问频繁的情况。

2. 链表:链表是一种动态数据结构,每个节点包含数据和指向下一个节点的指针。

适用于元素个数不固定且插入、删除频繁的情况。

3. 栈:栈是一种后进先出(LIFO)的数据结构,只能在栈顶进行插入和删除操作。

适用于需要保存临时数据的情况,如函数调用、表达式求值等。

4. 队列:队列是一种先进先出(FIFO)的数据结构,只能在队尾插入数据,在队首删除数据。

适用于需要按照顺序处理数据的情况,如任务调度、消息队列等。

5. 树:树是一种非线性数据结构,由节点和边组成。

常见的树结构有二叉树、平衡二叉树、红黑树等。

适用于需要组织和管理层次关系的数据。

6. 图:图是一种非线性数据结构,由节点和边组成。

适用于描述复杂关系和网络拓扑的数据。

四、系统数据结构设计步骤1. 分析需求:根据系统功能需求,分析数据对象之间的关系和属性,确定系统数据结构设计的目标。

2. 设计数据模型:根据需求分析的结果,设计系统的数据模型,包括实体、关系和属性等。

3. 选择数据结构:根据数据模型的特点和系统需求,选择合适的数据结构来组织和管理数据。

数据结构—链表

数据结构—链表

数据结构—链表链表⽬录⼀、概述1.链表是什么链表数⼀种线性数据结构。

它是动态地进⾏储存分配的⼀种结构。

什么是线性结构,什么是⾮线性结构?线性结构是⼀个有序数据元素的集合。

常⽤的线性结构有:线性表,栈,队列,双队列,数组,串。

⾮线性结构,是⼀个结点元素可能有多个直接前趋和多个直接后继。

常见的⾮线性结构有:⼆维数组,多维数组,⼴义表,树(⼆叉树等)。

2.链表的基本结构链表由⼀系列节点组成的集合,节点(Node)由数据域(date)和指针域(next)组成。

date负责储存数据,next储存其直接后续的地址3.链表的分类单链表(特点:连接⽅向都是单向的,对链表的访问要通过顺序读取从头部开始)双链表循环链表单向循环链表双向循环链表4.链表和数组的⽐较数组:优点:查询快(地址是连续的)缺点:1.增删慢,消耗CPU内存链表就是⼀种可以⽤多少空间就申请多少空间,并且提⾼增删速度的线性数据结构,但是它地址不是连续的查询慢。

⼆、单链表[1. 认识单链表](#1. 认识单链表)1. 认识单链表(1)头结点:第0 个节点(虚拟出来的)称为头结点(head),它没有数据,存放着第⼀个节点的⾸地址(2)⾸节点:第⼀个节点称为⾸节点,它存放着第⼀个有效的数据(3)中间节点:⾸节点和接下来的每⼀个节点都是同⼀种结构类型:由数据域(date)和指针域(next)组成数据域(date)存放着实际的数据,如学号(id)、姓名(name)、性别(sex)、年龄(age)、成绩(score)等指针域(next)存放着下⼀个节点的⾸地址(4)尾节点:最后⼀个节点称为尾节点,它存放着最后⼀个有效的数据(5)头指针:指向头结点的指针(6)尾指针:指向尾节点的指针(7)单链表节点的定义public static class Node {//Object类对象可以接收⼀切数据类型解决了数据统⼀问题public Object date; //每个节点的数据Node next; //每个节点指向下⼀结点的连接public Node(Object date) {this.date = date;}}2.引⼈头结点的作⽤1. 概念头结点:虚拟出来的⼀个节点,不保存数据。

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

2014-2015学年第一学期《数据结构》课程设计报告题目:链表结构的相关函数库的设计专业:计算机科学与技术班级:12级计科(3)班姓名:指导教师:成绩:计算机与信息工程系2014 年12月15 日目录1 问题分析和任务定义 (1)1.1 任务定义 (1)1.2 面临的问题,进行分析解决,模块之间的联系。

(1)2概要设计和数据结构的选择 (2)2.1 数据结构的选择 (2)2.2 结构图 (2)2.3 函数实现的具体算法举例 (3)3 课程设计思路 (6)3.1 设计函数库 (6)4 测试结果及其分析 (7)4.1 初始化 (7)4.2 逆序输入元素 (8)4.3 单链表的长度 (8)4.4 遍历输出单链表 (8)4.5检索查找 (9)4.6输入插入元素的值和位置 (9)4.7删除元素 (10)5 小结 (10)参考文献 (10)附录:程序源代码 (11)1 问题分析和任务定义1.1任务定义设计出链表结构的相关函数库,以便在程序设计中调用。

进行链表中元素的输入、查找、插入、删除等操作的课程设计。

要求:(1)所设计的数据结构应尽可能节省存储空间。

(2)程序的运行时间应尽可能少。

从题目看出所设计的程序应能达到的功能,设计好的程序要满足以上两点。

在数据输入方面可以根据链表的特点即存储空间的连续,从创建链表到插入,删除,查找元素以及输出一系列的步骤,连贯而下。

算法的实现依赖于所采用的存储结构,所以选择什么样的存储方式在课程设计中尤为重要,这也是本程序好坏的一个评定。

1.2 面临的问题,进行分析解决,模块之间的联系。

(1)在内存中开辟一块连续的内存空间,进行分析解决(2)利用物理位置的相邻来表示变量,达到预期效果,很好的完成任务。

查找元素以及输出一系列的步骤,连贯而下。

(3)使用链表的数据结构来满足尽可能节省存储空间的要求,达到要求,从创建链表到插入,删除,查找元素以及输出一系列的步骤,连贯而下。

(4)输出界面设计与各个模块的联系,设计出链表结构的相关函数库,以便在程序设计中调用,进行链表中元素的分析。

2概要设计和数据结构的选择2.1 数据结构的选择本程序选择的数据结构是线性表中的链式结构(单链表),原因如下:单链表的定义:(1)单链表是线性表的链接存储表示。

其各个数据元素可以相继存储,也可以不相继存储,不过它为每个数据元素附加了一个链接指针,并形成的一个结点。

(2)单链表的每一个结点分为两个部分:data和link。

(3)链表的第一个结点的地址可以通过链表的头指针first找到,其他结点的地址则在前趋结点的link域中,链表的最后一个结点没有后继,在结点的link 域中放一个空指针NULL。

(4)头指针first为空的单链表为空表,该链表一个结点也没有,相对地,头指针first不为空且首元结点存在的单链表为非空表,表中至少有一个结点。

2.2 结构图图 1 结构图2.3 函数实现的具体算法举例(1)插入函数/* 在带头结点的单链线性表L中第i个位置之前插入元素e */int Insert_List(LinkList L,int i,ElemType e){int j=0;LinkList p=L,s;while(p&&j<i-1){p=p->next;j++;}if(!p||j>i-1)return ERROR;s=(LinkList)malloc(sizeof(struct LNode));s->data=e;s->next=p->next;p->next=s;return OK;}(2)删除函数int Delete_List(LinkList L,int i,ElemType *e) /* 在带头结点的单链线性表L中,删除第i个元素,并由e返回其值 */{int j=0;LinkList p=L,q;while(p->next&&j<i-1)p=p->next;j++;}if(!p->next||j>i-1)return 0;q=p->next;p->next=q->next;*e=q->data;free(q);return 1;}(3)查找元素/* 当按位置查找元素,第i个元素存在时,其值赋给e并返回1,否则返回0 */ int GetElem_List(LinkList L,int i,ElemType *e){int j=0;LinkList p=L;while(p&&j<i){p=p->next;j++;}if(!p||j>i){ printf("链表不存在或参数i错");return 0;}*e=p->data; /* 取第i个元素 */return 1;(5)显示单链表int Disp_List(LinkList L)/*显示单链表*/ {LinkList p=L->next;if(p==Null) printf("单链表为空表"); else{printf("输出单链表:\n");while(p!=Null){printf("%d",p->data);printf("->");p=p->next;}}printf("\n");return 1;}(6)求单链表表长int Length_List(LinkList L){int i=0;LinkList p=L->next;while(p){i++;p=p->next;}return i;3 课程设计思路一般的说,其过程如下:A. 分析链表特点B. 分析链表功能以及操作C. 设计函数库D. 制定调试计划:初步调试计划E. 编写主函数,方便后面的测试F. 制定完整的程序测试计划G. 书写文档,系统说明H. 复查和审核:从技术的角度审查,从管理的角度审查3.1 设计函数库设计函数库不能随心所欲,想编写什么函数就编写什么函数,而是要根据分析链表所得结果,从分析结果入手,由分析我们知道链表可以进行的操作有:输入、输出、插入一个元素、删除一个元素、查找一个元素、取出一个元素。

根据这些操作分别写出函数:int Insert_List(); /*插入元素*/int Delete_List(); /*删除元素*/int GetElem_List(); /*查找元素*/int Disp_List(); /*显示元素*/int Length_List(); /*求表长*/4 测试结果及其分析4.1 初始化图2 初始化4.2 逆序输入元素图3 逆序输入元素4.3 单链表的长度图4 计算长度4.4 遍历输出单链表图 5遍历4.5检索查找图 6查找4.6输入插入元素的值和位置图 7插入4.7删除元素图 8 插入5 小结通过这次课设,我学会了如何把数据结构的知识应用到实践当中,同时也进一步加深了对c/c++语言语法的应用,以及深刻的掌握了数据结构和c/c++语言的结合运用。

在编程过程中,遇到了许多问题,在一次次的运行错误后,问题被一步步改正,也从中学到了许多知识。

虽然我的程序还不够完善,还需加以改进以实现更多的功能,但是我会尽我最大的努力去完成它,我相信我会努力去把程序做的更加完美。

参考文献[1]王昆仑,李红等编著. 数据结构与算法. 北京:中国铁道出版社,2007. [2]苏仕华等编著. 数据结构课程设计. 北京:机械工业出版社 ,2005. [3]苏仕华编著. 数据结构与算法解析.合肥:中国科学技术大学出版社,2004. [4]郭嵩山等著国际大学生程序设计竞赛例题解北京:电子工业出版社,2008.附录:程序源代码#include<stdlib.h>#include<stdio.h>#define TRUE 1#define FALSE 0#define OK 1#define ERROR 0#define Null 0typedef int ElemType;typedef struct LNode{ElemType data;struct LNode *next;}LNode ,*LinkList;/*初始化单链表,即产生一个带头结点的空表,创建成功则返回空表的头指针*/ LinkList Init_List(void){LinkList L;L=(LinkList) malloc(sizeof(LNode));if(L)L->next=NULL; //产生空表,头结点的next域为空return L;}/*按逆序产生一个长度为n链表,参数为初始化的空链表,及线性表长度n*/ /*每个元素依次插入在头结点后*/int Create_List(LinkList L,int n){int i;LinkList s; /*s变量用于保存新结点地址*/printf("生成有%d个元素的线性表:\n",n);for(i=n;i>0;i--){ printf("请输入线性表中第 %d 个元素:\n",i); /*逆序输入元素*/ s=(LinkList)malloc(sizeof(LNode));if(!s){printf("创建结点不成功\n");return 0;}scanf("%d",&s->data);s->next=L->next;L->next=s;}return 1;}/* 求单链表表长,返回L中数据元素个数 */int Length_List(LinkList L){int i=0;LinkList p=L->next;while(p){i++;p=p->next;}return i;}/* 当按位置查找元素,第i个元素存在时,其值赋给e并返回1,否则返回0 */ int GetElem_List(LinkList L,int i,ElemType *e){int j=0;LinkList p=L;while(p&&j<i){p=p->next;j++;}if(!p||j>i){ printf("链表不存在或参数i错");return 0;}*e=p->data; /* 取第i个元素 */return 1;}/* 按元素查找,查找链表中是否存在值为e的元素,存在,则返回L中第一个e元素的位序,若不存在,则返回值为0 */int Locate_List(LinkList L,ElemType e){int i=0;LinkList p=L;while(p&&p->data!=e){ p=p->next;i++;}if(p)return i;elsereturn 0;}/* 在带头结点的单链线性表L中第i个位置之前插入元素e */int Insert_List(LinkList L,int i,ElemType e){int j=0;LinkList p=L,s;while(p&&j<i-1){p=p->next;j++;}if(!p||j>i-1)return ERROR;s=(LinkList)malloc(sizeof(struct LNode));s->data=e;s->next=p->next;p->next=s;return OK;}int Delete_List(LinkList L,int i,ElemType *e) /* 在带头结点的单链线性表L中,删除第i个元素,并由e返回其值 */{int j=0;LinkList p=L,q;while(p->next&&j<i-1){p=p->next;j++;}if(!p->next||j>i-1)return 0;q=p->next;p->next=q->next;*e=q->data;free(q);return 1;}int Disp_List(LinkList L)/*显示单链表*/ {LinkList p=L->next;if(p==Null) printf("单链表为空表");else{printf("输出单链表:\n");while(p!=Null){printf("%d",p->data);printf("->");p=p->next;}}printf("\n");return 1;}/*显示选择提示信息函数*/void ShowSelect(){ printf("\n请选择要执行的操作:\n");printf("-------------------------\n");printf(" 1----初始化\n");printf(" 2----逆序输入元素\n");printf(" 3----求单链表长度\n");printf(" 4----遍历输出单链表\n");printf(" 5----在单链表中检索查找\n");printf(" 6----向单链表中插入元素\n");printf(" 7----从单链表中删除元素\n");printf(" 0---- 退出\n");printf("-------------------------\n");printf("please input number 0~~7 \n\n");}int main(void){LinkList PL=NULL;int i,x,flag;int len; /*表示单链表长*/int select; /*select变量表示用户的选择项*/ShowSelect();scanf("%d",&select);while(select!=0){switch(select){case 1: PL=Init_List(); break;case 2: printf("请输入线性表中元素个数:\n");scanf("%d",&len);Create_List(PL,len);break;case 3: len=Length_List(PL); printf("单链表表长为%d\n",len);break; case 4: Disp_List(PL);break;case 5: printf("\n请输入你想查找的数据:");scanf("%d",&x);i= Locate_List(PL, x);if(flag)printf("该元素在顺序表中的位置是:%d\n",i) ;elseprintf("该元素在顺序表中不存在");break;case 6: printf("请输入要插入的元素的值和位置,用空格分隔:\n"); scanf("%d %d",&x,&i);flag=Insert_List(PL,i,x);if(flag) printf("插入操作成功");break;case 7: printf("请输入要删除的元素的位置:\n");scanf("%d",&i);flag= Delete_List(PL,i,&x);if(flag) printf("删除操作成功");break;}ShowSelect();scanf("%d",&select);}}。

相关文档
最新文档