1. 队列的链式存储的定义
//结点的定义
typedef struct LinkNode
{
int data;
LinkNode* next;
}LinkNode;
//链式队列的定义;需要记录队头的指针,也需要记录队尾的指针
typedef struct LinkQuene
{
LinkNode *front, *rear;
}LinkQuene;
2. 链队列的初始化(带头结点)
//链队列的初始化(带头结点)
void InitQuene(LinkQuene &Q)
{
Q.front = Q.rear = (LinkNode*)malloc(sizeof(LinkNode));
Q.front->next = NULL;
}
3. 链队列判断是否为空
//链队列判断是否为空
bool IsEmpty(LinkQuene &Q)
{
if (Q.rear == Q.front)
return true;
else
return false;
}
4. 链队列的入队(带头结点)
//链队列的入队(带头结点)
void EnQuene1(LinkQuene &Q, int x)
{
LinkNode* s = (LinkNode*)malloc(sizeof(LinkNode));
s->data = x;
s->next = NULL;
Q.rear->next = s;
Q.rear = s;
}
5. 链队列的入队(不带头结点)
//链队列的入队(不带头结点)
void EnQuene2(LinkQuene &Q, int x)
{
LinkNode* s = (LinkNode*)malloc(sizeof(LinkNode));
s->data = x;
if (Q.rear == NULL)
{
Q.front = Q.rear = s;
}
else
{
s->next = NULL;
Q.rear->next = s;
Q.rear = s;
}
}
6. 链队列的出队(带头结点))
//链队列的出队(带头结点)
bool Dequene1(LinkQuene &Q, int &x)
{
if (Q.rear == Q.front)//空队列
{
return false;
}
LinkNode* p = Q.front->next;
x = p->data;
Q.front->next = p->next;
if (Q.rear == p)
Q.rear = Q.front;
free(p);
return true;
}
7. 链队列的出队(不带头结点)
//链队列的出队(不带头结点)
bool Dequene2(LinkQuene &Q, int &x)
{
if (Q.front==NULL)//空队列
{
return false;
}
LinkNode* p = Q.front;
x = p->data;
Q.front = p->next;
if (Q.rear == p)
Q.rear = Q.front = NULL;
free(p);
return true;
}