目录
一: 栈
1 : 什么是栈
2 : 栈的基本操作
a : 基本框架
编辑
b: 入栈
c:出栈 && 获取栈顶元素
二:队列
1:什么是队列
2:队列的基本操作
a:基本框架
b : 入队列
c : 出队 && 获取队头元素
三:循环队列
1:什么是循环队列
2 : 循环队列的基本操作
a:基本框架
b: 入队 && 出队
c : 队列是否为空 && 队列是否为满
d : 获取队头元素 && 获取队尾元素
一: 栈
1 : 什么是栈
数据结构中的栈与计算机内存中的栈并不相同 , 这里不做详细解释
栈是一种特殊的线性表, 也就是说 : 栈是用来存放一连串的元素
但特殊的是 : 栈只能从一端存储元素 ,并且后入栈的元素先出栈
类似于将水倒入水杯中 , 杯顶区域的水 比 杯底区域的水先倒出
2 : 栈的基本操作
接下来 , 我们以整型为例,利用链表来模拟实现栈的基本操作
虽然数组也能够实现, 但是数组的大小并不灵活, 修改起来并不方便
而链表就很好的解决了这个问题
a : 基本框架
b: 入栈
c:出栈 && 获取栈顶元素
二:队列
1:什么是队列
队列是一种线性的数据结构 , 用来存放一连串的元素。
队列 , 顾名思义 : 就是同种元素所排成的一条队伍 。
特殊的是 :先入队的元素后出队。
类似于现实生活中的排队。
2:队列的基本操作
同样 , 我们以整型为例 。利用链表来模拟实现队列
a:基本框架
b : 入队列
c : 出队 && 获取队头元素
三:循环队列
1:什么是循环队列
循环队列 顾名思义 : 一个围成圈的队列。
包含队列的所有基本操作
与队列不同的是 :① 循环队列的大小一般是固定的 。
② 循环队列的每一个空间可以重复利用 ,有利于节省空间。
我们先思考一下 , 为了实现循环队列 , 入队与出队时 , 队头指针与队尾指针分别该如何操作。
以front表示队头指针, rear表示队尾指针 ,k表示队列的长度
既然涉及到循环 , 那么 front 就不能简单的+1来让其移动 , rear 也是同理。
不难发现 , front 与 rear 都是在 【 0 ,k 】这个区间内的 , 所以我们可以利用%来令front与rear移动。
但是 , 这也会导致另一个问题 ,队列会出现一个空位, 不论 队列中元素有多少 , 这个位置始终是空的 。不过利大于弊 , 通过牺牲一个空间来让后续的操作 变得简易 。