***front指向首节点,无元素值,rear指向末尾元素值;
代码段:
#include<stdio.h>
#include<stdlib.h>
#include<stdbool.h>
#include<string.h>
#define ElemType int//把int命名为ElemType
typedef struct LinkNode//定义链式队列节点
{
ElemType data;
struct LinkNode* next;
}LinkNode;
typedef struct//链式队列
{
LinkNode* front, * rear;//头尾指针
}LinkQueue;
void InitQueue(LinkQueue& Q)//初始化
{
Q.front = Q.rear = (LinkNode*)malloc(sizeof(LinkNode));//建立头节点
Q.front->next = NULL;//初始为空
}
bool IsQueue(LinkQueue Q) //判断队列为空返回true
{
if (Q.front == Q.rear)
return true;
else
return false;
}
void EnQueue(LinkQueue& Q, ElemType x)//入队
{
LinkNode* s= (LinkNode*)malloc(sizeof(LinkNode));//给节点s分配内存
s->data = x; //尾插法插入
s->next = NULL;
Q.rear->next = s;
Q.rear = s;
}
bool DeQueue(LinkQueue& Q, ElemType &x)//出队
{
if (Q.front == Q.rear)//队空退出
return false;
else
{
LinkNode* p = Q.front->next;//p指向第1个元素
x = p->data;
Q.front->next = p->next;
if (Q.rear == p)//删除的为最后一个元素
Q.rear = Q.front;
free(p);
return true;
}
}
int main()
{
LinkQueue Q;
while (1)
{
printf("\n*************请输入接下来的操作:*************\n");
printf("1:初始化\n");
printf("2:入队\n");
printf("3:出队\n");
printf("4:判断队空\n");
printf("-1:退出\n");
int count = 0;
ElemType x1 = 0, x2 = 0;
bool a = false, b = false;
printf("\n操作:");
scanf_s("%d", &count);
if (count == -1)
break;
switch (count)
{
case 1:
InitQueue(Q);
break;
case 2:
printf("\n请输入入队元素:");
scanf_s("%d",&x1);
EnQueue(Q, x1);
break;
case 3:
b=DeQueue(Q, x2);
if (b==false)
printf("\n没有元素,队列为空");
else
{
printf("\n出队元素:%d", x2);
}
break;
case 4:
a=IsQueue(Q);
if (a == false)
printf("\n队列不为空!");
else
printf("\n队列为空!");
break;
}
}
return 0;
}