循环队列实现

顺序存储

typedef 队列元素类型 ElemTp;
typedef struct { 
	ElemTp *elem;
	int size; //队列容量
	int head; //队头指针
	int tail; //队尾指针
}SqQueue;
int createQueue(Queue &q, int n) //建容量为n的队列
{ 
	if(n<=0) 
		return 0;
	q.size=n; 
	q.head=-1;
	q.tail=-1;
	q.elem=new ElemTp[n];
	if(!q.elem) 
		return 0;
	return 1; //返回1表示成功;返回0表示失败
}
void destroyQueue(Queue &q) //销毁队列存储空间
{ 
	q.n=0; 
	q.head=-1; 
	q.tail=-1;
	delete []q.elem;
}
void clearQueue(Queue &q) //置空队列
{ 
	q.head=-1; 
	q.tail=-1;
} 
//检查队列是否为空
bool isEmpty(Queue &q) {
     return q.head == -1;
 }
 
 //检查队列是否已满
bool isFull(Queue &q) {
    return ((q.tail + 1) % q.size) == q.head;
}
//队尾插入元素,成功返回true
bool enQueue(int value,Queue &q) {
    if (isFull()) {
        return false;
    }
    if (isEmpty()) {//插入第一个元素时,head指向第一个元素;此后只有在删除元素时head指针才会移动
        q.head = 0;
    }
    q.tail = (q.tail + 1) % q.size;//tail指针循环右移
    q.elem[q.tail] = value;
    return true;
}
//删除队头元素,成功返回true
bool deQueue(Queue &q) {
    if (isEmpty()) {
        return false;
    }
    if (q.head == q.tail) {//队列只剩最后一个元素,删除后head,tail都置为-1
        q.head = -1;
        q.tail = -1;
        return true;
    }
    q.head = (q.head + 1) % q.size;//head指针循环右移
    return true;
}

队列为空 q.head==-1

在这里插入图片描述

队列填满 ((q.tail+1)%q.size)==q.head

队满情况1
第一种填满情况

队满情况2
第二种填满情况

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值