数据结构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;
}
相关推荐
kobe_t5 小时前
数据安全系列7:常用的非对称算法浅析
算法
靠近彗星5 小时前
3.4特殊矩阵的压缩存储
数据结构·人工智能·算法
网安INF5 小时前
Python核心数据结构与函数编程
数据结构·windows·python·网络安全
清辞8536 小时前
C++入门(底层知识C与C++的不同)
开发语言·c++·算法
~kiss~6 小时前
图像处理~多尺度边缘检测算法
图像处理·算法·计算机视觉
Mr.看海6 小时前
机器学习鼻祖级算法——使用SVM实现多分类及Python实现
算法·机器学习·支持向量机
.格子衫.7 小时前
018数据结构之队列——算法备赛
数据结构·算法
浩泽学编程7 小时前
【源码深度 第1篇】LinkedList:双向链表的设计与实现
java·数据结构·后端·链表·jdk
怎么没有名字注册了啊8 小时前
求一个矩阵中的鞍点
数据结构·算法
Greedy Alg8 小时前
LeetCode 74. 搜索二维矩阵
算法