20210410

恋词U7 | 数据结构-栈和队列(二)| 田静语法-C1-S2-1-2~5

Table of Contents

恋词U7


数据结构-栈和队列(一)

队列的逻辑结构(基本概念)

由上面的逻辑特性图可以看出,先进来的容易先出去。即先进先出

First In , First Out. (FIFO)。
与栈的先进后出做一下对比。

408真题

分析:题目如左图所示,而题目所要实现的就是先写入的数据先取出即右图效果,那么很明显队列的逻辑特性更加符号。


队列的存储结构

顺序队

  1. 定义
image.png
int queue[maxSize];
int front= 0,rear = 0;
  1. 入队
queue[++rear] = x;
  1. 出队
x = queur[++front];
  1. 但是!!!,当下图情况,即rear走到数组最后一个位置的时候,如果这时候要入队元素,岂不是会发生“数组越界”,但这也不是队满的情况,因为数组中还有很多空位置没有存储元素。所以并非队满,可是如果此时继续按照之前的操作入队元素,就会发生数组越界。我们把这种状态称之为假溢出。即虽然会造成数组越界,但数组内依然有空位置存在。其实是入队和出队方式不应该这么做。试着去掰弯
  1. 改进:调整数组,掰成环。

要解决假溢出的问题,可以把数组弄成一个环,让rearfront沿着环走,这样就永远不会出现两者来到数组尽头无法继续往下走的情况,这样就产生了循环队列。循环队列是改进的顺序队列。如下图所示:

那么代码就变成:

rear = (rear + 1) % maxSize;
queue[rear] = x;
front = (front + 1) % maxSize;
x = queue[front];
  1. 特殊状态
image.png
image.png

链队

  1. 定义
typedef struct
{
LNode* front;
LNode* rear;
}queue;
  1. 入队

准备两个指针,一个是队头指针front指向头结点,另一个rear队尾指针,指向单链表最后一个结点。元素入队就是在rear指针所指指针的后面插入一个新结点,并让rear指针指向这个新结点。(标准单链表的插入)

  1. 出队

而元素出队操作,就是删除第一个数据结点就行了。(标准单链表的删除)。

  1. 特殊状态
image.png

田静语法

C1-S2-1-2 谓语动词的情态

image.png

C1-S2-1-3 谓语动词的语态

C1-S2-1-4 谓语动词的否定

此句中,谓语动词是现在进行时的被动语态is being cheated,其中包含了两个助动词isbeing,变否定时,not要加在第一个助动词后,因此变为is not being cheated

C1-S2-1-5 谓语动词的强调