顺序队列

顺序队列,以循环队列为主。

因为好写,所以采取它作为我的模板。

顺序队列的类型描述

1
2
3
4
5
6
7
#define MaxSize 50
typedef int ElemType;

typedef struct{
ElemType data[MaxSize]; // 存放队列元素
int front, rear; // 队头、队尾指针
}SqQueue;

初始化

1
2
3
4
// 初始化队列 
void InitQueue(SqQueue & q){
q.front = q.rear = 0; //初始化队头、队尾指针
}

判断队列是否为空

1
2
3
4
5
// 判断队列是否为空
bool EmptyQueue(SqQueue q){
if(q.front == q.rear) return true;
else return false;
}

入队

1
2
3
4
5
6
7
8
9
10
// 入队
bool EnQueue(SqQueue & q, ElemType x){
// 队满,报错
if((q.rear + 1) % MaxSize == q.front) return false;

// 入队
q.data[q.rear] = x;
q.rear = (q.rear + 1) % MaxSize;
return true;
}

出队

1
2
3
4
5
6
7
8
9
10
// 出队
bool DeQueue(SqQueue & q, ElemType & x){
// 队空, 报错
if(EmptyQueue(q)) return false;

// 出队
x = q.data[q.front];
q.front = (q.front + 1) % MaxSize;
return true;
}

获得队头元素

1
2
3
4
5
6
7
8
9
// 获得队头元素
bool GetHead(SqQueue q, ElemType & x){
// 队空,报错
if(EmptyQueue(q)) return false;

// 获得队头元素
x = q.data[q.front];
return true;
}