mirror of
https://github.com/142vip/408CSFamily.git
synced 2026-04-15 02:41:07 +08:00
add sq Queue
This commit is contained in:
BIN
数据结构/.DS_Store
vendored
BIN
数据结构/.DS_Store
vendored
Binary file not shown.
BIN
数据结构/栈和队列/.DS_Store
vendored
BIN
数据结构/栈和队列/.DS_Store
vendored
Binary file not shown.
@@ -4,7 +4,7 @@
|
||||
* @Author: 【B站&公众号】Rong姐姐好可爱
|
||||
* @Date: 2020-03-1 07:23:48
|
||||
* @LastEditors: 【B站&公众号】Rong姐姐好可爱
|
||||
* @LastEditTime: 2021-03-17 08:26:30
|
||||
* @LastEditTime: 2021-03-17 23:23:09
|
||||
-->
|
||||
|
||||
|
||||
@@ -38,7 +38,7 @@ typedef struct {
|
||||
|
||||
则:
|
||||
|
||||
- 初始状态:`Q.front`===`Q.rear`===0
|
||||
- 初始状态(**队空条件**):`Q.front`===`Q.rear`===0
|
||||
- 入队操作:队不满时,先赋值给队尾元素,再移动队尾指针+1
|
||||
- 出队操作: 队不空时,先取队头元素值,再移动队头指针+1
|
||||
|
||||
@@ -85,4 +85,85 @@ typedef struct {
|
||||
|
||||
|
||||
|
||||
### 循环队列
|
||||
### 循环队列
|
||||
|
||||
在上面的顺序队列中,当队满后进行出队列,由于顺序队列出队只在队首进行操作,并且只会修改队首指针,这时候就会出现队尾指针一直`Q.rear===MaxSize`情况,就如下:
|
||||
|
||||
|
||||

|
||||
|
||||
可以很明显的看到,明明队列不满,但是由于进队列只能在队尾操作,因此不能进行进队操作;通常在这种情况下入队就会出现“上溢出”。
|
||||
|
||||
> 需要明确的是:上溢出并不是真正的溢出,只是表明在顺序队列中队不满却无法入队的情况,是一种假的”溢出“
|
||||
|
||||
|
||||
|
||||
|
||||
这种情况在顺序队列中是非常常见的,也是顺序队列的一大缺点。为了克服这个缺点,计算机先贤们总是能够有很多很好的办法,这里不得不佩服!!,所以就有了循环队列,**一个将顺序队列臆想为一个环状的空间**
|
||||
|
||||
|
||||
> 很多时候就是这样,为了解决一个问题,从而衍生出一个新的知识
|
||||
|
||||
|
||||
`循环队列`:把顺序队列臆想为一个环状的空间,将存储队列元素的表从逻辑上看做为一个环
|
||||
|
||||
|
||||
|
||||

|
||||
|
||||
|
||||
当队首指针`Q.front=MaxSize-1`后,再有元素`出队`就前进一个位置自动到位置0了【注意:可以结合时钟来理解,一圈转完了】
|
||||
|
||||
|
||||
- 初始时:`Q.front=Q.rear=0`
|
||||
- 队首指针进1: `Q.front=(Q.front+1)%MaxSize`
|
||||
- 队尾指针进1: `Q.rear=(Q.rear+1)%MaxSize`
|
||||
- 队列长度: `(Q.rear+MaxSize-Q.front)%MaxSize`
|
||||
|
||||
|
||||
是不是理解起来有点抽象,其实我最开始学到这里的时候,也不明白为什么要用`除法取余运算(%)`来实现。后来我看看了手机上的时钟指针,一圈两圈三圈的转,好像就开始悟了...
|
||||
|
||||
|
||||
**和时钟一样,顺时钟进行时间变换,在出队、入队时,队首、队尾指针都是按顺时针方向进1**
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
### 代码实现
|
||||
|
||||
|
||||
#### 初始化空队列
|
||||
|
||||
|
||||
```C++
|
||||
|
||||
void InitQueque(&Q){
|
||||
Q.front=Q.rear=0;
|
||||
}
|
||||
```
|
||||
|
||||
#### 队列是否为空
|
||||
|
||||
```C++
|
||||
|
||||
bool isEmpaty(Q){
|
||||
if(Q.rear=Q.front){
|
||||
return false;
|
||||
}else{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
```
|
||||
|
||||
|
||||
#### 入队
|
||||
|
||||
```C++
|
||||
|
||||
bool EnSqQueue(SqQueue)
|
||||
|
||||
```
|
||||
|
||||
#### 出队
|
||||
BIN
数据结构/栈和队列/images/.DS_Store
vendored
BIN
数据结构/栈和队列/images/.DS_Store
vendored
Binary file not shown.
BIN
数据结构/栈和队列/images/循环队列初始化.png
Normal file
BIN
数据结构/栈和队列/images/循环队列初始化.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 22 KiB |
BIN
数据结构/栈和队列/images/队列队满情况分析.png
Normal file
BIN
数据结构/栈和队列/images/队列队满情况分析.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 23 KiB |
Reference in New Issue
Block a user