一、链表结构的队列
#include"stdlib.h"
#include"stdlio.h"
typedef struct QNode
{
int data;
struct QNode *next;
}QNode,*QueuePrt;
typedef struct
{
QueuePrt front, rear;
}LinkQueue;
int InitQueue(LinkQueue *LQ)
{
LQ->front = LQ->rear =
(QueuePrt)malloc(sizeof(QNode));
if (LQ->front == NULL)
return 1;
LQ->front->next = NULL;
return 0;
}
void DestoryQueue(LinkQueue *LQ)
{
while (LQ->front)
{
LQ->rear =
LQ->front->next;
free(LQ->front);
LQ->front = LQ->rear;
}
}
int IsEmpty(LinkQueue *LQ)
{
return (LQ->front ==
LQ->rear);
}
void EnterQueue(LinkQueue *LQ, int Elem)
{
QueuePrt p;
p = (QueuePrt)malloc(sizeof(QNode));
p->data = Elem;
p->next = NULL;
LQ->rear->next = p;
LQ->rear = p;
}
void DeleteQueue(LinkQueue *LQ, int *Elem)
{
QueuePrt p;
p = (QueuePrt)malloc(sizeof(QNode));
p = LQ->front->next;
*Elem = p->data;
LQ->front->next =
p->next;
if (LQ->rear == p)
LQ->rear = LQ->front;
free(p);
}
LinkQueue MyQueue;
int main()
{
int Temp;
InitQueue(&MyQueue);
for(int i = 0;i<5;i++)
EnterQueue(&MyQueue, i);
for (int i = 0; i < 5; i++)
{
DeleteQueue(&MyQueue,
&Temp);
printf("The member of myqueue is :%d\r\n",Temp);
}
system("pause");
}
二、数组形式的循环队列
#include‘’stdio.h‘’
#include‘’stdlib.h‘’
#define QUEUE_MAX_SIZE
100
typedef struct
{
int Data[QUEUE_MAX_SIZE];
int Front;
int Rear;
}ArrayQueue;
void InitQueue(ArrayQueue *Q)
{
Q->Front = 0;
Q->Rear = 0;
}
int QueueLength(ArrayQueue Q)
{
return (Q.Rear - Q.Front + QUEUE_MAX_SIZE)%QUEUE_MAX_SIZE;
}
int EnterQueue(ArrayQueue *Q,int Elem)
{
if ((Q->Rear + 1) % QUEUE_MAX_SIZE ==
Q->Front)
return 1;
Q->Data[Q->Rear] = Elem;
Q->Rear = (Q->Rear + 1) %
QUEUE_MAX_SIZE;
return 0;
}
int DeleteQueue(ArrayQueue *Q, int *e)
{
if (Q->Front == Q->Rear)
return 1;
*e = Q->Data[Q->Front];
Q->Front = (Q->Front + 1) %
QUEUE_MAX_SIZE;
return 0;
}
ArrayQueue MyQueue;
int main()
{
int temp;
InitQueue(&MyQueue);
for (int i = 0; i < 5; i++)
{
EnterQueue(&MyQueue,i);
}
printf("The length of myqueue is :%d\r\n",
QueueLength(MyQueue));
for (int i = 0; i < 5; i++)
{
DeleteQueue(&MyQueue,
&temp);
printf("The member of myqueue is :%d\r\n", temp);
}
system("pause");
}