【软考】【数据结构】线性结构

1.线性表

【软考】【数据结构】线性结构
【软考】【数据结构】线性结构
【软考】【数据结构】线性结构

1.1 线性表的存储结构

顺序存储

**缺点:**大小固定,浪费存储空间,不利于节点的增加减小;插入和删除操作较复杂(在除表尾外的其他位置)。
时间复杂度:
  访问指定序号元素O(1)
  指定位置插入删除O(n)

链式存储

**缺点:**要存储指针所以浪费空间;直接访问节点不方便。
时间复杂度:
  访问指定序号元素,最好情况O(1),最坏情况O(n),平均为O([n+1]/2)
  指定位置插入删除,最好情况O(1),最坏情况O(n),取决于知不知道指定位置的指针
  在末尾插入结点,O(1);在末尾删除结点O(n)

2.队列与栈

2.1 栈

栈的概念:栈是后进先出(LIFO)的线性表,在栈中进行插入和删除操作的一端称为栈顶(top),另一端称为栈底(bottom)。
  **例:**元素按照a、b、c的次序入栈,请尝试写入其素有可能的出栈序列
abc,acb,bca,cba

2.2 队列

队列的概念:队列是先进先出(FIFO)的线性表,只允许在一端进行插入,另一端进行删除,允许删除的那一端称为队首(Front),允许插入的一端称为队尾(Rear)。

循环队列

【软考】【数据结构】线性结构
  在顺序队列中,元素入队时只修改队尾指针rear,出队时只修改队头指针front,由于顺序队列的存储空间容量是提前设定的,所以队尾指针有上限值,达到上限值后就无法通过修改队尾指针来实现新元素的入队操作了。所以提出了循环队列。
【软考】【数据结构】线性结构
  循环队列的初始状态为空,rear和front都等于0,容量为MAXSIZE。当空队列和满队列时都有rear=front,为了区别有两种处理方式:①设置标志位,区别头尾指针相同时是空队还是满队②牺牲一个存储单元,约定“队尾指针的下一个位置是队头指针时为满队”
元素入队时,修改队尾指针
Q.rear=(Q.rear+1)%MAXSIZEQ.rear = (Q.rear+1) \% MAXSIZE
元素出队时,修改队头指针
Q.front=(Q.front+1)%MAXSIZEQ.front = (Q.front+1)\% MAXSIZE

2.3 对比

栈和队列都是操作受限的线性表。
  一个线性序列经过队列后只能得到与原序列相同的元素序列,而经过一个栈后可以得到多种元素系列,所以可以用两个栈来模拟一个队列。
#3.串#
  定义:仅有字符构成的有限序列,是取值范围受限的线性表。
  KMP模式匹配算法:右移模式串
(详见我的另一片博客:串的模式匹配——KMP中next函数的计算