#ifndef QUEUE_H
#define QUEUE_H
#include <stdio.h>
#include <stdbool.h>
#include <malloc.h>
#define MAX_SIZE 50
typedef int ElemType;
typedef struct QUEUE
{
int font;//队头
int rear;//队尾
ElemType data[MAX_SIZE];
int length;
}Queue,*QueuePtr;
QueuePtr InitQueue();//初始化队列
void EnQueue(QueuePtr Q, ElemType e);//将e插入队尾
void DeQueue(QueuePtr Q, ElemType* e);//删除队头元素,并用e返回
bool EmptyQueue(QueuePtr Q);//判断队列是否为空
int LengthQueue(QueuePtr Q);//返回队列长度
ElemType GetHead(QueuePtr Q);//返回队头元素
void ClearQueue(QueuePtr Q);//清空队列
void PrintQueue(QueuePtr Q);// 打印队列
#endif
/
#include "queue.h"
QueuePtr InitQueue()
{
QueuePtr Q = (QueuePtr)malloc(sizeof(Queue));
memset(Q->data, 0, MAX_SIZE);
Q->font = Q->rear = 0;
Q->length = 0;
return Q;
}
void EnQueue(QueuePtr Q, ElemType e)
{
if (Q->length == MAX_SIZE)
{
return;
}
Q->data[Q->rear] = e;
Q->rear = (Q->rear + 1) % MAX_SIZE;
Q->length++;
}
void DeQueue(QueuePtr Q, ElemType* e)
{
if (EmptyQueue(Q))
{
return;
}
*e = Q->data[Q->font];
Q->font = (Q->font + 1) % MAX_SIZE;
Q->length--;
}
bool EmptyQueue(QueuePtr Q)
{
if (Q->length == 0)
{
return true;
}
else
{
return false;
}
}
int LengthQueue(QueuePtr Q)
{
return Q->length;
}
ElemType GetHead(QueuePtr Q)
{
return Q->data[Q->font];
}
void ClearQueue(QueuePtr Q)
{
Q->font = Q->rear = 0;
memset(Q->data, 0, MAX_SIZE);
Q->length = 0;
}
void PrintQueue(QueuePtr Q)
{
int m = Q->font;
for (int n = 0; n < Q->length; n++)
{
printf("%d ", Q->data[(m++) % MAX_SIZE]);
}
}
#include "queue.h"
int main()
{
ElemType array[10];
puts("初始化队列");
puts("将0到49入队");
QueuePtr Q = InitQueue();
for (int i = 0; i < 50; i++)
{
EnQueue(Q, i);
}
puts("队列长度");
printf("%d\n", LengthQueue(Q));
puts("打印队列");
PrintQueue(Q);
putchar('\n');
puts("删除10个元素,并将其存储到array数组中");
for (int i = 0; i < 10; i++)
{
DeQueue(Q, &array[i]);
}
puts("打印队列");
PrintQueue(Q);
putchar('\n');
puts("队列长度");
printf("%d\n", LengthQueue(Q));
puts("输出array数组");
for (int i = 0; i < 10; i++)
{
printf("%d ", array[i]);
}
putchar('\n');
puts("将0到6入队");
for (int i = 0; i < 7; i++)
{
EnQueue(Q, i);
}
puts("打印队列");
PrintQueue(Q);
putchar('\n');
puts("打印队头元素");
printf("%d\n", GetHead(Q));
puts("队列长度");
printf("%d\n", LengthQueue(Q));
puts("清空队列");
ClearQueue(Q);
puts("队列长度");
printf("%d\n", LengthQueue(Q));
system("pause");
return 0;
}