数组队列结构的练习



掌叔
2008-06-16 08:56:02

摘自:[url]http://blog.chinaunix.net/u1/52089/showart_467534.html[/url]

数组做的队列结构,适合比较简单的情况。看了一下书,解决了那个队头和队尾的处理问题,然后自己尝试写,貌似也能写出来了,实现起来还可以,哈哈~~这个东西就是为了串口缓冲队列的处理的。
还算好用,不过貌似消耗大了点,以后考虑改进办法。

/*********************************************
Array Queue Exercises
Etual
2008-1-14
**********************************************/
#include
#define MAXSIZE 4
typedef struct Queue_tag{
int data[MAXSIZE];
int front,rear;
}QUEUE;
//global var
QUEUE Queue;
// queue initialize
void InitQueue(QUEUE* Queue)
{
int i;
for (i=0;i {
Queue->data[i]=0;
}
Queue->front=Queue->rear=0;
}
// whether queue is empty
int EmptyQueue(QUEUE* Queue)
{
return (Queue->front==Queue->rear);
}
int FullQueue(QUEUE* Queue)
{
return (((Queue->front+1)%MAXSIZE)==Queue->rear);
}
void InQueue(QUEUE* Queue,int data)
{
if (!FullQueue(Queue))
{
Queue->data[Queue->front]=data;
Queue->front=(Queue->front+1)%MAXSIZE;
}else{
printf("Queue is FULL ,can not input!
");
}
}
int OutQueue(QUEUE* Queue)
{
int temp;
if (!EmptyQueue(Queue))
{
temp=Queue->data[Queue->rear];
Queue->rear=(Queue->rear+1)%MAXSIZE;
}else{
temp=0;
printf("Queue is empty");
}
return temp;
}
void PrintQueue(QUEUE* Queue)
{
int front=Queue->front;
int rear =Queue->rear;
if (front == rear)
{
printf("Queue is empty!");
}
while(front != rear)
{
printf("%d,",Queue->data[rear]);
rear=(rear+1)%MAXSIZE;
}
printf("
");
}
int main(void)
{
int temp;
InitQueue(&Queue);
PrintQueue(&Queue);
InQueue(&Queue,10);
InQueue(&Queue,20);
InQueue(&Queue,30);
PrintQueue(&Queue);
temp=OutQueue(&Queue);
printf("Temp=%d
",temp);
temp=OutQueue(&Queue);
printf("Temp=%d
",temp);
temp=OutQueue(&Queue);
printf("Temp=%d
",temp);
temp=OutQueue(&Queue);
printf("Temp=%d
",temp);
PrintQueue(&Queue);
InQueue(&Queue,40);
// InQueue(&Queue,50);
PrintQueue(&Queue);
return 1;
}