数据结构8:队列

文章目录

#头文件

Queue.h

c 复制代码
#pragma once

#include<stdio.h>
#include<stdlib.h>
#include<assert.h>
#include<stdbool.h>

typedef int QListDataType;

typedef struct QListNode {
	QListDataType val;
	struct QListNode* next;
}QListNode;

typedef struct Queue {
	QListNode* head;
	QListNode* tail;
	int size;
}Queue;

//初始化
void QueueInit(Queue* pq);

//销毁
void QueueDestroy(Queue* pq);

//队尾入队列
void QueuePush(Queue* pq, QListDataType x);

//对头出队列
void QueuePop(Queue* pq);

//获取队列头部元素
QListDataType QueueFront(Queue* pq);

//获取队列队尾元素
QListDataType QueueBack(Queue* pq);

//获取队列中有效元素个数
int QueueSize(Queue* pq);

//检查队列是否为空,空返回真,非空返回假
bool QueueEmpty(Queue* pq);

实现文件

Queue.c

c 复制代码
#define _CRT_SECURE_NO_WARNINGS 1

#include"Queue.h"

//初始化
void QueueInit(Queue* pq)
{
	assert(pq);

	pq->head = NULL;
	pq->tail = NULL;
	pq->size = 0;
}

//销毁
void QueueDestroy(Queue* pq)
{
	assert(pq);

	QListNode* cur = pq->head;
	while (cur)
	{
		QListNode* next = cur->next;
		free(cur);
		cur = next;
	}
	pq->head = NULL;
	pq->tail = NULL;
	pq->size = 0;
}

//队尾入队列
void QueuePush(Queue* pq, QListDataType x)
{
	assert(pq);
	
	QListNode* newnode = (QListNode*)malloc(sizeof(QListNode));
	if (newnode == NULL)
	{
		perror("malloc fail");
		return;
	}
	newnode->val = x;
	newnode->next = NULL;

	if (pq->tail == NULL)
	{
		pq->head = pq->tail = newnode;
	}
	else
	{
		pq->tail->next = newnode;
		pq->tail = newnode;
	}

	pq->size++;
}

//队头出队列
void QueuePop(Queue* pq)
{
	assert(pq);
	assert(pq->size);

	QListNode* tmp = pq->head->next;
	free(pq->head);
	pq->head = tmp;
	if (pq->head == NULL)
		pq->tail = NULL;

	pq->size--;
}

//获取队列头部元素
QListDataType QueueFront(Queue* pq)
{
	assert(pq);
	assert(pq->size);

	return pq->head->val;
}

//获取队列队尾元素
QListDataType QueueBack(Queue* pq)
{
	assert(pq);
	assert(pq->size);

	return pq->tail->val;
}

//获取队列中有效元素个数
int QueueSize(Queue* pq)
{
	assert(pq);

	return pq->size;
}

//检查队列是否为空,空返回真,非空返回假
bool QueueEmpty(Queue* pq)
{
	assert(pq);

	return pq->size == 0;
}

测试文件

test.c

c 复制代码
#define _CRT_SECURE_NO_WARNINGS 1

#include"Queue.h"

void Test1()
{
	Queue q;
	Queue* pq = &q;

	//初始化
	QueueInit(pq);

	QueuePush(pq, 1);
	printf("头部元素:%d  尾部元素:%d  队列中元素个数:%d\n", QueueFront(pq), QueueBack(pq),QueueSize(pq));

	QueuePush(pq, 2);
	printf("头部元素:%d  尾部元素:%d  队列中元素个数:%d\n", QueueFront(pq), QueueBack(pq), QueueSize(pq));


	QueuePush(pq, 3);
	printf("头部元素:%d  尾部元素:%d  队列中元素个数:%d\n", QueueFront(pq), QueueBack(pq), QueueSize(pq));


	QueuePush(pq, 4);
	printf("头部元素:%d  尾部元素:%d  队列中元素个数:%d\n", QueueFront(pq), QueueBack(pq), QueueSize(pq));


	QueuePop(pq);
	printf("头部元素:%d  尾部元素:%d  队列中元素个数:%d\n", QueueFront(pq), QueueBack(pq), QueueSize(pq));

	QueuePop(pq);
	printf("头部元素:%d  尾部元素:%d  队列中元素个数:%d\n", QueueFront(pq), QueueBack(pq), QueueSize(pq));


	QueuePop(pq);
	printf("头部元素:%d  尾部元素:%d  队列中元素个数:%d\n", QueueFront(pq), QueueBack(pq), QueueSize(pq));


	QueuePop(pq);
	//printf("头部元素:%d  尾部元素:%d  队列中元素个数:%d\n", QueueFront(pq), QueueBack(pq), QueueSize(pq));


	//销毁
	QueueDestroy(pq);

}


int main()
{
	Test1();
	return 0;
}
相关推荐
塔中妖1 分钟前
【华为OD】最大子矩阵和
算法·华为od·矩阵
努力学习的小廉38 分钟前
深入了解linux系统—— 线程同步
linux·服务器·数据库·算法
数据爬坡ing41 分钟前
从挑西瓜到树回归:用生活智慧理解机器学习算法
数据结构·深度学习·算法·决策树·机器学习
luoganttcc42 分钟前
小鹏汽车 vla 算法最新进展和模型结构细节
人工智能·算法·汽车
胡耀超2 小时前
3.Python高级数据结构与文本处理
服务器·数据结构·人工智能·windows·python·大模型
云:鸢2 小时前
C语言链表设计及应用
c语言·开发语言·数据结构·链表
wallflower20202 小时前
滑动窗口算法在前端开发中的探索与应用
前端·算法
林木辛2 小时前
LeetCode热题 42.接雨水
算法·leetcode
MicroTech20252 小时前
微算法科技(NASDAQ: MLGO)采用量子相位估计(QPE)方法,增强量子神经网络训练
大数据·算法·量子计算
星梦清河2 小时前
宋红康 JVM 笔记 Day15|垃圾回收相关算法
jvm·笔记·算法