diff --git a/.DS_Store b/.DS_Store index dae4bc1..be0452a 100644 Binary files a/.DS_Store and b/.DS_Store differ diff --git a/数据结构/.DS_Store b/数据结构/.DS_Store index d786562..f2a4426 100644 Binary files a/数据结构/.DS_Store and b/数据结构/.DS_Store differ diff --git a/数据结构/栈和队列/.DS_Store b/数据结构/栈和队列/.DS_Store index 7d26eda..e455563 100644 Binary files a/数据结构/栈和队列/.DS_Store and b/数据结构/栈和队列/.DS_Store differ diff --git a/数据结构/栈和队列/5.队列的顺序存储结构.md b/数据结构/栈和队列/5.队列的顺序存储结构.md index 82c77d5..8df170f 100644 --- a/数据结构/栈和队列/5.队列的顺序存储结构.md +++ b/数据结构/栈和队列/5.队列的顺序存储结构.md @@ -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 { -### 循环队列 \ No newline at end of file +### 循环队列 + +在上面的顺序队列中,当队满后进行出队列,由于顺序队列出队只在队首进行操作,并且只会修改队首指针,这时候就会出现队尾指针一直`Q.rear===MaxSize`情况,就如下: + + +![队列队满情况分析](/数据结构/栈和队列/images/队列队满情况分析.png) + +可以很明显的看到,明明队列不满,但是由于进队列只能在队尾操作,因此不能进行进队操作;通常在这种情况下入队就会出现“上溢出”。 + +> 需要明确的是:上溢出并不是真正的溢出,只是表明在顺序队列中队不满却无法入队的情况,是一种假的”溢出“ + + + + +这种情况在顺序队列中是非常常见的,也是顺序队列的一大缺点。为了克服这个缺点,计算机先贤们总是能够有很多很好的办法,这里不得不佩服!!,所以就有了循环队列,**一个将顺序队列臆想为一个环状的空间** + + +> 很多时候就是这样,为了解决一个问题,从而衍生出一个新的知识 + + +`循环队列`:把顺序队列臆想为一个环状的空间,将存储队列元素的表从逻辑上看做为一个环 + + + +![](/数据结构/栈和队列/images/循环队列初始化.png) + + +当队首指针`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) + +``` + +#### 出队 \ No newline at end of file diff --git a/数据结构/栈和队列/images/.DS_Store b/数据结构/栈和队列/images/.DS_Store index 330762a..81d2520 100644 Binary files a/数据结构/栈和队列/images/.DS_Store and b/数据结构/栈和队列/images/.DS_Store differ diff --git a/数据结构/栈和队列/images/循环队列初始化.png b/数据结构/栈和队列/images/循环队列初始化.png new file mode 100644 index 0000000..ffb80e5 Binary files /dev/null and b/数据结构/栈和队列/images/循环队列初始化.png differ diff --git a/数据结构/栈和队列/images/队列队满情况分析.png b/数据结构/栈和队列/images/队列队满情况分析.png new file mode 100644 index 0000000..33db4d8 Binary files /dev/null and b/数据结构/栈和队列/images/队列队满情况分析.png differ