数据结构——02队列

数据结构------队列

队列(Queue)概念

队列(Queue):具有一定操作约束的线性表

插入和删除操作:只能在一端插入,而在另一端删除

数据插入:入队列(AddQ)

数据删除:出队列(DeleteQ)

先来先服务

先进先出:FIFO

队列的抽象数据类型描述

类型名称:队列(Queue)

数据对象集:一个有0个或多个元素的有穷线性表

操作集:长度为MaxSize的队列 Q ∈ \in ∈Queue,队列元素item ∈ \in ∈ ElementType

队列的顺序存储实现

队列的顺序存储结构通常由一个一维数组和一个记录队列头元素位置的变量 front 以及一个记录队列尾元素位置的变量 rear 组成。

c 复制代码
#define MaxSize <存储数据元素的最大个数>
struct QNode {
	ElementType Data[MaxSize];
	int rear; //指向队列尾部
	int front; //指向队列头部
};
typedef struct QNode *Queue;

当front和Rear都为 -1的时候,队列为空。

正常运行中的队列,front指向第一个元素的前一格,Rear指向队列最后一个元素。

出队列,front++

入队列,rear++

循环队列


Front == Rear时,队列为空

出队列,front++

入队列,rear++

(PtrQ->rear + 1)%MaxSize == PtrQ->front时,队列为满

循环队列入队列

c 复制代码
void AddQ(Queue PtrQ, ElementType item)
{
	if((PtrQ->rear+1)%MaxSize == PtrQ->front){
		printf("队列满");
		return;
	}
	PtrQ->rear = (PtrQ->rear+1)%MaxSize;
	PtrQ->Data[PtrQ->rear] = item;
}

循环队列出队列

c 复制代码
ElementType DeleteQ( Queue PtrQ )
{
    if ( PtrQ->front == PtrQ->rear ) {
        printf("队列空");
        return ERROR;
    }
    else {
        PtrQ->front = (PtrQ->front + 1) % MaxSize;
        return PtrQ->Data[PtrQ->front];
    }
}
相关推荐
01二进制代码漫游日记2 分钟前
通讯录(一)
c语言·数据结构·学习
Jasmine_llq42 分钟前
《B4354 [GESP202506 一级] 假期阅读》
数据结构·算法·最值筛选算法(核心逻辑)·三元运算符简化分支算法·多输入顺序处理算法·整数算术运算算法·格式化输出算法
算法鑫探1 小时前
C语言结构体:学生信息统计实战
c语言·数据结构·算法·新人首发
爱吃生蚝的于勒1 小时前
【Linux】网络之http协议
linux·运维·服务器·网络·数据结构·c++·http
历程里程碑1 小时前
44. TCP -23Linux聊天室实现命令符功能
java·linux·开发语言·数据结构·c++·排序算法·tcp
丶小鱼丶1 小时前
数据结构和算法之【二叉树】
java·数据结构·算法
Thomas.Sir1 小时前
精通 MySQL 面试题
数据结构·数据库·mysql
罗湖老棍子1 小时前
打鼹鼠_二维树状数组(信息学奥赛一本通- P1540)(二维树状数组模版题)
数据结构·算法·树状数组·二维树状数组
_日拱一卒1 小时前
LeetCode:盛最多水的容器
数据结构·算法·leetcode
计算机安禾1 小时前
【数据结构与算法】第2篇:C语言核心机制回顾(一):指针、数组与结构体
c语言·开发语言·数据结构·c++·算法·链表·visual studio