C语言中循环队列的队满和队空的判断条件各是什么?有什么不同?

2025-01-23 04:13:18
推荐回答(2个)
回答1:

队空时: Q.front == Q.rear;

队满时: Q.front == (Q.rear + 1) % MAXSIZE;

front指向队首元素,rear指向队尾元素的下一个元素。

maxsize是队列长度。

扩展资料:

实现的代码:

#include

#include

#define MAXSIZE 100  //最大队列长度

#define OK 1

#define ERROR 0

typedef int ElemType;

typedef int Status;

typedef struct {

ElemType *base;  //队列空间

int front;   //队头指针

int rear;       //队尾指针,若队尾不为空,则指向队尾元素的下一个位置

}SqQueue;

//初始化循环队列

Status initQueue(SqQueue &Q) {

Q.base = (ElemType *) malloc(MAXSIZE * sizeof(ElemType));  //申请空间

Q.front = Q.rear = 0;       //队空

return OK;

}

//入队

Status enQueue(SqQueue &Q, ElemType e) {

if ((Q.rear + 1) % MAXSIZE == Q.front) return ERROR; //队满,无法添加

Q.base[Q.rear] = e;  //插入元素

Q.rear =  (Q.rear + 1) % MAXSIZE; //队尾指针+1

return OK;

}

//出队

Status deQueue(SqQueue &Q, ElemType &e) {

if (Q.front == Q.rear) return ERROR; //队空,无法删除

e = Q.base[Q.front]

Q.front = (Q.front + 1) % MAXSIZE;  //队头指针+1

return OK;

}

//返回队列长度

Status length(SqQueue &Q) {

return (Q.rear - Q.front + MAXSIZE) % MAXSIZE; 

}

回答2:

if(q->front==(q->rear+1)%MAXSIZE)//队满

if(q->front==q->rear) //队空

队满是当前队尾rear如果向队尾插入元素则
rear + 1
如果rear + 1 >= maxsize 那么 rear = (rear+1)%maxsize(循环队列)
队空就是头尾在一起,未进行进队操作

观楼主英俊潇洒,风流倜傥,必当世豪杰,大侠闲暇之余,关注0x30百度贴吧,必成千秋霸业,建不世之功。