3.7带标志的循环队列的插入删除操作

题目:假设以数组Q[m]存放循环队列中的元素, 同时设置一个标志tag,以tag == 0和tag == 1来区别在队头指针(front)和队尾指针(rear)相等时,队列状态为“空”还是“满”。试编写与此结构相应的插入(EnQueue)和删除(DeQueue)算法。

思路:当tag等于0并且头指针和尾指针指向同一位置时,队空;当tag等于1并且头指针和尾指针指向同一位置时,队满。

队列的结构:

#define MAXSIZE 100;
typedef struct Queue{
	Elemtype tage;
	Elemtype front,rear;
	Elemtype data[MAXSIZE];
}Queue;

队列初始化:

Status InitQueue(Queue &Q){
	Q.tag=0;
	Q.front=Q.rear=0;
	return OK;
}

队列判空:

bool IsEmpty(Queue Q){
	if(tag==0&&Q.front==Q.rear){
		return true;
	}
	return false;
}

队列判满:

bool IsFull(Queue Q){
	if(tag==1&&Q.front==Q.rear){
		return true;
	}
	return false;
}

入队:

Status EnQueue(Queue &Q,Elemtype n){
	if(IsFull(Q)){ //判断队列是否为空
		return ERROR;
	}
	Q.data[Q.rear]=n;
	Q.rear=(Q.rear+1)%MAXSIZE;
	if(Q.rear==Q.front){   //入队后判断队列是否满
		Q.tag=1;
	}
	return OK;
} 

出队:

Status DeQueue(Queue &Q,Elemtype &e){
	if(IsEmpty(Q)){    //判断队列是否为空
		return ERROR;
	}
	e=Q.data[Q.front];
	Q.front=(Q.front+1)%MAXSIZE;
	if(Q.front==Q.rear){  //出队后判断队列是否为空
		Q.tag=0;
	}
	return OK;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值