数据结构之线性表(数据结构day04)

线性表的定义和基本运算

线性表的逻辑定义

  • 线性表,Linear_List是最简单和最常用的一种数据结构。
  • 线性表是由n个数据元素(结点)a1,a2,…,an组成的有限序列。类比数学中的数列概念。其中我们规定数组元素的个数n为该线性表的长度,size。当n为零时,称为空表。
  • 非空的线性表通常记为:(a1,a2,a3,…,an),其中ai(1<=i<=n)表示线性表的其中一个结点。
  • a1称为表的开始结点,无直接前继,有一个直接后继a2;
    an为表的终端结点,无直接后继,有一个直接前继an-1;
    其余元素ai(2<=i<=n-1)为内部元素,有前继ai-1,后继ai+1;
    结点与结点之间是线性的关系。故称之为线性表。

线性表的基本运算

  • 置空表initlist(L),构造一个空的线性表;
  • 求表长listLength(L),返回线性表的长度;
  • 取元素getNode(L,i),1<=i<=n;
  • 按值查找 LocateNode(L,x),返回第一个为X的结点的位置,若表中* 不存在则返回0
  • 插入insert(L,i,x) 在L的i位置插入x,
  • 删除delete(L,i) 删除表中的第i个元素
线性表的顺序存储和基本元素的实现

线性表的顺序存储

  • 线性表的顺序存储指的是将线性表的数据元素按其逻次序依次存入一组地址连续的存储单元中,用这种方式存储的线性表称为顺序表,例如数组。
  • 假设每个结点的空间大小都一致,即数据类型一致,例如对于每个int来说,占用4个字节,32位。设每个结点的空间大小为d,那么,一般来说,线性表中第i个元素的存储位置为:LOC(ai)=LOC(a1)+(i-1)*d ,其中ai的地址称为首地址或基地址。
  • 因为在顺序表中任何一个元素的地址都可以通过计算确定,所以可以做到随机存储。举例内存的读取模式。
  • 因为在高级程序设计语言中,数组类型具有随机存取的特性,因此,通常用数组描述顺序表。除了存储线性表的结点外,还需要一个变量来标识线性表的长度。

线性表的链式存储结构

  • 顺序表的读取快,但是插入与删除缓慢,鉴于此,引申出链表
  • 链表不可以随机读取,因为第i个元素的地址不能直接读取到
  • 单链表(线性链表)
    (1) 存储ai时,除了保存ai本身,还存储了ai+1的地址信息,即C中的指针。包含了两部分信息的结点,含有原有数据的域为数据域,存储直接后继的为指针域。
    (2) 采取这种存储方式的表为链表,其中每一个结点的存储结构为:[data][next]
    (3) 因为每一个结点只包含1个指针域,所以称为单链表。
    (4) 因为第一个结点没有直接前趋,所以特地设立一个head存放第一个元素的地址,即头指针。而终端结点的指针域则为null。如果表中一个结点也没有,则head=NULL。

单链表上的运算

  • 建立单链表:
        ① 头插法:从一个空表开始,重复读入数据,生称新结点,将数据存到数据域中,然后将新结点的地址存到表头上。 插入顺序与链表顺序相反。
        ② 尾插法:将新结点插入到当前链表的表尾,需要一个尾部指针,rear,使其始终指向链表的尾结点。

  • 查找运算:
        ① 因为链表中的地址隐含在前趋中,所以必须从head开始查找

  • 插入运算

  • 删除运算

猜你喜欢

转载自blog.csdn.net/he_zhen_/article/details/86618947