队列是受限制的线性表,只允许在一端插入,在另一端删除
#include<stdio.h>
#include<malloc.h>
#include<Windows.h>
typedef int QElemType;
typedef struct QNode
{
QElemType data;
struct QNode* next;
}QNode,*QueuePtr;
typedef struct
{
QueuePtr front;
QueuePtr rear;
}LinkQueue;
void InitQueue(LinkQueue& Q)
{
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 0X07);
Q.front = Q.rear = (QueuePtr)malloc(sizeof(QNode));
if (!Q.front)
return;
Q.front->next = NULL;
printf("\t创建队列成功啦!\n");
return;
}
void DestoryQueue(LinkQueue& Q)
{
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 0X07);
while (Q.front)
{
Q.rear = Q.front->next;
free(Q.front);
Q.front = Q.rear;
}
printf("\t销毁队列成功啦!\n");
return;
}
void DeQueue(LinkQueue& Q)
{
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 0X07);
int e;
QNode *p;
if (Q.front == Q.rear)
return ;
p = Q.front->next;
e = p->data;
Q.front->next = p->next;
if (Q.rear == p)
{
Q.rear = Q.front;
}
printf("\t现在执行出队操作:\n");
printf("\t出队元素是:%d\n",e);
return;
}
void EnQueue(LinkQueue& Q, QElemType& e)
{
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 0X07);
QueuePtr p;
p = (QueuePtr)malloc(sizeof(QNode));
if (!p)
{
printf("\t分配内存失败!\n");
return;
}
p->data = e;
p->next = NULL;
Q.rear->next = p;
Q.rear = p;
return;
}
void QueueLength(LinkQueue& Q)
{
int m = 0;
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 0X07);
while (Q.front != Q.rear)
{
m++;
Q.front = Q.front->next;
}
printf("\t队列的长度是%d\n",m);
}
void EmptyQueue(LinkQueue& Q)
{
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 0X07);
if (Q.front->next > Q.rear)
{
printf("\t是空队列\n");
}
else
{
printf("\t不是空队列\n");
}
}
void meanu()
{
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_GREEN);
printf("\t\t\t*****------^*^--------*****\n");
printf("*****\t1-->创建一个空队列 \t\t2-->队列元素入队 \t*****\n");
printf("*****\t3-->队列元素出栈 \t4-->求得队列长度 \t*****\n");
printf("*****\t5-->销毁队列 \t6-->判断是否为空队列\t*****\n");
printf("*****\t7--> 退出程序 \t\t*****\n");
}