c\c++队列的链式表示(对小白友好)

发布时间:2024年01月24日


??本篇中的链式表示都是带头结点的链式表示。

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;
}

在这里插入图片描述

有帮助的话,点一个关注吧!

文章来源:https://blog.csdn.net/m0_63112274/article/details/135830701
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。