数据结构 线性表-2

Posted chance0x1

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据结构 线性表-2相关的知识,希望对你有一定的参考价值。

1.顺序存储结构不足的解决办法

线性表的顺序存储结构就是插入和删除时,需要移动大量元素

问题的根源在于:相邻的两个数据元素的存储位置具有邻居关系

插入操作,为了保持原有的数据元素的相邻关系,插入位置之后的数据元素以此往后移动。

删除操作,所删元素留下的空隙自然需要你补,数据元素要往前移动。

解决办法:采用链式存储结构

2.链式存储结构定义

2.1 几个重要概念

链式存储结构的特点:用一组任意存储单元存储线性表的数据元素

链式存储结构定义:每个元素包含一个数据域和一个指针域。指针域指向其直接后继元素。

结点:一个数据域,一个指针域,指针域指向另一个节点

链表:N个节点构成

单链表:线性表由由节点构成并且,每个节点只包含一个指针域

头指针:表的第一个节点的存储位置

头节点:单链表第一个节点前附设一个节点,为头节点,头节点可以不存储任何信息,也可以存储如线性表的长度等附加信息,头节点的指针域存储第一个节点的指针

2.2 头指针和头节点

这两个概念容易混淆。需要加以区分

头指针:

  1. 头指针是 链表指向第一个节点的指针,若链表由头节点,则为指向头节点的指针
  2. 头指针具有标识作用,常用头指针冠以链表的名字
  3. 无论链表是否为空,头指针均不为空,头指针是链表的必要元素

头节点

  1. 头节点是为了操作的统一和方便设立的,放在第一个元素之前,其数据域一般无意义(也可存放链表长度)
  2. 有了头节点,对第一元素节点前的插入和删除第一个节点,其操作和其他节点统一
  3. 头节点不一定是链表的必要元素

2.3 单链表的存储结构定义

typedef int ElemType;/* ElemType类型根据实际情况而定,这里假设为int */

typedef struct Node
{
    ElemType data;
    struct Node *next;
}Node;
typedef struct Node *LinkList; 

以上是关于数据结构 线性表-2的主要内容,如果未能解决你的问题,请参考以下文章

数据结构线性表(代码)

数据结构学习小结2 (第二章:线性表)

[数据结构]——线性表总结(c语言代码实现)爆肝两万字!

博客作业2---线性表

数据结构与算法线性表的重要基本操作与代码实现C语言版

线性表的基本操作c语言实现