`
XiangdongLee
  • 浏览: 90775 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

【线性表】(List)

阅读更多
本文围绕以下三个部分展开:

一、线性表(List)
二、顺序存储结构
三、链式存储结构






一、线性表(List)

        1. 概念

        线性表:0个或多个数据元素的有限序列。(像线一样性质的表)

            线性表的每个数据元素的类型都是相同的。

            A. 是一个序列。(元素之间是有顺序的,若元素存在多个,则第一个元素无前驱,最后一个元素无后继,其他每个元素都有且只有一个前驱和后继。)

            B. 元素个数是有限的。



            类比:幼儿园小朋友按次序排队。


        2. 线性表的抽象数据类型

        (1)基本操作:



        抽象数据类型定义如下:




        (2)复杂的个性化操作

        例题:union操作(实现两个线性表集合A和B的并集操作)

        思想:把存在在集合B中但不存在在A中的数据元素插入到A中即可。即:循环集合B中的每个元素,判断当前元素是否存在A中。若不存在,则插入到A中即可。





二、顺序存储结构

        1. 顺序存储

        指用一段地址连续的存储单元依次存储线性表的数据元素。




        2. 顺序存储方式

        在内存中找了块地儿,通过占位符的形式,把一定内存空间给占了,然后把相同数据类型的数据元素依次存放在这块空地中。

        使用一维数组来实现顺序存储结构。即:把第一个数据元素存到数组下标为0的位置中,接着把线性表相邻的元素存储在数组中相邻的位置。


        3. 顺序存储结构代码和三个属性






        4. 地址计算方法

        存储器中每个存储单元都有自己的编号,称为地址。

        (1)数据元素的序号和存放它的数组下标之间的对应关系:



        (2)假设一个数据元素占c个存储单元,则第i+1个数据元素的存储位置和第i个数据元素的存储位置的关系:



        第i个数据元素的存储位置和第1个数据元素的存储位置的关系:





        (3)随机存取结构:可以随时算出线性表中任意位置的地址,存取时间复杂度均为O(1),具有这样特点的存取结构称为随机存取结构。


        5. 获得元素的操作(GetElem):将线性表L中第i个位置元素值返回。





        6. 插入某个数据元素








        7. 删除某个数据元素









        8. 优缺点





三、链式存储结构



        1. 特点:

        用一组任意的存储单元存储线性表的数据元素。这组存储单元可以连续,也可以不连续。意味着,这些数据元素可以存放在内存中未被占用的任意位置。


        2. 数据域、指针域、指针/链、结点






        3. 头结点、头指针

        (1)头指针:链表中第一个结点的存储位置。

        链表最后一个结点的指针为空(NULL/"^")

        (2)头结点:为了更方便地对链表进行操作,在单链表的第一个结点前附设的一个结点。

        数据域可以不存储任何信息,也可以存储如线性表长度等附加信息。

        指针域存储指向第一个结点的指针。



        (3)二者的异同




        4. 分类

        链式存储结构又有不同形式,分为:单链表、静态链表、循环链表和双向链表。






整理时重点参考:《大话数据结构》程杰著
0
1
分享到:
评论

相关推荐

    线性表list_array的源代码(c语言)

    #ifndef __LIST_H__ #define __LIST_H__ struct list; struct list *list_init(); void list_free(struct list *list); int list_isempty(struct list *list); void list_clear(struct list *list); int list_...

    数据结构线性表的基本操作

    该程序的功能是实现单链表的定义和操作。该程序包括单链表结构类型以及对单链表操作的具体的函数定义和主函数。其中,程序中的单链表(带头结点)结点为结构类型,结点值为整型。单链表操作的选择以菜单形式出现,...

    数据结构实验-实验一线性数据结构的实现与应用

    基于线性表 List1、线性表 List2 实现线性表的应用:运动会信息管理,测试和调试程序。 按要求撰写实验报告、录制程序运行以及讲解程序的视频。报告中要包含算法性能的讨论以及根据实现效率 在问题的多种解决方案中...

    C语言实现的顺序线性表

    在计算机科学中,数据结构是组织和管理大量数据的关键元素,而线性表是一种非常基础且重要的数据结构。本篇文章将深入探讨如何使用C语言来实现顺序线性表,包括其基本操作,如创建、插入数据、获取数据、删除数据、...

    数据结构——线性表类模板

    线性表是计算机科学中一种基础且重要的数据结构,它是由n(n≥0)个相同类型元素构成的有限序列。在C++编程语言中,类模板被广泛用于实现抽象数据类型,它允许我们创建通用的数据结构,适用于多种数据类型。本主题将...

    c语言数据结构实现线性表

    线性表是数据结构中最基础且重要的一种结构,它是由n(n≥0)个相同类型元素构成的有限序列。在C语言中实现线性表,通常会涉及到数组或链表这两种方式。下面我们将深入探讨如何用C语言来实现线性表,并结合描述和...

    线性表(c语言代码)

    `list`是一个大小为`MAXLEN + 1`的整型数组,用于存储线性表中的元素。这里`MAXLEN`被定义为1000,意味着线性表的最大容量为1000个元素。 ##### 2. 创建线性表 ```c int m; // 代表数组中数的位置 int i = 1; // ...

    数据结构线性表作业

    数据结构线性表作业 在本资源中,我们将深入探讨数据结构线性表的作业,涵盖了线性表的定义、特点、操作和应用。同时,我们还会解释线性表的频度、时间复杂度和空间复杂度等概念,并通过具体的代码示例和算法来实现...

    数据结构的线性表设计程序

    ① 初始化线性表void InitList(List *L,int ms) ② 向顺序表指定位置插入元素void InsertList(List *L,int item, int rc) ③ 删除指定元素值的顺序表记录void DeletList1(List *L, int item) ④ 删除指定位置的...

    线性表的顺序存储结构

    - `MergeList(List *La, List *Lb, List *Lc)`:合并两个非递减线性表,生成新的非递减线性表。 - `UnionList(List *La, List *Lb)`:将Lb中不存在于La的元素插入到La的末尾。 - `PrintList(List L)`:打印线性表的...

    C++线性表合并,数据结构作业

    首先,我们需要创建一个表示线性表的类,例如名为`LinearList`。这个类至少包含两个成员:一个用于存储元素的`std::vector`,以及一个表示当前元素数量的计数器。类的构造函数可以接受初始大小,而默认构造函数可以...

    线性表基本操作函数定义

    构造线性表 `CreateList_Sq` 构造线性表是指根据用户输入创建一个线性表的过程。这里没有给出具体的实现细节,通常会通过循环读取用户输入的值来填充线性表。 ```c Status CreateList_Sq(SqList& L) { // 假设...

    数据结构实验报告-线性表-两个有序线性表的归并算法

    具体来说,实验要求学生通过键盘输入数据来建立两个有序线性表,并最终将这两个有序线性表合并成一个新的有序线性表。 #### 实验内容与要求详解 1. **线性表的构建**: - 实验首先要求从键盘输入数据,构建两个...

    线性表c代码实现

    线性表是一种基础且重要的数据结构,它是由n(n>=0)个相同类型元素构成的有限序列。在计算机科学中,线性表通常被用来组织和管理数据,便于进行各种操作,如查找、插入和删除。在这个"线性表c代码实现"中,我们将会...

    线性表的基本操作(详细程序例子)

    例如,sizeList函数可以用来获取线性表的大小: int sizeList(struct List *L) 4. 判断线性表是否为空 判断线性表是否为空是指判断线性表中是否包含元素,如果为空则返回1,否则返回0。这个操作可以用来判断...

    线性表的顺序存储 线性表的顺序存储

    线性表是计算机科学中一种基础的数据结构,它是由n(n≥0)个相同类型元素构成的有限序列。在顺序存储结构中,线性表的元素被存储在一个一维数组中,按照它们在表中的相对位置来表示数据之间的逻辑关系。这种方式...

    C语言线性表基本操作

    遍历输出线性表中的所有元素,`traverseList`函数可以完成这个功能: ```c void traverseList(struct List *L){ int i; for(i = 0; i < L->size; i++){ printf("%d ", L->list[i]); } printf("\n"); } ``` ...

    C# 线性表使用实例

    在编程领域,线性表是一种基础且重要的数据结构,它由有限个相同类型元素组成,元素之间存在一对一的关系。在C#中,我们可以通过类和接口来实现线性表,同时利用泛型来提高代码的复用性。下面将详细探讨如何在C#中...

Global site tag (gtag.js) - Google Analytics