Bootstrap

【数据结构】队列的基本操作(C++版)

目录

1. 队列的概念

2.循环队列一一队列的顺序表示和实现

3.代码演示

4.运行调试


1. 队列的概念

队列:只允许在一端进行插入数据操作,在另一端进行删除数据操作的特殊线性表,队列具有**先进先出FIFO(First In First Out)。
入队列:进行插入操作的一端称为队尾 。
出队列:进行删除操作的一端称为队头
.

2.循环队列一一队列的顺序表示和实现

用一组地址连续的存储单元依次存放从队列头到队列尾的元素之外,尚需附设两个整型变量 front 和 rear分别指示队列头元素队列尾元素的位置(后面分别称为头指针和尾指针)。

2.1队列的顺序存储结构

#define MAXQSIZE 100    //队列可能达到的最大长度
typedef struct 
{
    QElemType *base;    //存储空间的基地址
    int front; 			//头指针
    int rear; 			//尾指针
} SqQueue;

 

3.代码演示

#include <stdio.h>
#include <limits.h>

typedef int ElemType;//定义数据类型
//**********循环队列开始**********
#define MAXSIZE 5//初始容量
typedef struct{
	ElemType data[MAXSIZE];
	int front;//头指针
	int rear;//尾指针,队列非空时,指向队尾元素下个位置
}SQueue;

void InitQueue(SQueue& Q){
	Q.front = Q.rear = 0;
}//将列队清空

bool QueueFull(const SQueue& Q){
	//TODO: 实现判断循环 队列是否为满的的代码。
	return (Q.rear + 1) % MAXSIZE == Q.front;//加一取模
}

bool QueueEmpty(const SQueue& Q){
	//TODO: 实现判断循环队列是否为空的的代码。
	return Q.front == Q.rear;//当队列为空时front 和rear相等
}

void EnQueue(SQueue& Q, ElemType x){
	if (QueueFull(Q))
	//是否为空队列
	{
		printf("队列已满! 元素%d入队失败!\n", x);
		return;
	}
	//TODO: 实现循环队列入队的代码
	Q.rear = (Q.rear + 1) % MAXSIZE;//尾部指针后移,如到最后转到头部
	Q.data[Q.rear] = x;//插入队尾
}

ElemType DeQueue(SQueue& Q){
	if (QueueEmpty(Q)){
		printf("队列已空! 出队失败!\n");
		return INT_MAX;
	}
	//TODO: 实现循环队列出队的代码
	Q.front = (Q.front + 1) % MAXSIZE;//队头指针后移,如到在最后转到头部
	ElemType x = Q.data[Q.front];
	return x;
}

int QueueSize(const SQueue& Q){
	return Q.rear >= Q.front ? Q.rear - Q.front : Q.rear - Q.front + MAXSIZE;
}//返回列队中元素个数
//**********循环队列结束**********

int main(){
	//循环队列的操作
	SQueue Q1;
	InitQueue(Q1);
	EnQueue(Q1, 1);
	printf("队首元素为:%d, 并出队\n", DeQueue(Q1));
	EnQueue(Q1, 2);
	EnQueue(Q1, 3);
	EnQueue(Q1, 4);
	EnQueue(Q1, 5);
	EnQueue(Q1, 6);
	printf("队首元素为:%d, 并出队\n", DeQueue(Q1));
	EnQueue(Q1, 6);
	printf("队首元素为:%d, 并出队\n", DeQueue(Q1));
	printf("队列元素个数为:%d\n", QueueSize(Q1));
	printf("队首元素为:%d, 并出队\n", DeQueue(Q1));
	printf("队首元素为:%d, 并出队\n", DeQueue(Q1));
	printf("队首元素为:%d, 并出队\n", DeQueue(Q1));
	printf("队首元素为:%d, 并出队\n", DeQueue(Q1));
	printf("\n");
	return 0;
}

4.运行调试

 

;