数据结构模板之六:顺序队

①基本定义

队列是一种操作受限的线性表,和栈的一端不允许操作不同,队列的两端都可进行操作,而且只能是一端进(插入操作),另一端出(删除操作)。进行插入操作的一端称为队尾,进行删除操作的一端称为队首或队头。新元素进队后便成为新的队尾元素(栈的新元素进入则是栈顶元素),元素出队后,其后继元素成为新的队首元素。

所以,队列又称为先进先出表。

采用顺序存储结构的队列称为顺序队

②存储方式与结构


③实现

队空的条件为q->front = q->rear,进队时队尾指针rear加1,队满时q->rear == MAX-1(存放元素数组的最大下标)

#include <iostream>
#include <cstdlib>
using namespace std;
#define MaxSize 50
typedef int ElemType;
typedef struct
{
	ElemType data[MaxSize];
	int front,rear;               //队头和队尾指针
}SqQueue;                         //顺序队类型

/*****初始化队列*****/
void InitQueue(SqQueue * &q)
{
	q=(SqQueue *)malloc(sizeof(SqQueue));
	q->front=q->rear=-1;
}

/*****销毁队列*****/
void DestroyQueue(SqQueue * &q)
{
	free(q);
}

/*****判断队列是否为空*****/
bool QueueEmpty(SqQueue *q)
{
	return (q->front==q->rear);
}

/*****进队列*****/
bool enQueue(SqQueue * &q,ElemType e)
{
	if(q->rear==MaxSize-1)            //队满上溢出
		return false;
	q->rear++;                        //队尾增1
	e=q->data[q->rear]=e;             //rear位置插入元素e
	return true;
}

/*****出队列*****/
bool deQueue(SqQueue * &q,ElemType &e)
{
	if(q->front==q->rear)             //队空下溢出
		return false;
	q->front++;
	e=q->data[q->front];
	return true;
}

int main()
{
	return 0;
}
---代码和部分内容参考自《数据结构教程》

猜你喜欢

转载自blog.csdn.net/gsdxiaohei/article/details/80800215