数据结构—队列(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 ...
随机推荐
- oracle 11g grid软件安装[20180121]
实验环境: 系统->Redhat 6.5 Oracle软件版本->oracle 11.2.0.4.0 系统初始化 设定hosts主机名和对应IP地 ...
- background兼容IE9以下版本
.box { width:100%; height:80%; background: url('img/nav_bg.png') no-repeat; backgrou ...
- Asp.Net Core使用Nginx实现反向代理
---恢复内容开始--- 前两篇文章介绍了使用Docker作为运行环境,用Nginx做反向代理的部署方法,这篇介绍一下使用Nginx配合.Net Core运行时直接在Liunx上裸奔的方法. 一.安装 ...
- Hadoop(25)-高可用集群配置,HDFS-HA和YARN-HA
一. HA概述 1. 所谓HA(High Available),即高可用(7*24小时不中断服务). 2. 实现高可用最关键的策略是消除单点故障.HA严格来说应该分成各个组件的HA机制:HDFS的HA ...
- SpringBoot学习(1)
springboot的自动配置功能,主要流程如下: 1 启动的时候加载我们的主配置类,也就是我们的入口类:从而开启我们的自动配置配置功能,这个是通过@EnableAutoConfiguration注解 ...
- centos7上部署新版 jumpserver 跳板机服务
CentOS 7 建议在一个纯净的 centos7上进行下面的安装部署 关闭 selinux 和防火墙 [root@jumpserver ~]# setenforce 0 [root@jumpserv ...
- 51定时器控制4各led,使用回调函数机制
程序转载自51hei,经过自己的实际验证,多了一种编程的思路技能,回调函数的基本思想也是基于事件机制的,哪个事件来了, 就执行哪个事件. 程序中,最多四个子定时器,说明51的处理速度是不够的,在中断中 ...
- Tensorflow的最佳实践
Tensorflow的最佳实践 1.变量管理 Tensorflow提供了变量管理机制,可直接通过变量的名字获取变量,无需通过传参数传递数据.方式如下: #以下为两种创建变量的方法 v=tf.get ...
- kafka topic 完全删除
kafka topic 完全删除 1.自动删除脚本(得配置server.properties 中 delete.topic.enable=true) ./kafka-topics.sh --zoo ...
- Java 基础------16进制转2进制
我们知道,数字8用二进制表示为:1000 用16进制表示为:8 那么我给你一个16进制的数字,0x7f,他的二进制是什么呢? 一个16进制的位数,用4位表示.比如,0x 7 f 其中: 7用4位二进制 ...