文章目录
- 1.链式队列的定义
- 2.初始化
- 3.判断空
- 4.入队
- 5. 出队
- 6.打印全部元素
- 7.源代码
本篇中的链式表示都是带头结点的链式表示。
1.链式队列的定义
typedef struct LinkNode { //链式队列的结点
int data;
struct LinkNode *next;
}LinkNode;
typedef struct { //链式队列
LinkNode *front;
LinkNode *rear; //队列的队头和队尾指针
}LinkQueue;
2.初始化
bool InitQueue(LinkQueue &Q)
{
Q.front = Q.rear = (LinkNode*)malloc(sizeof(LinkNode)); //建立头结点
Q.front->next = NULL; //初始化为空
return true;
}
3.判断空
由于初始化的时候初始化为front和rear相等,所以判断空的条件是front和rear相等。
bool IsEmpty(LinkQueue& Q)
{
if (Q.front == Q.rear)
return true;
return false;
}
4.入队
void EnQueue(LinkQueue& Q, int e)
{
LinkNode* s = (LinkNode*)malloc(sizeof(LinkNode)); //创建一个新的结点
s->data = e;
s->next = NULL;
Q.rear->next = s;
Q.rear = s;
}
5. 出队
出队时要特殊考虑只剩一个结点时候的情况。
bool DeQueue(LinkQueue& Q, int& e)
{
if (Q.front == Q.rear)
return false; //空队
LinkNode* p = Q.front->next;
e = p->data;
Q.front->next = p->next;
if (Q.rear == p)
Q.rear = Q.front; //若原队列中只有一个结点,删除后变空
free(p);
return false;
}
6.打印全部元素
void PrintQueue(LinkQueue& Q)
{
LinkNode* q=Q.front->next;
while (q != NULL)
{
cout << q->data << " ";
q = q->next;
}
}
7.源代码
#include<iostream>
using namespace std;
typedef struct LinkNode { //链式队列的结点
int data;
struct LinkNode *next;
}LinkNode;
typedef struct { //链式队列
LinkNode *front;
LinkNode *rear; //队列的队头和队尾指针
}LinkQueue;
//初始化
bool InitQueue(LinkQueue &Q)
{
Q.front = Q.rear = (LinkNode*)malloc(sizeof(LinkNode)); //建立头结点
Q.front->next = NULL; //初始化为空
return true;
}
//判断空
bool IsEmpty(LinkQueue& Q)
{
if (Q.front == Q.rear)
return true;
return false;
}
//入队
void EnQueue(LinkQueue& Q, int e)
{
LinkNode* s = (LinkNode*)malloc(sizeof(LinkNode));
s->data = e;
s->next = NULL;
Q.rear->next = s;
Q.rear = s;
}
//出队
bool DeQueue(LinkQueue& Q, int& e)
{
if (Q.front == Q.rear)
return false; //空队
LinkNode* p = Q.front->next;
e = p->data;
Q.front->next = p->next;
if (Q.rear == p)
Q.rear = Q.front; //若原队列中只有一个结点,删除后变空
free(p);
return false;
}
//打印全部元素
void PrintQueue(LinkQueue& Q)
{
LinkNode* q=Q.front->next;
while (q != NULL)
{
cout << q->data << " ";
q = q->next;
}
}
int main()
{
LinkQueue Q;
//初始化
InitQueue(Q);
//判空
IsEmpty(Q);
//入队
int e = 0;
cout << "输入入队元素:";
cin >> e;
while (e != 9999)
{
EnQueue(Q, e);
cout << "输入入队元素:";
cin >> e;
}
//出队
DeQueue(Q,e);
cout << "出队的元素为:" << e << endl;
//打印全部元素
PrintQueue(Q);
return 0;
}
有帮助的话,点一个关注吧!