数据结构基础---线性表

181 阅读4分钟

一、线性表

1.1.线性表定义:

  • n个元素的有限序列,通常记为(a1, a2, ... , an)

  • 特点:

    • 存在唯一的表头和表尾
    • 除表头外,表中的每个元素均只有唯一的直接前驱
    • 除表尾外,表中的每个元素均只有唯一的直接后继

1.2.线性表的存储结构

  • 顺序存储

    • 用一组地址连续的存储单元依次存储线性表中的数据元素,从而使得逻辑关系相邻的两个元素在物理位置上也相邻
    • 优点:可以随机存储表中的元素
    • 缺点:插入和删除操作需要移动大量的元素
    • 第i个元素的存储位置为:LOC(ai) = LOC(a1) + (i-1) * L
    • LOC(a1)是表中第一个元素的存储位置,L是表中每个元素所占空间的大小
  • 链式存储

    • 用结点来存储数据元素,节点的空间可以是连续的,也可以是不连续的,因此存储数据元素的同时必须存储元素之间的逻辑关系

    • 结点空间只有在需要的时候才申请,无须事先分配

      • 优点:插入和删除操作不需要移动元素,操作方便
      • 缺点:增加了存储空间开销,不能随机访问任一结点(数据域,指针域)
    • 其他几种链表结构

      • 双向链表:每个结点包含两个指针,指明直接前驱和直接后继元素,可在两个方向上遍历链表
      • 循环链表:表尾结点的指针指向表中的第一个结点,可在任何位置上开始遍历整个链表
      • 静态链表:借助数组来描述线性表的链式存储结构

1.3.线性表的插入和删除运算

  • 基于顺序存储结构的运算

    • 插入元素前要移动元素以挪出空的存储单元,然后再插入元素
    • 删除元素时同样需要移动元素,以填充背删除的出来的存储单元
  • 基于链式存储结构的运算

    • 再链式存储结构下进行插入和删除,其实质时对相关指针的修改

二、栈

2.1.基本概念

  • 栈是只能通过一端来实现数据存储和检索的一种线性表
  • 栈进行插入和删除操作的一端称为栈顶,另一端称为栈底
  • 栈的修改是按先进后出的原则进行的,又称为先进后出的线性表

2.2.栈的存储结构

  • 顺序存储
    • 指用一组地址连续的存储单元依次存储自栈顶到栈底的数据元素,同时附设指针top指示栈顶元素的位置
  • 链式存储
    • 用链表作为存储结构的栈也称为链栈。由于栈中元素的插入和删除仅在栈顶一端进行,因此不必设置头结点,链表的头指针就是栈顶指针

三、队列

3.1.基本概念

  • 一种先进先出(FIFO)的线性表,只允许在表的一端插入元素,而在表的另一端删除元素
  • 在队列中,允许插入元素的一端称为队尾(rear),允许删除元素的一端称为队头(front)

3.2.存储结构

  • 顺序存储
    • 利用一组地址连续的存储单元存放队列中的元素。由于队列中元素的插入和删除限定在队列的两端进行,因此设置队头指针和队尾指针,分别指示当前的队首元素和队尾元素
  • 链式存储
    • 用链表表示的队列简称为链队列
    • 为了方便操作,给链队列添加一个头结点,并令头指针指向头结点。队列为空的判定条件是:头指针和尾指针的值相同,且均指向头结点

四、串

4.1.基本概念

  • 串是仅由字符构成的有限序列,是取值范围受限的线性表。一般记为S='a1 a2...an',其中S是串名,a1a2...an是串值

  • 空串:长度为零的串,空串不包含任何字符

  • 空格串:由一个或多个空格组成的串

  • 子串:由串中任意长度的连续字符构成的序列。含有子串的串称为主串。子串在主串中的位置指子串首次出现时,该子串的第一个字符在主串中的位置。空串是任意串的子串

    • 主串:abcbcc
    • 子串:cb
  • 串相等:两个串的长度相等,且对应位置上的字符也相同

  • 串比较:两个串比较大小时以字符的ASCII码值作为依据。比较操作从两个串的第一个字符开始进行,字符的ASCII码值大者所在的串为大,若其中一个串先结束,则以串长较大者为大

4.2.串的存储结构

  • 每个字符串的最后要增加串结束标志\0

  • 顺序存储

    • 用一组地址连续的存储单元来存储串值的字符序列
  • 链式存储

    • 当用链表存储串中的字符时,每个结点中可以存储一个字符,也可以存储多个字符,要考虑存储密度问题