#include <bits/stdc++.h>
using namespace std;
typedef struct LinkNode{ //链式队列结点
ElemType data;
LinkNode *next;
}LinkNode;
typedef struct{ //链式 队列
LinkNode *front,*rear; //队列的队头和队尾指针
}LinkQueue;
//初始化队列(带头结点)
void InitQueue(LinkQueue &Q)
{
//初始时,front和rear 都 指向头结点
Q.front = Q.rear = (LinkNode*)malloc(sizeof(LinkNode));
Q.front->next = NULL;
}
//判断队列是否为空
bool Isempty(LinkQueue Q)
{
if(Q.front == Q.rear)
return true;
else
return false;
}
//新元素入队(带头结点)
void EnQueue(LinkQueue &Q ,ElemType x)
{
LinkNode *s = (LinkNode *)malloc(sizeof(LinkNode));
s->data = x;
s->next = NULL;
Q.rear->next = s; //将新结点插入到rear后
Q.rear = s; //修改表尾指针
}
//新元素入队(不带头结点)
void EnQueue(LinkQueue &Q , Elemtype x)
{
LinkNode *s = (LinkNode *)malloc(sizeof(LinkNode));
s->data = x;
s->next = NULL;
if(Q.front == NULL) //在空队列中插入第一个元素
{
Q.front = s; //修改队头队尾指针
Q.rear = s;
}
else
{
Q.rear->next = s; //新结点插入到rear后
Q.rear = s;//修改rear指针
}
}
//队头元素出队
bool DeQueue(LinkQueue &Q , ElemType &x)
{
if(Q.front == Q.rear)//空队
{
return false;
}
LinkNode *p = Q.front->next;
x = p->data; //用变量x返回队头元素
Q.front->next = p->next;//修改头结点的next指针
if(Q.rear == p)//此时是最后一个结点出队
{
Q.rear = Q.front;//修改rear指针
}
free(p);
return true;
}
void testLinkQueue()
{
LinkQueue Q;
InitQueue(Q);
}
signed main()
{
}
队列的链式实现
最新推荐文章于 2024-08-23 01:18:04 发布