Loading

线性表

1、线性表定义
线性表是具有相同数据类型的n(n>=0)个数据元素的有限序列,通常记为(a1,a2,a3,...,an),其中n为表长,n=0时为空表。

逻辑结构特征:

  • 有且仅有一个开始节点a1,没有直接前趋,有且仅有一个直接后继a2。
  • 有且仅有一个终结节点an,没有直接后继,有且仅有一个直接前趋an-1。
  • 其余内部节点都有且仅有一个直接前趋和后继。

2、线性表基本运算:求线性表长度,插入新元素,删除元素,存取或更新元素,多个线性表合并,一个线性表拆分,线性表元素排序,元素查找。

线性表在计算机内两种基本的存储结构:顺序存储,成为顺序表;链式存储,成为链表。

顺序表:线性表的顺序存储结构是指用一块地址连续的存储空间依次存储线性表的数据元素,这种存储结构成为向量,也称为顺序表。

特点:A.在顺序表上,逻辑关系相邻的两个元素在物理位置上也相邻。

​ B.在顺序表上可以随机存取表中的元素。

顺序表元素插入:(1)检查插入元素位置是否合法;(2)数组元素后移,为插入元素空出位置;(3)插入元素,数组元素个数加1。

顺序表元素删除:(1)检查插入元素位置是否合法;(2)数组元素前移,覆盖待删除元素;(3)数组元素个数减1。

由此可以知道,无论是插入还是删除,运算时间长短是由插入或删除元素位置决定的,插入时,最少循环0次(插在队尾),最多循环n次(插在队首,每个元素都要向后移一位),可看做平均循环次数为n/2;删除时最少循环次数为0次,最多为n-1次,平均循环次数也可看做(n-1)/2,所以顺序表的插入、删除运算的时间复杂性均为O(n)。

链表
(1)单链表
链表是通过任意的存储单元来存储线性表中的数据元素的,为建立起数据元素之间的线性关系,每个数据元素ai,除了存放数据元素的自身信息ai之外,还存放了
其后继ai+1所在的存储单元地址,这两部分信息组成一个‘节点’。
链表节点示意图单链表示意图
通常使用‘头指针’标识一个单链表,如单链表L、单链表H等,是指某链表的第一个节点的地址放在指针变量L、H中,头指针为NULL,则表示一个空表。

单链表基本运算:常用的主要由遍历、插入、删除。

遍历求链表节点个数基本步骤:

  • 设一个移动指针p和计数器j;
  • 初始化后,p所指节点后面若还有节点,p向后移动;
  • 计数器加1。

插入节点基本步骤:

即:将插入的新节点链域指向其后继节点,将其前趋节点的链域指向新节点,且此操作的前后顺序不能改变。
删除节点操作:

即:将删除节点的前一个节点的链域指向删除节点的后继节点。

(2)循环链表:将单链表的表尾节点由原来的空指针改为指向表头节点。

注:循环链表的表头有一个专门的空节点,用以区分表头表尾,其数据域一般设置一个特殊值来与一般节点区分,当是空表时,该节点指向自己。另外,对循环列表的另一种改进的方法是不设头指针而设尾指针:

尾结点由尾指针rear指示,则头结点的位置为rear-->next-->next。

(3)双链表:除了有向后指针外,还有指向前一个节点的指针,与单链表原理相似,操作更方便,但是占用存储单元增加。

顺序表与链表比较:

顺序表优点:

  • 方法简单,各种高级语言中都有数组,易于实现。
  • 没有因为节点间的逻辑关系增加存储开销。
  • 顺序表具有按元素序号随机访问的特点。

顺序表缺点:

  • 在顺序表中进行插入删除时,平均移动大约表中一半的元素,效率低。
  • 需要预先分配足够大的存储空间,估计过大,可能会导致顺序表后大量闲置,估计过小,又会溢出。
posted @ 2020-01-14 17:17  Yang-0394  阅读(337)  评论(0)    收藏  举报