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;
}

猜你喜欢

转载自blog.csdn.net/qq_39688282/article/details/108227361