首先,熟悉了一下顺序结构队列的简单操作:
#include <stdio.h>
#define MAX_SIZE 3
int Queue[MAX_SIZE];
int front = 0; // 队头指针,指向队头元素
int rear = 0; // 队尾指针,指向队尾元素的下一位置
int InQueue(int value)
{
if (rear >= MAX_SIZE)
return 0;
Queue[rear] = value;
rear++;
return 1;
}
int OutQueue(int *value)
{
if (rear == front)
return 0;
*value = Queue[front];
front++;
return 1;
}
int main()
{
int temp;
while(1){
printf("1 存入: 2 读取:");
scanf("%d",&temp);
fflush(stdin);
if (1 == temp){
printf("请输入要存入的值:");
scanf("%d",&temp);
fflush(stdin);
if (1 == InQueue(temp))
printf("插入队列成功!\n");
else
printf("队列已满!\n");
}
else if (2 == temp){
if (1 == OutQueue(&temp))
printf("读取队列的值为 %d \n",temp);
else
printf("队列为空!\n");
}
}
return 0;
}
然后重点是应用比较多的循环队列:
#include <stdio.h>
#include <stdlib.h>
#define MAXQSIZE 3
typedef int QElemType;
typedef struct {
QElemType *base;
int front;
int rear;
}SqQueue;
SqQueue *InitQueue()
{
SqQueue *Q = (SqQueue *)malloc(sizeof(SqQueue));
if (NULL == Q)
exit(0);
Q->base = (QElemType *)malloc(sizeof(QElemType));
if (NULL == Q->base)
exit(0);
Q->front = Q->rear = 0;
return Q;
}
int QueueLength(SqQueue *Q)
{
return (Q->rear - Q->front + MAXQSIZE) % MAXQSIZE;
}
int InQueue(SqQueue *Q, QElemType e)
{
if ((Q->rear + 1) % MAXQSIZE == Q->front) // 队列满
return 0;
Q->base[Q->rear] = e;
Q->rear = (Q->rear + 1) % MAXQSIZE;
printf("rear = %d\n",Q->rear);
return 1;
}
int OutQueue(SqQueue *Q, QElemType *e)
{
if (Q->front == Q->rear) // 队列空
return 0;
*e = Q->base[Q->front];
Q->front = (Q->front + 1) % MAXQSIZE;
return 1;
}
int main()
{
int temp, len;
SqQueue *Q = InitQueue();
while(1){
printf("1 存入: 2 读取:");
scanf("%d",&temp);
fflush(stdin);
if (1 == temp){
printf("请输入要存入的值:");
scanf("%d",&temp);
fflush(stdin);
if (1 == InQueue(Q,temp))
printf("插入队列成功!\n");
else
printf("队列已满!\n");
}
else if (2 == temp){
if (1 == OutQueue(Q,&temp))
printf("读取队列的值为 %d \n",temp);
else
printf("队列为空!\n");
}
len = QueueLength(Q);
printf("len = %d\n",len);
}
return 0;
}