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

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 . r e a r = ( Q . r e a r + 1 ) % M A X S I Z E Q.rear = (Q.rear+1) \% MAXSIZE Q.rear=(Q.rear+1)%MAXSIZE
元素出队时,修改队头指针
Q . f r o n t = ( Q . f r o n t + 1 ) % M A X S I Z E Q.front = (Q.front+1)\% MAXSIZE Q.front=(Q.front+1)%MAXSIZE

2.3 对比

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值