• 队列的定义--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)的更多相关文章

  1. 用go实现常用算法与数据结构——队列(queue)

    queue 简介 队列是一种非常常见的数据结构,日常生活中也能经常看到.一个典型的队列如下图(图片来自 segmentfault): 可以看出队列和我们日常生活中排队是基本一致的.都遵循 FIFO(F ...

  2. 数据结构 -- 队列Queue

    一.队列简介 定义 队列(queue)在计算机科学中,是一种先进先出的线性表. 它只允许在表的前端进行删除操作,而在表的后端进行插入操作.进行插入操作的端称为队尾,进行删除操作的端称为队头.队列中没有 ...

  3. [C++][数据结构]队列(queue)的实现

    对于队列的定义,前人之述备矣. 队列的实现方法与栈非常相似.我直接在我实现的那个栈的代码上加了一点东西,全局替换了一些标识符,就实现了这个队列. 我实现的是一个queue<value>容器 ...

  4. 数据结构-队列(Queue)

    #include <stdio.h> #include <stdlib.h> #define LIST_INIT_SIZE 10 #define LISTINCREMENT 1 ...

  5. Python与数据结构[2] -> 队列/Queue[0] -> 数组队列的 Python 实现

    队列 / Queue 数组队列 数组队列是队列基于数组的一种实现,其实现类似于数组栈,是一种FIFO的线性数据结构. Queue: <--| 1 | 2 | 3 | 4 | 5 |<-- ...

  6. java数据结构——队列、循环队列(Queue)

    每天进步一点点,坚持就是成功. 1.队列 /** * 人无完人,如有bug,还请斧正 * 继续学习Java数据结构————队列(列队) * 队列和栈一样,都是使用数组,但是队列多了一个队头,队头访问数 ...

  7. python基本数据结构栈stack和队列queue

    1,栈,后进先出,多用于反转 Python里面实现栈,就是把list包装成一个类,再添加一些方法作为栈的基本操作. 栈的实现: class Stack(object): #初始化栈为空列表 def _ ...

  8. 数据结构:队列queue 函数push() pop size empty front back

    队列queue: push() pop() size() empty() front() back() push()  队列中由于是先进先出,push即在队尾插入一个元素,如:可以输出:Hello W ...

  9. Java中的队列Queue,优先级队列PriorityQueue

    队列Queue 在java5中新增加了java.util.Queue接口,用以支持队列的常见操作.该接口扩展了java.util.Collection接口. Queue使用时要尽量避免Collecti ...

随机推荐

  1. python的字典数据类型及常用操作

    字典的定义与特性 字典是Python语言中唯一的映射类型. 定义:{key1: value1, key2: value2} 1.键与值用冒号“:”分开: 2.项与项用逗号“,”分开: 特性: 1.ke ...

  2. background兼容IE9以下版本

    .box {    width:100%;    height:80%;        background: url('img/nav_bg.png') no-repeat;    backgrou ...

  3. dos命令操作数据库(上)

    1.cd到mysql安装目录bin目录: 2.输入id.用户名和密码: 3.查看数据库实例: 4.创建一个实例: 5.删除一个实例: 6.创建一个表: 7.删除一个表: 8.表结构: 9.修改表: 你 ...

  4. 06 python操作MySQL和redis(进阶)

    python操作mysql.redis 阶段一.mysql事务 主要用于处理操作量大,复杂度高的数据.比如说,在人员管理系统中,你删除一个人员,你即需要删除人员的基本资料,也要删除和该人员相关的信息, ...

  5. python2.7练习小例子(十五)

        15):题目:输出指定格式的日期.     程序分析:使用 datetime 模块.     程序源代码: #!/usr/bin/python # -*- coding: UTF-8 -*- ...

  6. 长沙Uber优步司机奖励政策(3月28日)

    滴快车单单2.5倍,注册地址:http://www.udache.com/ 如何注册Uber司机(全国版最新最详细注册流程)/月入2万/不用抢单:http://www.cnblogs.com/mfry ...

  7. idea离线安装lombock插件

    技术交流群:233513714 安装过程 1.首先找到插件包 插件包可以在两个地方下载,分别是IDEA的官方插件仓库和GitHub里lombok-intellij-plugin仓库中的release包 ...

  8. Memcached Hash算法

    本文来自网易云社区 作者:吕宗胜 Hash算法 1. Memcached Hash介绍 我们在前面的文章中已经介绍过了Memcached的内存管理方式,LRU的策略.由于Memcached的数据存储方 ...

  9. 通过repcached实现memcached主从复制

    一.环境 服务器A:ubuntu server 12.04(192.168.1.111) 服务器B:ubuntu server 12.04 (47.50.13.111) 二.memcached安装 s ...

  10. es6严格模式需要注意的地方

    1.块级函数 "use strict"; if (true) { function f() { } // 语法错误 } es5中严格模式下禁止声明块级函数,而在es6的严格模式中可 ...