首页后端开发其他后端知识C++队列概念及结构是啥,怎样实现队列?

C++队列概念及结构是啥,怎样实现队列?

时间2024-03-28 16:20:02发布访客分类其他后端知识浏览330
导读:这篇文章我们来了解C++队列的相关内容,下文给大家介绍了队列概念和结构,以及怎样实现队列,文中的示例代码介绍得很详细,有需要的朋友可以参考,接下来就跟随小编来一起学习一下吧! 1. 队列的概念及结构 队列:只允许在一端进行插入数据操作,...

这篇文章我们来了解C++队列的相关内容,下文给大家介绍了队列概念和结构,以及怎样实现队列,文中的示例代码介绍得很详细,有需要的朋友可以参考,接下来就跟随小编来一起学习一下吧!

1. 队列的概念及结构

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


2. 队列的实现

2.1 queue.h

#includestdio.h>
    
#includestdbool.h>
    
#includeassert.h>
    
#includemalloc.h>
    
typedef int QDataType;

typedef struct QueueNode
{
    
	struct QueueNode*next;
    
	QDataType data;

}
    QueueNode;

typedef struct Queue
{
    
	QueueNode *head;
    
	QueueNode *tail;

}
    Queue;
    
void QueueInit(Queue *pq);
    
void QueueDestory(Queue *pq);
    
void QueuePush(Queue *pq,QDataType x);
    
void QueuePop(Queue *pq);
    
QDataType QueueFront(Queue *pq);
    
QDataType QueueBack(Queue *pq);
    
bool QueueEmpty(Queue *pq);
    
int QueueSize(Queue *pq);

2.2 queue.c

#include"queue.h"
void QueueInit(Queue *pq)
{
    
	assert(pq);
    
	pq->
    head = pq->
    tail = NULL;

}

void QueueDestory(Queue *pq)
{
    
	assert(pq);
    
	QueueNode *cur = pq->
    head;

	while (cur)
	{
    
		QueueNode *next = cur->
    next;
    
		free(cur);
    
		cur = next;

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

}

void QueuePush(Queue *pq, QDataType x)
{
    
	assert(pq);
    
	QueueNode *newnode = (QueueNode*)malloc(sizeof(QueueNode));

	if (newnode == NULL)
	{
    
		printf("malloc fail\n");
    
		exit(-1);

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

	}

	else
	{
    
		pq->
    tail->
    next = newnode;
    
		pq->
    tail = newnode;

	}

}

void QueuePop(Queue *pq)
{
    
	assert(pq);
    
	assert(!QueueEmpty(pq));
    
	if (pq->
    head->
next == NULL)
	{
    
		free(pq->
    head);
    
		pq->
    head = pq->
    tail = NULL;

	}

	else
	{
    
		QueueNode *next = pq->
    head->
    next;
    
		free(pq->
    head);
    
		pq->
    head = next;

	}

}

QDataType QueueFront(Queue *pq)
{
    
	assert(pq);
    
	assert(!QueueEmpty(pq));
    
	return pq->
    head->
    data;

}

QDataType QueueBack(Queue *pq)
{
    
	assert(pq);
    
	assert(!QueueEmpty(pq));
    
	return pq->
    tail->
    data;

}

bool QueueEmpty(Queue *pq)
{
    
	assert(pq);
    
	return pq->
    head == NULL;

}

int QueueSize(Queue *pq)
{
    
	int size = 0;
    
	QueueNode *cur = pq->
    head;

	while (cur)
	{
    
		QueueNode *next = cur->
    next;
    
		++size;
    
		cur = cur->
    next;

	}
    
	return size;

}

2.3 test.c

#include"queue.h"
void TestOne()
{
    
	Queue q;
    
	QueueInit(&
    q);
    
	QueuePush(&
    q, 1);
    
	QueuePush(&
    q, 2);
    
	QueuePush(&
    q, 3);
    
	QueuePush(&
    q, 4);
    
	while (!QueueEmpty(&
q))
	{
    
		printf("%d  ", QueueFront(&
    q));
    
		QueuePop(&
    q);

	}
    
	printf("\n");
    
	QueueDestory(&
    q);

}

int main()
{
    
	TestOne();
    
	return 0;

}
    

总结

现在大家对于C++队列概念、结构和实现应该都清楚了吧,希望大家阅读完这篇文章能有所收获。最后,想要了解更多C++队列的内容,大家可以关注网络其它相关文章。

文本转载自PHP中文网

声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!


若转载请注明出处: C++队列概念及结构是啥,怎样实现队列?
本文地址: https://pptw.com/jishu/655055.html
Bootstrap怎么实现一个简单的表单验证功能 C语言运算符重载概念是什么,如何实现?

游客 回复需填写必要信息