数据结构—队列(Queue)
- 队列的定义--Queue
队列是只允许在表的队尾插入,在表的队头进行删除。队列具有先进先出的特性(FIFO, First In First Out)。

- 队列提供了下面的操作
q.empty() 如果队列为空返回true,否则返回false
q.size() 返回队列中元素的个数
q.pop() 删除队列首元素但不返回其值
q.front() 返回队首元素的值,但不删除该元素
q.push() 在队尾压入新元素
q.back() 返回队列尾元素的值,但不删除该元素
- 队列的实现
下面是用C++实现的一个队列结构的源码(链表)
#pragma once
#include<iostream>
#include<assert.h>
using namespace std;
template<typename T>
class Queue
{
public:
Queue()
:pHead(NULL)
, pTail(NULL)
{}
Queue(const QueueNode<T>& q)
{
QueueNode<T>*Node = q.pHead;
while (Node)
{
Push(Node->data);
Node = Node->next;
}
}
~Queue()
{
QueueNode<T> *Node = pHead;
while (Node)
{
QueueNode<T>*Del = Node;
Node = Node->next;
delete Del;
}
pHead = NULL;
size = ;
}
QueueNode<T>& operator = (const QueueNode<T>& q)
{
if (this != &q)
{
Node<T> *pNode = other._pHead;
while (NULL != pNode)
{
Push(pNode->_data);
pNode = pNode->_pNext;
}
} return *this;
}
void Push(const T &data)
{
if (pHead == NULL)
{
pTail = pHead = new QueueNode<T>(data);
}
else
{
pTail ->next = new QueueNode<T>(data);
pTail = pTail->next;
}
}
void Pop()
{
assert(NULL != pHead);
if (pHead == pTail)
{
delete pHead;
pHead = pTail = NULL;
}
else
{
QueueNode<T>*Del = pHead;
pHead = pHead->next;
delete Del;
}
}
bool Empty()
{
return pHead == NULL;
}
T& Fornt()
{
assert(pHead); return pHead->data;
} T& Back()
{
assert(pTail); return pTail->data;
}
size_t Size()
{
while (pHead != NULL)
{
size++;
pHead = pHead->next;
}
return size;
}
void Print()
{
QueueNode<T>*cur = pHead;
while (cur)
{
cout << cur->data << "->";
cur = cur->next;
}
cout << "NULL";
}
protected:
QueueNode<T>* _BuyNode(const T& data)
{
return new QueueNode<T>(data);
}
protected:
QueueNode<T>* pHead;
QueueNode<T>* pTail;
size_t size;
};
void main()
{
Queue<int> q;
q.Push();
q.Push();
q.Push();
q.Pop();
q.Print();
cout<<q.Size();
cout<<q.Fornt();
cout << q.Back();
system("pause"); }
数据结构—队列(Queue)的更多相关文章
- 用go实现常用算法与数据结构——队列(queue)
queue 简介 队列是一种非常常见的数据结构,日常生活中也能经常看到.一个典型的队列如下图(图片来自 segmentfault): 可以看出队列和我们日常生活中排队是基本一致的.都遵循 FIFO(F ...
- 数据结构 -- 队列Queue
一.队列简介 定义 队列(queue)在计算机科学中,是一种先进先出的线性表. 它只允许在表的前端进行删除操作,而在表的后端进行插入操作.进行插入操作的端称为队尾,进行删除操作的端称为队头.队列中没有 ...
- [C++][数据结构]队列(queue)的实现
对于队列的定义,前人之述备矣. 队列的实现方法与栈非常相似.我直接在我实现的那个栈的代码上加了一点东西,全局替换了一些标识符,就实现了这个队列. 我实现的是一个queue<value>容器 ...
- 数据结构-队列(Queue)
#include <stdio.h> #include <stdlib.h> #define LIST_INIT_SIZE 10 #define LISTINCREMENT 1 ...
- Python与数据结构[2] -> 队列/Queue[0] -> 数组队列的 Python 实现
队列 / Queue 数组队列 数组队列是队列基于数组的一种实现,其实现类似于数组栈,是一种FIFO的线性数据结构. Queue: <--| 1 | 2 | 3 | 4 | 5 |<-- ...
- java数据结构——队列、循环队列(Queue)
每天进步一点点,坚持就是成功. 1.队列 /** * 人无完人,如有bug,还请斧正 * 继续学习Java数据结构————队列(列队) * 队列和栈一样,都是使用数组,但是队列多了一个队头,队头访问数 ...
- python基本数据结构栈stack和队列queue
1,栈,后进先出,多用于反转 Python里面实现栈,就是把list包装成一个类,再添加一些方法作为栈的基本操作. 栈的实现: class Stack(object): #初始化栈为空列表 def _ ...
- 数据结构:队列queue 函数push() pop size empty front back
队列queue: push() pop() size() empty() front() back() push() 队列中由于是先进先出,push即在队尾插入一个元素,如:可以输出:Hello W ...
- Java中的队列Queue,优先级队列PriorityQueue
队列Queue 在java5中新增加了java.util.Queue接口,用以支持队列的常见操作.该接口扩展了java.util.Collection接口. Queue使用时要尽量避免Collecti ...
随机推荐
- 详解Linux运维工程师
运维工程师是从一个呆逼进化为苦逼再成长为牛逼的过程,前提在于你要能忍能干能拼,还要具有敏锐的嗅觉感知前方潮流变化.如:今年大数据,人工智能比较火……(相对表示就是 Python 比较火) 之前写过运维 ...
- ElasticSearch : 基础
#新建索引以及类型: PUT http://10.18.43.3:9200/test { "settings": { "number_of_shards": 3 ...
- 多线程编程以及socket编程_Linux程序设计4chapter15
看了Linux程序设计4中文版,学习了多线程编程和socket编程.本文的程序参考自Linux程序设计4的第15章. 设计了一个客户端程序,一个服务端程序.使用TCP协议进行数据传输. 客户端进程创建 ...
- 解决 Python2 和 Python3 的共存问题
首先安装两种版本的Python 进入系统属性更改环境变量 将两个版本的安装路径找出. 添加至PATH中,变量之间用分号隔开. D:\Python36\Scripts\;D:\Python36\;D:\ ...
- [POJ1785]Binary Search Heap Construction(笛卡尔树)
Code #include <cstdio> #include <algorithm> #include <cstring> #define N 500010 us ...
- HDU暑假多校第八场G-Card Game
一.题意 给出N个卡牌,卡牌的正反两面具有两个数字,取值范围为[1,2*n],给出若干个默认正面向上的卡牌,求最小反转多少张卡牌可以使得,每张卡牌朝上的面上都有一个不同的数字,同时满足最小反转次数的反 ...
- Angularjs 跨域post数据到springmvc
先贴网上己有解决方案链接: http://www.tuicool.com/articles/umymmqY (讲的是springmvc怎么做才可以跨域) http://my.oschina.net/ ...
- python2.7入门---Number(数字)
今天咱们来简单分享一下关于python中的一种数据类型和操作方法.费话不多说哈,咱们直接来进行实践加理论.首先,我们要知道,Python Number 数据类型用于存储数.数据类型是不允许改变 ...
- 【Consul】Consul架构-Consensus协议
Consul使用Consensus协议提供一致性(Consistency)--CAP定义的一致性.Consensus协议是基于"Raft:In search of an Understand ...
- spring data elasticsearch多索引查询
一次查询多个索引数据 es里可以这样写 GET 索引1,索引2,索引3/_search 也可以这样 给索引创建别名,多个索引可以使用一个别名 POST /_aliases { "action ...