数据结构与算法-6 队列

队列

只允许再一端进行插入,在另一端删除
队尾:允许插入
队头:允许删除
特点:先进先出 FIFO

队空条件: Q.rear == Q.front
队满条件:(Q.rear +1) % MaxSize == Q.front
队列元素个数:(rear + Maxsize - front)% Maxsize

typedef struct{
	ElemType data[MaxSize];	//用静态数组存放队列元素 
	int front, rear;		//队头,队尾指针 
}SqQueue;

void InitQueue(SqQueue &Q){
	Q.rear=Q.front= 0;		//初始时 队头、队尾指针指向0 
}

bool EnQueue(SqQueue &Q, ElemType x){
	if (队列已满)
		return false;
	 Q.data[Q.rear] = x;	//将x插入队尾
	 Q.rear = Q.rear+1;//队尾指针加一
	 return true;
	  
}

牛逼循环队列
bool EnQueue(SqQueue &Q, ElemType x){
	if (队列已满)
		return false;
	 Q.data[Q.rear] = x;	//将x插入队尾
	 Q.rear = (Q.rear+1) % MaxSize;//队尾指针加一取余  循环队列 
	 return true;
	  
}

出队
bool DeQueue(SqQueue &Q, ElemType & x){
	if(Q.rear == Q.front)		//判断队空
		return false;
	x = Q.data[Q.front];
	Q.front = (Q.front+1)% MaxSize;
	return true;
	 
}bool GetHead(SqQueue Q, ElemType & x){
	if(Q.rear == Q.front)		//判断队空
		return false;
	x = Q.data[Q.front];
	return true;
	 
} 

一般的循环队列中需要空出一个区域来判断队满和对空
但是还可以

typedef struct{
	ElemType data[MaxSize];	//用静态数组存放队列元素 
	int front, rear;		//队头,队尾指针 
	int size;
}SqQueue;

利用size判断,这样可以节省一个空间
size == MaxSize,满
size == 0,空

还可以用tag

typedef struct{
	ElemType data[MaxSize];	//用静态数组存放队列元素 
	int front, rear;		//队头,队尾指针 
	int tag;
}SqQueue;

tag = 0时,最近执行了一次删除,
tag = 1时,最近执行了一次插入

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值