#include <stdio.h>
#include <stdlib.h>
typedef 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)); //为头结点申请空间,此时front,rear指针都指向头结点
Q.front->next=NULL; //头结点的next指向空
}
bool isEmpty(LinkQueue Q) //判断链队列是否为空
{
return Q.front==Q.rear;
}
void EnQueue(LinkQueue &Q,ElemType x) //入队
{
LinkNode *pnew; //定义一个新结点
pnew=(LinkNode*)malloc(sizeof(LinkNode)); //为新结点申请空间
pnew->data=x;
pnew->next=NULL; //新结点的next必须为空
Q.rear->next=pnew; //头结点的next指向新结点
Q.rear=pnew; //使尾指针指向新的结点
}
bool DeQueue(LinkQueue &Q,ElemType &x) //出队
{
if(isEmpty(Q)) //首先判断链队列是否为空
{
return false;
}
LinkNode *q; //定义一个新指针
q=Q.front->next; //使新指针始终指向第一个结点
x=q->data; //把第一个结点的值赋给形参x
Q.front->next=q->next; //断链
if(Q.rear==q)
{
Q.rear=Q.front;
}
free(q);
return true;
}
int main()
{
LinkQueue Q;
InitQueue(Q); //初始化链队列
bool ret;
ret=isEmpty(Q); //判空
if(ret)
{
printf("LinkQueue is empty\n");
}
else{
printf("LinkQueue is not empty\n");
}
EnQueue(Q,3); //入队
EnQueue(Q,4);
EnQueue(Q,5);
EnQueue(Q,6);
EnQueue(Q,7);
ElemType element;
ret=DeQueue(Q,element); //出队
if(ret)
{
printf("DeQueue success element=%d\n",element);
}
else{
printf("DeQueue failed\n");
}
return 0;
}
LinkQueue InitQueue isEmpty(Q) EnQueue DeQueue
于 2023-08-26 21:51:49 首次发布