#include <stdio.h>
#include <stdlib.h>
typedef int ElemType;
typedef struct LNode {
ElemType data;
struct LNode* next;
}LNode;
typedef struct {
LNode* front, * rear;
}LinkQueue;
//初始化队列
void Init(LinkQueue &Q)
{
Q.front = Q.rear = (LNode*)malloc(sizeof(LNode));//一定要连着写
Q.front->next = NULL;
}
//判断队列是否为空
bool IsEmpty(LinkQueue Q)
{
if (Q.front == Q.rear)
{
return true;
}
else
{
return false;
}
}
//入队,尾插法
void EnQueue(LinkQueue& Q, ElemType x)
{
LNode* s;
s = (LNode*)malloc(sizeof(LNode));
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;
}
LNode* p;
p = Q.front->next;//指向第一个结点
x = p->data;
Q.front->next = p->next;
if (Q.rear == p)//如果要删除的是最后一个结点
{
Q.rear=Q.front;//修改尾指针,让rear指向头结点,队列再一次变成空队列
}
free(p);
return true;
}
int main()
{
LinkQueue Q;
ElemType element;
bool ret;
Init(Q);
IsEmpty(Q);
EnQueue(Q, 3);
EnQueue(Q, 4);
EnQueue(Q, 5);
EnQueue(Q, 6);
EnQueue(Q, 7);
ret=DeQueue(Q, element);
if (ret)
{
printf("出队成功,元素值为%d\n", element);
}
else
{
printf("出队失败");
}
return 0;
}
队列的链式存储(带头结点)
最新推荐文章于 2024-08-23 23:00:00 发布