主页 > 创业  > 

【C++/数据结构】队列

【C++/数据结构】队列
零.导言

        和上次学习的栈一样,队列是一种数据结构,在后续的学习中可能经常使用,因此我们今天就来学习如何实现队列,以更好地使用它。


一.队列的模拟实现

        在类(class)Queue 中,包含成员变量和成员函数;同时,队列的实现要相对复杂一些。

我们先看代码:

#include<iostream> #include<cassert> using namespace std; typedef int QueueDataType; class Queue { public: Queue() { _phead = _ptail = nullptr; _size = 0; } ~Queue() { QueueNode* pcur = _phead; while (pcur) { QueueNode* next = pcur->_next; free(pcur); pcur = next; } _phead = _ptail = nullptr; _size = 0; } void Push(QueueDataType n) { QueueNode* newnode = (QueueNode*)malloc(sizeof(QueueNode)); if (newnode == nullptr) { perror("malloc fail!"); exit(1); } newnode->_val = n; newnode->_next = nullptr; if (_phead == nullptr) { _phead = _ptail = newnode; } else { _ptail->_next = newnode; _ptail = _ptail->_next; } _size++; } bool isEmpty() { return _phead == nullptr; } void Pop() { assert(!isEmpty()); if (_phead == _ptail) { free(_phead); _phead = _ptail = nullptr; } else { QueueNode* next = _phead->_next; free(_phead); _phead = next; } _size--; } QueueDataType Front() { assert(!isEmpty()); return _phead->_val; } QueueDataType Back() { assert(!isEmpty()); return _ptail->_val; } int Size() { return _size; } private: class QueueNode { friend class Queue; QueueDataType _val; QueueNode* _next; }; QueueNode* _phead; QueueNode* _ptail; int _size; };
二.队列的相关解释

        如上:队列的实现需要定义两个结构体,第一是 QueueNode ,是链表的节点类型;第二是 Queue ,指向队列的头和尾。

        其中:构造函数和析构函数很容易辨认,Push 是向队尾插入数据,Pop 是从队头出数据,Front 是取队头数据,Back 是取队尾数据,Size 是返回有效元素个数。


三.队列的特性

        队列的特性是:所有数据都只能从队尾入,从队头出。和堆的形式相反,先进先出。运用这个特性,我们可以便捷的解决堆不好解决的问题。


四.相关链接

        【C++/数据结构】栈-CSDN博客


标签:

【C++/数据结构】队列由讯客互联创业栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“【C++/数据结构】队列