定义队列的数据结构
typedef struct queue {
int *data;
int head;
int rear;
int size;
} Queue;
初始化队列:可见当队列为空时,head和rear均为-1
Queue *initQueue(int k) {
Queue *obj = (Queue *)malloc(sizeof(Queue));
obj->data = (int *)malloc(k * sizeof(int));
obj->head = -1;
obj->rear = -1;
obj->size = k;
return obj;
}
入队 *** 作:如果队列为空(即head等于-1),则从头开始入队,即将head=0,然后将rear+1,用size取余可以看出该队列是循环队列,可以节约队列的内存空间
void enQueue(Queue *obj, int e) {
if (obj->head == -1) {
obj->head = 0;
}
obj->rear = (obj->rear + 1) % obj->size;
obj->data[obj->rear] = e;
}
出队 *** 作:先是获得队列头存储的内容,方便后续返回。
然后可以看到,假如队列中只有一个元素,即head=rear,d出后把rear和head都赋值为-1,表示队列为空。
假如队列中有多个元素,则head+1
int deQueue(Queue *obj) {
int a = obj->data[obj->head];
if (obj->head == obj->rear) {
obj->rear = -1;
obj->head = -1;
return a;
}
obj->head = (obj->head + 1) % obj->size;
return a;
}
判断队列是否为空,则判断head是否等于-1即可
int isEmpty(Queue *obj) {
return obj->head == -1;
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)