1、简介

定义:一种先进先出的线性表。
队空:front == rear
假队满 rear == MaxSize

2、数据结构

#define MaxSize 50
#define Error -1
typedef struct{
ElemType Data[MaxSize];
int front,rear;
}SqQueue;

3、基本操作

SqQueue InitQueue(SqQueue Q);
bool Empty(SqQueue Q);
bool EnQueue(SqQueue &Q,int x);
bool DeQueue(SqQueue &Q, int &x);
ElemType GetTop(SqQueue Q);

3.1 初始化队列

//初始化队列
SqQueue InitQueue(SqQueue Q){
Q.front = Q.rear = 0;
return Q;
}

3.2 判断队空

//判断是否Empty
bool Empty(SqQueue Q){
if (Q.front == Q.rear && Q.front == 0){
return true;
}
return false;
}

3.3 入队

先入队,在让尾指针加一

//入队
bool EnQueue(SqQueue &Q,int x){
if(Q.rear == MaxSize){
cout << "Queue is \'full\' " << endl;
return false;
}else{
Q.Data[Q.rear++] = x;
return true;
}

}

3.4 出队

//出队
bool DeQueue(SqQueue &Q, int &x){
if(!Empty(Q)){
x = Q.Data[Q.front++];
return true;
}else{
cout << "Queue is empty" << endl;
return false;
}
}

3.5 获取队头元素

//获取队头元素
ElemType GetTop(SqQueue Q){
if(!Empty(Q)){
return Q.Data[Q.front];
}else{
cout << "Queue is Empty" << endl;
return Error;
}

}

4、完整代码

#include<iostream>
using namespace std;

typedef int ElemType;

#define MaxSize 50
#define Error -1
typedef struct{
ElemType Data[MaxSize];
int front,rear;
}SqQueue;

SqQueue InitQueue(SqQueue Q);
bool Empty(SqQueue Q);
bool EnQueue(SqQueue &Q,int x);
bool DeQueue(SqQueue &Q, int &x);
ElemType GetTop(SqQueue Q);
int main(){
SqQueue Q = InitQueue(Q);
cout << Q.front << " " << Q.rear << endl;

cout << "Enqueue" << endl;
if(EnQueue(Q,10)){
cout << GetTop(Q) << endl;
}
EnQueue(Q,12);


cout << "Dequeue " << endl;
int x;
if(DeQueue(Q,x)){
cout << x << endl;
}

cout << "One more time " << endl;
int y;
DeQueue(Q,y);
cout << y << endl;


return 0;
}

//初始化队列
SqQueue InitQueue(SqQueue Q){
Q.front = Q.rear = 0;
return Q;
}

//判断是否Empty
bool Empty(SqQueue Q){
if (Q.front == Q.rear && Q.front == 0){
return true;
}
return false;
}

//入队
bool EnQueue(SqQueue &Q,int x){
if(Q.rear == MaxSize){
cout << "Queue is \'full\' " << endl;
return false;
}else{
Q.Data[Q.rear++] = x;
return true;
}

}

//获取队头元素
ElemType GetTop(SqQueue Q){
if(!Empty(Q)){
return Q.Data[Q.front];
}else{
cout << "Queue is Empty" << endl;
return Error;
}

}

//出队
bool DeQueue(SqQueue &Q, int &x){
if(!Empty(Q)){
x = Q.Data[Q.front++];
return true;
}else{
cout << "Queue is empty" << endl;
return false;
}
}