数据结构(队列Queue)

文章目录

  • 一、队列
    • 1、队列的定义
    • 2、队列的顺序实现
      • 2.1、初始化
      • 2.2、入队
      • 2.3、出队
      • 2.4、查找
      • 2.5、判断队列 满/空
    • 3、队列的链式实现
      • 3.1、初始化
      • 3.2、入队
      • 3.3、出队
    • 4、双端队列

一、队列

1、队列的定义

数据结构(队列Queue)_第1张图片
数据结构(队列Queue)_第2张图片
数据结构(队列Queue)_第3张图片

2、队列的顺序实现

数据结构(队列Queue)_第4张图片

数据结构(队列Queue)_第5张图片

2.1、初始化

数据结构(队列Queue)_第6张图片

//初始化
void InitQueue(SqQueue &Q){
	Q.front=Q.rear=0;
} 
//判断是否为空
bool QueueEmpty(SqQueue Q){
	if(Q.front==Q.rear)
		return false;
	else 
		return true; 
} 

2.2、入队

数据结构(队列Queue)_第7张图片

队列已经满了的判断条件
队列已满的条件:rear==MaxSize ???
数据结构(队列Queue)_第8张图片

bool EnQueue(SqQueue &Q,int x){
	//判断队列是否已满
	if((Q.rear+1)%MaxSize==Q.front)
		return false;
	Q.data[Q.rear]=x;
	Q.rear=(Q.rear+1)%MaxSize;
	return true;
}

形成循环队列

2.3、出队

数据结构(队列Queue)_第9张图片

bool BeQueue(SqQueue &Q,int &x){
	if(Q.front==Q.rear)
		return false;
	x=Q.data[Q.front];
	Q.front=(Q.front+1)%MaxSize;
	return true;
} 

2.4、查找

bool GerHead(SqQueue Q,int &x){
	if(Q.front==Q.rear)
		return false;
	x=Q.data[Q.front];
	return true;
} 

队列中的元素个数
(rear+MaxSize-front)%MaxSize
数据结构(队列Queue)_第10张图片

2.5、判断队列 满/空

定义一个size,满是size=MaxSize,空是size=0
数据结构(队列Queue)_第11张图片
定义一个tag,删除操作tag=0,插入操作tag=1,判断,

队满:front==rear&&tag==1,队空:front==rear&&tag==0

数据结构(队列Queue)_第12张图片
两种对尾指向的方式
数据结构(队列Queue)_第13张图片
牺牲一个空间,判断对满,还是队空
数据结构(队列Queue)_第14张图片
数据结构(队列Queue)_第15张图片

3、队列的链式实现

数据结构(队列Queue)_第16张图片

数据结构(队列Queue)_第17张图片

3.1、初始化

数据结构(队列Queue)_第18张图片

void InitQueue(LinkQueue &Q){
	Q.front=Q.rear=(LinkNode*)malloc(sizeof(LinkNode));
	Q.front=NULL;
} 

3.2、入队

数据结构(队列Queue)_第19张图片

void EnQueue(LinkQueue &Q,int x){
	LinkNode *s=(LinkNode*)malloc(sizeof(LinkNode));
	s->data=x;
	s->next=NULL;
	Q.rear->next=s;
	Q.rear=s; 
}

数据结构(队列Queue)_第20张图片

3.3、出队

数据结构(队列Queue)_第21张图片
数据结构(队列Queue)_第22张图片

4、双端队列

数据结构(队列Queue)_第23张图片
数据结构(队列Queue)_第24张图片
数据结构(队列Queue)_第25张图片

你可能感兴趣的:(蓝桥杯,数据结构)