0
点赞
收藏
分享

微信扫一扫

【王道C语言中级阶段+数据结构】队列代码笔记

目录

基础知识

队列的顺序存储(以循环队列为主)

队列图例

循环队列图例

队列/循环队列的定义

初始化

判空

入队(循环队列)

出队(循环队列)


基础知识

队列:

操作特性:先进先出

队头(Front):允许删除的一端

队尾(Rear):允许进入的一端

空队列:不含任何元素的空表


队列的顺序存储(以循环队列为主)

队列图例

a->b 入队a、b、c、d、e

b->c 出队 a

c->d 出队 b、c、d

循环队列图例

*循环队列能储存的数据比实际最大空间小1(需用1空间判断队列满空与否) 

队列/循环队列的定义

#define MaxSize 5//定义队列中元素的最大个数 
typedef struct SqQueue{
	ElemType data[MaxSize];//定义数组存放栈中元素(最大存储MaxSize-1个) 
	int front,rear;//定义队头指针、 队尾指针 
}SqQueue;//队列的类型定义(队列的别名) 


SqQueue (Q);//定义队列

初始化

void InitQueue(SqQueue &Q)//初始化队列指针 
{
	Q.rear=Q.front=0;//代表队列为空
}

InitQueue(Q);

判空

bool isEmpty(SqQueue &Q)//判断队是否为空 
{
	if(Q.rear==Q.front)//队空 
		return true;
	else
		return false;//非空 
}


ret=isEmpty(Q);
if(ret)
{
	printf("队列为空\n");
}
else
{
	printf("队列不为空\n");
}

入队(循环队列)

bool EnQueue(SqQueue &Q,ElemType x)//进队(将x放入队Q中)
{
	if((Q.rear+1)%MaxSize==Q.front) //判断是否队满
		return false;//队满,报错 
	Q.data[Q.rear]=x;//将x赋给队尾元素 
	Q.rear=(Q.rear+1)%MaxSize;//队尾指针加一取(最大空间)模 (取模保证指针在队列中循环) 
	return true;//入队成功 
}



EnQueue(Q,x);//将x放入队Q中

出队(循环队列)

bool DeQueue(SqQueue &Q,ElemType &x)//出队(将x从队Q中取出)
{
	if(Q.rear==Q.front) //判断是否队空 
		return false;//队空,报错 
	x=Q.data[Q.front];//将队头元素赋给x 
	Q.front=(Q.front+1)%MaxSize;//队头指针加一取(最大空间)模 (取模保证指针在队列中循环)  
	return true;//出队成功 
}

DeQueue(Q,x)//将x从队Q中取出

举报

相关推荐

0 条评论