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

合集下载

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 选题背景 (1)2 方案与论证 (1)2。

1 链表的概念和作用 (1)2。

3 算法的设计思想 (2)2。

4 相关图例 (3)2.4.1 单链表的结点结构 (3)2.4。

2 算法流程图 (3)3 实验结果 (4)3.1 链表的建立 (4)3.2 单链表的插入 (4)3.3 单链表的输出 (5)3.4 查找元素 (5)3。

5 单链表的删除 (5)3。

6 显示链表中的元素个数(计数) (5)4 结果分析 (6)4。

1 单链表的结构 (6)4。

2 单链表的操作特点 (6)4。

2。

1 顺链操作技术 (6)4.2。

2 指针保留技术 (6)4。

3 链表处理中的相关技术 (6)5 设计体会及今后的改进意见 (6)参考文献 (8)附录代码: (8)1 选题背景陈火旺院士把计算机60多年的发展成就概括为五个“一”:开辟一个新时代-—--信息时代,形成一个新产业-—-—信息产业,产生一个新科学—---计算机科学与技术,开创一种新的科研方法-—--计算方法,开辟一种新文化---—计算机文化,这一概括深刻影响了计算机对社会发展所产生的广泛而深远的影响。

数据结构和算法是计算机求解问题过程的两大基石。

著名的计算机科学家P.Wegner指出,“在工业革命中其核心作用的是能量,而在计算机革命中其核心作用的是信息”.计算机科学就是“一种关于信息结构转换的科学”.信息结构(数据结构)是计算机科学研究的基本课题,数据结构又是算法研究的基础。

2 方案与论证2。

1 链表的概念和作用链表是一种链式存储结构,链表属于线性表,采用链式存储结构,也是常用的动态存储方法。

链表中的数据是以结点来表示的,每个结点的构成:元素(数据元素的映象) + 指针(指示后继元素存储位置),元素就是存储数据的存储单元,指针就是连接每个结点的地址数据。

以“结点的序列”表示线性表称作线性链表(单链表)单链表是链式存取的结构,为找第 i 个数据元素,必须先找到第 i-1 个数据元素。

什么是数据结构

什么是数据结构

什么是数据结构数据结构是计算机科学中非常重要的一个领域,它研究如何有效地存储、组织和管理数据,以便于计算机能够快速、高效地处理这些数据。

数据结构是算法的基础,也是软件开发中不可或缺的一部分。

本文将从两个方面来探讨数据结构的概念和应用。

第一点:数据结构的基本概念数据结构可以分为两大类:线性结构和非线性结构。

线性结构是指数据元素之间存在一对一的关系,例如数组、链表、栈和队列等。

非线性结构是指数据元素之间存在一对多或多对多的关系,例如树、图和哈希表等。

1.线性结构线性结构是最基本的数据结构,它的特点是数据元素之间存在一对一的关系。

线性结构主要包括以下几种:(1)数组:数组是一种线性表,它是一组有序的数据元素的集合。

数组的元素个数是固定的,可以通过索引来访问任何一个元素。

数组的特点是随机访问,插入和删除操作需要移动大量元素,因此效率较低。

(2)链表:链表是一种由节点组成的数据结构,每个节点包含数据域和指针域。

链表的特点是插入和删除操作只需要改变指针的指向,因此效率较高,但随机访问比较困难。

(3)栈:栈是一种后进先出(Last In First Out,LIFO)的数据结构。

栈可以通过压栈(push)和出栈(pop)操作来管理数据元素。

栈的特点是只能在表的一端进行操作,适用于函数调用、表达式求值等场景。

(4)队列:队列是一种先进先出(First In First Out,FIFO)的数据结构。

队列可以通过入队(enqueue)和出队(dequeue)操作来管理数据元素。

队列的特点是数据元素按照进入顺序排列,适用于任务调度、缓冲处理等场景。

2.非线性结构非线性结构的数据元素之间存在一对多或多对多的关系,它的特点是可以存在层次关系和分支结构。

非线性结构主要包括以下几种:(1)树:树是一种层次化的数据结构,它由节点组成,每个节点包含数据域和指针域。

树的特点是存在父子关系,适用于表示具有层次关系的数据,如文件系统、组织结构等。

系统数据结构设计

系统数据结构设计

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

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

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

二、概念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 ()函数实现。

数据结构与程序设计考研

数据结构与程序设计考研

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

ue 数据结构 设计模式

ue 数据结构 设计模式

ue 数据结构设计模式数据结构和设计模式是软件开发中非常重要的概念,它们在构建高效可靠的应用程序中扮演着重要角色。

在本篇文章中,我们将讨论数据结构和设计模式的相关内容,以帮助读者更好地理解和应用这两个概念。

数据结构是计算机存储、组织和管理数据的方式。

它是算法的基础,对于解决实际问题非常重要。

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

设计模式是软件设计中常见的解决问题的模式或思想。

它提供了一种可复用的方法来解决特定类型的问题。

常见的设计模式包括单例模式、工厂模式、观察者模式、适配器模式、装饰器模式等。

在实际应用中,数据结构和设计模式常常会结合使用,以提高应用程序的效率和可扩展性。

以下是一些常见的数据结构和设计模式的相关内容,供读者参考。

一、数据结构的设计与应用1. 数组(Array)数组是最基本的数据结构之一,它存储一组有序的元素,并可以通过索引访问元素。

数组的优点是访问速度快,缺点是插入和删除元素耗时。

因此,数组适合应用在需要频繁访问元素的场景。

2. 链表(Linked List)链表是由节点组成的数据结构,每个节点包含数据和指向下一个节点的指针。

链表的优点是插入和删除元素易于操作,缺点是访问速度慢。

因此,链表适合应用在需要频繁插入和删除元素的场景。

3. 栈(Stack)与队列(Queue)栈和队列是两种特殊的数据结构。

栈是一种先进后出(FILO)的数据结构,用于实现一些特定的操作,如函数调用、表达式求值等。

队列是一种先进先出(FIFO)的数据结构,一般用于实现消息队列、任务调度等场景。

4. 树(Tree)与图(Graph)树和图是一些复杂的数据结构。

树是由节点组成的层级结构,每个节点可以有多个子节点。

树的应用非常广泛,如二叉查找树、AVL树、B树、堆等。

图是由节点和边组成的数据结构,用于表示对象之间的关系。

图的应用包括广度优先搜索(BFS)、深度优先搜索(DFS)等。

二、设计模式的应用与实例1. 单例模式(Singleton Pattern)单例模式用于确保某个类只有一个实例,并提供一个全局访问点。

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

.2014-2015学年第一学期学号1208210146《数据结构》课程设计报告题目:链表结构的相关函数库的设计专业:计算机科学与技术班级: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);}}。

相关文档
最新文档