队列分为两种,一种是链式队列,一种是静态队列,而静态队列一般通过循环队列来实现。下面是一个简单的循环队列的程序。
#include<stdio.h>
#include<malloc.h>
typedef struct queue
{
int *pBase;
int rear;
int front;
}QUEUE;
void init_queue(QUEUE*);//初始化队列
void en_queue(QUEUE*,int );//入队
bool full_queue(QUEUE*);//判断是否已满
bool empty_queue(QUEUE*);//判断是否为空
void traverse_queue(QUEUE*);
void out_queue(QUEUE*);
int main()
{
QUEUE Queue;
init_queue( &Queue);
en_queue(&Queue,4);
en_queue(&Queue,5);
en_queue(&Queue,6);
en_queue(&Queue,7);
en_queue(&Queue,8);
en_queue(&Queue,9);
en_queue(&Queue,10);
en_queue(&Queue,11);
traverse_queue(&Queue);
out_queue(&Queue);
traverse_queue(&Queue);
free(Queue.pBase);
return 0;
}
void init_queue(QUEUE* Queue)
{
Queue->pBase = (int*)malloc(sizeof(int) * 6);
Queue->front = Queue->rear = 0;
}
void en_queue(QUEUE* Queue,int val)
{
if(full_queue(Queue))
printf("队列已满\n");
else
{
Queue->pBase[Queue->rear] = val;
Queue->rear = (Queue->rear + 1)%6;
}
}
bool full_queue(QUEUE* Queue)
{
if((Queue->rear+1)%6 == Queue->front)
return true;
else
return false;
}
bool empty_queue(QUEUE *Queue)
{
if(Queue->front == Queue->rear)
return true;
else
return false;
}
void traverse_queue(QUEUE* Queue)
{
int q = Queue->front;
while(q != Queue->rear)
{
printf("%d",Queue->pBase[q]);
q = (q+1)%6;
}
printf("\n");
}
void out_queue(QUEUE*Queue)
{
if(empty_queue(Queue))
printf("队列是空的\n");
else
{
int pval = 0;
pval = Queue->pBase[Queue->front];//存放删除元素的值
Queue->front = (Queue->front + 1)%6;
}
}
程序执行的结果是:
今天是国庆节的第二天,早上起来后写的一个关于队列的程序。上一年的国庆节去了张家界,觉得蛮好玩的。现在阳光明媚,是适合出去玩的好时光,必经大学时间越来越少了。由于准备找工作,这个国庆假期就这样搁浅了。不知道以后还有多少这样的晴天?