顺序队列

#include <iostream>
#define MaxSize 50
using namespace std;
typedef int DataType;
//队列的顺序存储结构 
typedef struct{  
	DataType data[MaxSize];  //存放队列中的数据元素 
	int front,rear;			//队头指针和队尾指针 
}SqQueue;

/*
假设队列空间够用 
顺序队列的缺点:
1.可能存在上溢和下溢
2.所以真正应用时要考虑,数组大小,判断溢出时怎莫作 
	顺序队列:队头删除数据元素,队尾插入数据元素
	1.数据运算
		1.InitQueue(&Q):初始化队列,构造一个空队列
		2.QueueEmpty(&Q):队列判空,若队列为空,返回true,否则返回false
		3.EnQueue(&Q,x):入队,若队列未满,将数据元素插入到队尾
		4.DeQueue(&Q,&x):出队,若队列非空,删除队头元素,并用x返回
		5.GetHead(Q,&x):读出对头元素,若队列非空,则将队头元素赋值给x
	2.队列术语 
		1.队头(front):允许删除的一端
		2.队尾(rear):允许插入的一端
		3.空队列:不含任何元素的队列 
	3.顺序队列的判断条件 
		1.队列的初始状态:Q.front=Q.rear=0
		2.队列的满了条件:Q.rear-Q.front=MaxSize
		3.队列空了的条件:Q.rear=Q.front 
*/


//初始化一个顺序队列 
void InitQueue(SqQueue &Q){
	//队列的初始状态 队列空,并且位置为0 Q.front=Q.rear=0
	Q.front=Q.rear=0; 
} 
//队列判空
bool QueueEmpty(SqQueue &Q){
	if(Q.front==Q.rear){
		cout<<"对列为空!"<<endl;
		return true;
	}else{
		return false;
	}
} 
//入队
bool EnQueue(SqQueue &Q,DataType x){
	if(Q.rear-Q.front==MaxSize){
		cout<<"队列已满,无法插入!"<<endl;
		return false;
	}else{
		Q.data[Q.rear++]=x;
		return true;
	}
} 
//出队
bool DeQueue(SqQueue &Q,DataType &x){
	if(Q.rear==Q.front){
		cout<<"队列为空,无法出队!"<<endl;
		return false;
	}else{
		x=Q.data[Q.front++];
		return true;
	}
} 
//读队头元素
bool GetHead(SqQueue &Q,DataType &x){
	if(Q.rear==Q.front){
		cout<<"队列为空!无法得到队头元素"<<endl;
		return false;
	} else{
		x=Q.data[Q.front];
		return true;
	}
} 
int main()
{
	SqQueue Q;
	InitQueue(Q);
	EnQueue(Q,100);
	int x;
	DeQueue(Q,x);
	cout<<x<<endl;
	QueueEmpty(Q);
	return 0;
}

  

原文地址:https://www.cnblogs.com/nanfengnan/p/14402163.html