mirror of
https://github.com/oxyanyano/2022-WangDao-CS-DS-Notes.git
synced 2026-02-03 02:33:19 +08:00
144 lines
3.0 KiB
Markdown
144 lines
3.0 KiB
Markdown
## 顺序队列—— Sequence Queue
|
||
|
||
### 一、顺序队列的定义
|
||
|
||
`顺序队列`:队列的`顺序存储`。
|
||
|
||
### 二、顺序队列的实现方式
|
||
|
||
实现方式:`静态分配`和`动态分配`
|
||
|
||
`注`:这两种方式:只是类型描述和初始化不一样,判空、入队、出队、取队头操作都一样
|
||
|
||
### 三、顺序队列上的操作
|
||
|
||
以`循环队列`为主
|
||
|
||
#### 静态分配的顺序队列:类型描述和初始化
|
||
|
||
```C
|
||
#define MaxSize 10
|
||
typedef struct{
|
||
Elemtype data[MaxSize];//静态数组存放队列中元素
|
||
Elemtype front,rear; //队列顶指针
|
||
}SqQueue;
|
||
```
|
||
|
||
```c
|
||
//初始化一个队列
|
||
void InitStack(SqQueue &Q){
|
||
Q.rear = Q.front = 0; //初始化队列顶指针
|
||
}
|
||
```
|
||
|
||
#### 动态分配的顺序队列:类型描述和初始化
|
||
|
||
```C
|
||
typedef struct{
|
||
Elemtype *base; //静态数组存放队列中元素
|
||
Elemtype front,rear; //队列顶指针
|
||
}SqQueue;
|
||
```
|
||
|
||
```c
|
||
//初始化一个队列
|
||
bool InitQueue(SqQueue &Q){
|
||
Q.base=(Elemtype *)malloc(MAXQSIZE*sizeof(Elemtype));
|
||
if(!Q.Base) return false;
|
||
Q.front = Q.rear = 0;
|
||
return true;
|
||
}
|
||
```
|
||
|
||
#### 判队列空
|
||
|
||
```c
|
||
//判空
|
||
bool StackEmpty(SqStack S){
|
||
if(Q.rear == Q.front){ //队列已空
|
||
return true;
|
||
}else{
|
||
return false;
|
||
}
|
||
}
|
||
```
|
||
|
||
#### 入队(循环队列)
|
||
|
||
```c
|
||
//入队
|
||
bool EnQueue(SqQueue &Q,Elemtype e){
|
||
if((Q.rear+1)%MAXSIZE == Q.front) return false; //队列已满
|
||
Q.data[Q.rear] = e; //e为队尾元素
|
||
Q.rear = (Q.rear + 1)%MaxSize; //队尾指针后移
|
||
return true;
|
||
}
|
||
```
|
||
|
||
#### 出队(循环队列)
|
||
|
||
```c
|
||
//出队
|
||
bool DeQueue(SqQueue &Q,Elemtype &e){
|
||
if(Q.rear == Q.front) return false;
|
||
e = Q.data[Q.front]; //e为队头元素
|
||
Q.front=(Q.front+1)%MAXQSIZE; //队头指针后移
|
||
return true;
|
||
}
|
||
```
|
||
|
||
#### 获取队头元素
|
||
|
||
```c
|
||
//获取队头元素
|
||
bool GetHead(SqQueue &Q,Elemtype &e){
|
||
if(Q.rear == Q.front) return false;
|
||
e = Q.data[Q.front]; //e为队列顶元素
|
||
return true;
|
||
}
|
||
```
|
||
|
||
#### 队列已空/已满
|
||
|
||
方案一:
|
||
|
||
```c
|
||
#define MaxSize 10
|
||
typedef struct{
|
||
Elemtype data[MaxSize];//静态数组存放队列中元素
|
||
int front,rear; //队列顶指针
|
||
}SqQueue;
|
||
```
|
||
|
||
已空:Q.rear == Q.front 已满:(Q.rear+1)%MAXSIZE == Q.front
|
||
|
||
方案二:
|
||
|
||
```c
|
||
#define MaxSize 10
|
||
typedef struct{
|
||
Elemtype data[MaxSize];//静态数组存放队列中元素
|
||
int front,rear; //队列顶指针
|
||
int size; //队列当前长度
|
||
}SqQueue;
|
||
```
|
||
|
||
已空:size == 0 已满:size == MAXSIZE
|
||
|
||
方案三:
|
||
|
||
```c
|
||
#define MaxSize 10
|
||
typedef struct{
|
||
Elemtype data[MaxSize];//静态数组存放队列中元素
|
||
int front,rear; //队列顶指针
|
||
int tag; //记录最近是删除还是插入,0是删除,1是插入
|
||
}SqQueue;
|
||
```
|
||
|
||
已空:Q.rear == Q.front && tag = 0 已满:Q.rear == Q.front && tag = 1
|
||
|
||
#### 元素的个数
|
||
|
||
(Q.rear+MAXSIZE-Q.front)%MAXSIZE == Q.front
|