链队列
链队列的特性
- 什么是链队列:队列的链式存储
- 链队列的结构:同时带有队头指针和队尾指针的单链表
链队列的实现
- 链队列的操作
1) 链队列的初始化
2) 链队列的判空
3) 入队
4) 出队
代码:
#include<stdio.h>
#include<stdlib.h>
typedef int Elemtype;
typedef struct Lnode {
Elemtype data;
struct Lnode* next;
} Lnode, *LinkNode;
typedef struct {
LinkNode front, rear;
}LQueue;
void InitQueue(LQueue &Q)
{
Q.front = Q.rear = (Lnode*)malloc(sizeof(Lnode));
Q.rear->next = NULL;
}
bool Is_EmptyQ(LQueue Q)
{
if (Q.front == Q.rear)
return true;
else
return false;
}
void Push(LQueue& Q, Elemtype e)
{
LinkNode s = (LinkNode)malloc(sizeof(Lnode));
s->data = e;
s->next = NULL;
Q.rear->next = s;
Q.rear = s;
}
bool Pop(LQueue& Q, Elemtype& e)
{
if (Q.front == Q.rear)
return false;
LinkNode p = Q.front->next;
e = p->data;
Q.front->next = p->next;
if (p == Q.rear)
Q.front = Q.rear;
free(p);
p = NULL;
return true;
}
int main(void)
{
LQueue Q;
bool flag;
int del;
InitQueue(Q);
flag = Is_EmptyQ(Q);
if (flag)
printf("队列为空\n");
else
printf("队列不为空\n");
Push(Q, 3);
Push(Q, 4);
Push(Q, 5);
Push(Q, 6);
Push(Q, 7);
flag = Is_EmptyQ(Q);
if (flag)
printf("队列为空\n");
else
printf("队列不为空\n");
flag = Pop(Q, del);
if (flag)
printf("出队成功,出队值为%d\n", del);
else
printf("出队失败\n");
return 0;
}