【数据结构】队列

定义

只允许在一端进行插入数据,另一端删除数据的特殊线性表,队列具有先进先出的特性(FIFO),进行插入操作的一端称为队尾,进行删除操作的一端称为队头

链式队列

结构体定义
cpp 复制代码
typedef int Qdata;
typedef struct Qnode
{
	Qdata x;
	struct Qnode* next;
}Qnode;

typedef struct MQueue
{
	Qnode* head;
	Qnode* tail;
	int size;
}MQueue;
初始化和销毁
cpp 复制代码
void Qinit(MQueue* qs)
{
	assert(qs);
	qs->head = qs->tail = NULL;
	qs->size = 0;
}

void Qdel(MQueue* qs)
{
	assert(qs);
	Qnode* cur = qs->head;
	while (cur)
	{
		Qnode* next = cur->next;
		free(cur);
		cur = next;
	}
	qs->head = qs->tail = NULL;
	qs->size = 0;
}
入队列和出队列
cpp 复制代码
void Qpush(MQueue* qs, Qdata x)
{
	assert(qs);
	Qnode* newnode = (Qnode*)malloc(sizeof(Qnode));
	if (newnode == NULL)
	{
		perror("newnode malloc fail");
		return;
	}
	newnode->x = x;
	newnode->next = NULL;
	if (qs->head == NULL)
	{
		assert(qs->tail == NULL);
		qs->head = qs->tail = newnode;
	}
	else
	{
		qs->tail->next = newnode;
		qs->tail = newnode;
	}
	qs->size++;
}

void Qpop(MQueue* qs)
{
	assert(qs);
	assert(qs->size != 0);
	Qnode* next = qs->head->next;
	free(qs->head);
	qs->head = next;

	if (qs->head == NULL) qs->tail = NULL;
	qs->size--;
}
功能实现
cpp 复制代码
int Qsize(MQueue* qs)
{
	assert(qs);
	return qs->size;
}

bool Qempty(MQueue* qs)
{
	assert(qs);
	return qs->size == 0;
}

Qdata Qfront(MQueue* qs)
{
	assert(qs);
	assert(!Qempty(qs));
	return qs->head->x;
}

Qdata Qback(MQueue* qs)
{
	assert(qs);
	assert(!Qempty(qs));
	return qs->tail->x;
}
相关推荐
问好眼8 小时前
《算法竞赛进阶指南》0x04 二分-1.最佳牛围栏
数据结构·c++·算法·二分·信息学奥赛
会编程的土豆8 小时前
【数据结构与算法】优先队列
数据结构·算法
minji...10 小时前
Linux 进程信号(二)信号的保存,sigset_t,sigprocmask,sigpending
linux·运维·服务器·网络·数据结构·c++·算法
罗湖老棍子10 小时前
最大数(信息学奥赛一本通- P1549)(洛谷-P1198)
数据结构·算法·线段树·单点修改 区间求最大值
垫脚摸太阳12 小时前
第 36 场 蓝桥·算法挑战赛·百校联赛---赛后复盘
数据结构·c++·算法
Aaswk13 小时前
刷题笔记(回溯算法)
数据结构·c++·笔记·算法·leetcode·深度优先·剪枝
计算机安禾13 小时前
【数据结构与算法】第14篇:队列(一):循环队列(顺序存储
c语言·开发语言·数据结构·c++·算法·visual studio
Java_小白呀13 小时前
考研408数据结构(持续更新中...)
数据结构·考研
Frostnova丶13 小时前
(11)LeetCode 239. 滑动窗口最大值
数据结构·算法·leetcode
励志的小陈15 小时前
数据结构Stack(C语言--用数组实现栈)
c语言·数据结构