浅谈队列(Queue)的实现
发布日期:2021-05-04 18:21:48 浏览次数:12 分类:技术文章

本文共 2219 字,大约阅读时间需要 7 分钟。

文章目录

Queue概念

  队列是一种特殊的线性表,其中只允许在固定的一端进行插入数据,在另一端进行数据的删除。遵循FIFO(first in first out)原则。进行插入操作的一端称为队尾,进行删除操作的一端称为队头。

Queue实现

Queue.h文件

#pragma once#include 
#include
#include
typedef int QDataType;//链式结构:表示队列typedef struct QueueNode{ QDataType data; struct QListNode* next;}QueueNode;//队列的结构typedef struct Queue{ QueueNode* front; QueueNode* rear;}Queue;//队列的初始化void QueueInit(Queue* pq);//入队操作void QueuePush(Queue* pq, QDataType data);//出队操作void QueuePop(Queue* pq);//获取队列头元素QDataType QueueFront(Queue* pq);//获取队列尾元素QDataType QueueBack(Queue* pq);//获取队列中有效元素个数int QueueSize(Queue* pq);//队列判空int QueueEmpty(Queue* pq);//队列销毁void QueueDestory(Queue* pq);

Queue.c文件

#include "Queue.h"//队列的初始化void QueueInit(Queue* pq){	assert(pq);	pq->front = pq->rear = NULL;}//入队操作void QueuePush(Queue* pq, QDataType x){	assert(pq);	QueueNode* newnode = (QueueNode*)malloc(sizeof(QueueNode));	newnode->data = x;	newnode->next = NULL;	if (pq->rear == NULL)	{		pq->front = pq->rear = newnode;	}	else	{		pq->rear->next = newnode;		pq->rear = newnode;	}}//出队操作void QueuePop(Queue* pq){	assert(pq);	assert(!QueueEmpty(pq));	//1.只有一个节点	//2.有多个节点	if (pq->front == pq->rear)	{		free(pq->front);		pq->front = pq->rear = NULL;	}	else	{		QueueNode* next = pq->front->next;		free(pq->front);		pq->front = next;	}}//获取队列头元素QDataType QueueFront(Queue* pq){	assert(pq);	assert(!QueueEmpty(pq));	return pq->front->data;}//获取队列尾元素QDataType QueueBack(Queue* pq){	assert(pq);	assert(!QueueEmpty(pq));	return pq->rear->data;}//获取队列中有效元素个数int QueueSize(Queue* pq){	assert(pq);	int size = 0;	QueueNode* cur = pq->front;	while (cur)	{		size++;		cur = cur->next;	}	return size;}//队列判空int QueueEmpty(Queue* pq){	assert(pq);	return pq->front == NULL ? 1 : 0;}//队列销毁void QueueDestory(Queue* pq){	assert(pq);	QueueNode* cur = pq->front;	while (cur)	{		QueueNode* next = cur->next;		free(cur);		cur = next;	}	pq->front = pq->rear = NULL;}

Test.c文件

#include "Queue.h"int main(){	Queue q;	QueueInit(&q);	QueuePush(&q, 1);	QueuePush(&q, 2);	QueuePush(&q, 3);	QueuePush(&q, 4);	QueuePush(&q, 5);	while (!QueueEmpty(&q))	{		int front = QueueFront(&q);		QueuePop(&q);		printf("%d ", front);	}	printf("\n");	QueueDestory(&q);	return 0;}
上一篇:leetcode-用栈实现队列-27
下一篇:Linux-调试器gdb-make/makefile-git工具

发表评论

最新留言

第一次来,支持一个
[***.219.124.196]2025年03月14日 15时36分58秒