队列的链式存储(C语言实现)

队列的链式存储(C语言实现),第1张

队列的链式存储(C语言) 1、运行环境介绍 编程软件:
	VS2019
说明:
由于代码中使用了C++语法中的引用,因此代码文件创建时要选择C++,但基本
语法都是使用的c语言里的。
2、代码逻辑与原理

队列:是一种队头出队,队尾入队, *** 作受限的数据结构
特性:FIFO(先进先出)or LILO(后进后出)

旧金山大学数据结构动画网站

3、基本功能的实现
void InitQueue(queuePtr& Q);//初始化
void EnQueue(queuePtr& Q);//元素入队
bool judgeQueueNull(queuePtr Q);//判断队列是否为空
void printELement(queuePtr Q);//遍历打印队列元素
qElement DeQueueElem(queuePtr &Q);//元素出队,并传出元素
4、完整代码

```cpp
#define _CRT_SECURE_NO_WARNINGS
#include
#include

/// 
/// 目标:实现队列的创建,完成判断队列是否空、入队、出队、遍历 *** 作。
/// 存储格式:链表
/// 
/// 

//定义结构体
typedef int qElement;
typedef struct qNode {
	qElement data;//数据域
	struct qNode* next;//指针域
}qNode,*qPtr;

typedef struct {
	qPtr front;//队头
	qPtr rear;//队尾
}queuePtr;

void InitQueue(queuePtr& Q);//初始化
void EnQueue(queuePtr& Q);//元素入队
bool judgeQueueNull(queuePtr Q);//判断队列是否为空
void printELement(queuePtr Q);//遍历打印队列元素
qElement DeQueueElem(queuePtr &Q);//元素出队,并传出元素

int main() {
	queuePtr Q;
	InitQueue(Q);//初始化队列
	EnQueue(Q);//元素入队
	printELement(Q);//遍历元素

	qElement data;
	data = DeQueueElem(Q);//元素出队
	printf("出队元素为%d\n",data);
	printELement(Q);//遍历元素

	return 0;
}

/// 
/// 1、队列头结点Q给函数;
/// 2、将头指针和尾指针均指向同一结点;
/// 3、并将头指针的指针域置空
/// 
/// 队列头结点
void InitQueue(queuePtr& Q)
{
	Q.front = Q.rear = (qPtr)malloc(sizeof(qNode));//队头队尾指向同一个结点
	Q.front->next = NULL;
}

/// 
/// 1、定义新结点;
/// 2、输入第一个元素;
/// 3、将新元素放入队列中;
/// 4、将队尾指针始终指向队尾;
/// 
/// 是队列的头结点
void EnQueue(queuePtr& Q)
{
	qPtr s;
	qElement data;
	printf("请输入元素:\n");
	scanf("%d",&data);
	while (data != 9999)
	{
		s = (qPtr)malloc(sizeof(qNode));//为新节点申请空间
		s->data = data;
		s->next = Q.rear->next;//将前一个结点的指针域里的地址给新结点指针域。
		Q.rear->next = s;
		Q.rear = s;//尾指针始终指向队尾
		scanf("%d", &data);
	}
}

/// 
/// 1、将队列Q传入函数;
/// 2、当队头与队尾指针均指向同一个元素,则队列为空,否则不为空;
/// 
/// 代表队列
/// 队列为空返回true,否则不为空返回false
bool judgeQueueNull(queuePtr Q)
{
	if (Q.rear == Q.front) {//如果队尾与队头指针都指向同一个元素,则队列为空
		return true;
	}

	return false;
}

/// 
/// 1、队列Q传入函数,先将队头赋值给中间变量;
/// 2、判断Q是否为空队列;
/// 3、如果不是,则将依次打印;
/// 
/// 队列头结点
void printELement(queuePtr Q)
{
	qPtr p;
	p = Q.front->next;
	if (judgeQueueNull(Q))
	{
		printf("该队列为空!\n");
	}
	else
	{
		while (p != NULL)
		{
			printf("%3d",p->data);//打印元素
			p=p->next;
		}
			printf("\n");
	}

	
}

/// 
/// 1、将队列头结点传入函数;
/// 2、判断队列是否为空;
/// 3、将出队元素值传各变量data;
/// 4、头指针指向下一个元素。
/// 
/// 队列头结点
/// 返回要出队的值
qElement DeQueueElem(queuePtr& Q)
{
	if (Q.front == Q.rear)
	{
		return -1;//空队列
	}
	qElement data;
	data = Q.front->next->data;
	Q.front = Q.front->next;
	return data;
}

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/3002936.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-09-27
下一篇 2022-09-27

发表评论

登录后才能评论

评论列表(0条)

保存