队列 - 顺序循环队列的基本运算(C语言)

循环队列sq中:

 1. front(队头指针)指向实际队列元素的第一个元素的前一个位置,rear(队尾指针)指向实际队列元素的最后一个元素位置。(可根据需要自定义)

 2. 循环队列中的满并非真正意义上的满,即并不是所有的位置上都存储有元素,而是front和rear之间仍然隔着一个空位。若不隔此空位,当sq->rear == sq->front时,是满?还是空?。

 3. 初始时:sq->front = sq->rear = 0;(初始化)
     队空条件:sq->front == sq->rear;(判空)
     队满条件:(sq->rear+1)%MaxLen == sq->front;(判满)

完整代码如下:

//queue.cpp - 顺序循环队列的基本运算  

#include <iostream>
#define MaxLen 20

//顺序队列的节点类型定义
typedef char ElementType;
typedef struct queue
{
	ElementType data[MaxLen];         //顺序队列的存储方式 - 一维数组 
	int front, rear;                  //front - 头指针、rear - 尾指针 
} queue;

//基本运算
void InitQueue(queue *sq);       //初始化队列

bool EnQueue(queue *sq, ElementType x);       //入队列

bool OutQueue(queue *sq, ElementType &x);     //出队列 

bool IsEmpty(queue *sq);                //判空

bool IsFull(queue *sq);                //判满


//具体实现
//初始化队列 
void InitQueue(queue *sq)
{
	sq->front = 0;
	sq->rear = 0;
}

//判空
bool IsEmpty(queue *sq)
{
	if(sq->front == sq->rear)          //队列为空 
      return true;
    else
      return false;
} 

//判满 - 这里的满不是真正意义上的满,最满的情况时,front和rear之间还隔有一个空位 
bool IsFull(queue *sq)
{
	if( (sq->rear+1)%MaxLen == sq->front )     //队列上溢出 
	  return true;
	else
	  return false; 
} 

//入队列
bool EnQueue(queue *sq, ElementType x)
{
	if( IsFull(sq) )          //队列已满,无法再入队列 
	  return false;
	else
	{
		sq->rear = (sq->rear+1) % MaxLen;
		sq->data[sq->rear] = x;
		return true;
	}
} 

//出队列
bool OutQueue(queue *sq, ElementType &x)
{
	if( IsEmpty(sq) )             //队列为空,无法出队列 
	  return false;
	else
	{
		sq->front = (sq->front+1) % MaxLen;
		x = sq->data[sq->front];
		return true;
	} 
}

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值