7.9 队列:顺序队列
存储空间连续
代码
/*************************************
* 名称描述:队列:使用数组实现
* 实现功能:队列的出队、入队、队列判断、置空队列等
* 作 者:王 利 涛
* QQ 群 :475504428
* 公 众 号:宅学部落(armlinuxfun)
* 嵌入式自学路线咨询 QQ:3284757626
*************************************/
#include<stdio.h>
#include<stdlib.h>
#define Queue_SIZE 5
struct queue{
int data[5]; //该队列可以保存5个元素
int size;
int front;
int rear;
};
int is_queue_empty(struct queue *Q)
{
return (Q->size == 0);
}
int is_queue_full(struct queue *Q)
{
return (Q->size == Queue_SIZE);
}
int enqueue(struct queue *q, int value)
{
if(is_queue_full(q))
{
printf("enqueue failed : Queue is full!\n");
return -1;
}
q->data[q->rear] = value;
q->size++;
q->rear = (q->rear+1)%Queue_SIZE; //队尾循环++
return 0;
}
int dequeue(struct queue *q)
{
int data;
if(is_queue_empty(q))
{
printf("dequeue failed : Empty queue!\n");
return -1;
}
data = q->data[q->front];
q->size--;
q->front = (q->front+1)%Queue_SIZE; //队头循环++
return data;
}
int print_queue(struct queue *q)
{
int i = q->front; //从队头开始打印
if(is_queue_empty(q))
return 1;
do{
printf("Queue.data[%d] = %d\n",i,q->data[i]);
i=(i+1)%5;
}while(i != q->rear);
return 0;
}
void init_queue(struct queue *q)
{
q->front = 0;
q->rear = 0;
q->size = 0;
}
int main(void)
{
struct queue Queue;
init_queue(&Queue);
enqueue(&Queue,1);
enqueue(&Queue,2);
enqueue(&Queue,3);
enqueue(&Queue,4);
enqueue(&Queue,5);
// print_queue(&Queue);
// enqueue(&Queue,6);
// print_queue(&Queue);
dequeue(&Queue);
dequeue(&Queue);
dequeue(&Queue);
// dequeue(&Queue);
// dequeue(&Queue);
// dequeue(&Queue);
// print_queue(&Queue);
enqueue(&Queue,5);
enqueue(&Queue,6);
enqueue(&Queue,7);
// enqueue(&Queue,8);
print_queue(&Queue);
}