C++ 模板应用 实现一个Queue 队列

#include<iostream>
using namespace std;
template <typename T>
class Queue
{
public:
	Queue()
	{
		Node<T> *node=new Node<T>();
		node->data=NULL;
		node->next=NULL;
		qfront=qrear=node;
	}
	template <typename T>
	struct Node
	{
		Node<T> *next;
		T data;
	};
	bool empty() const;
	void pop();
	T & front();
	T & back();
	void push(const T &);
	int size() const;
private:
	Node<T> *qfront,*qrear;
};
template <typename T>
T &Queue<T>::back()
{
	if(!empty())
		return qrear->data;
}
template <typename T>
T &Queue<T>::front()
{
	if(!empty())
	{
		Node<T> *p=qfront->next;
		return p->data;
	}
}
template <typename T>
bool Queue<T>::empty() const
{
	if(qfront==qrear)
		return true;
	else
		return false;
}
template <typename T>
void Queue<T>::pop()
{
	if(!empty())
	{
		Node<T> *p=qfront->next;
		qfront->next=p->next;
		if(p==qrear)
			qrear=qfront;
		delete p;
		p=NULL;

	}
}
template<typename T>
void Queue<T>::push(const T & t)
{
	Node<T> *node=new Node<T>;
	node->data=t;
	node->next=NULL;
	qrear->next=node;
	qrear=node;
}
template<typename T>
int Queue<T>::size() const
{
	Node<T> *p=qfront;
	if(empty())
		return 0;
	else
	{
		int i=1;
		while(p->next!=qrear)
		{
			p=p->next;
			i++;
		}
		return i;
	}
}

int main()
{
	Queue<int> q;
	q.push(1);
	q.push(2);
	q.pop();
	q.pop();
	q.pop();
	cout<<q.size()<<endl;
	getchar();
	return 0;
}

时间: 2024-10-16 19:11:46

C++ 模板应用 实现一个Queue 队列的相关文章

C++ Primer 学习笔记_11_标准模板库_stack、queue队列容器与priority_queue优先队列容器

C++ Primer 学习笔记_11_标准模板库_stack.queue队列容器与priority_queue优先队列容器 1.stack堆栈 stack堆栈是一个后进先出(Last In First Out,LIFO)的线性表,插入和删除元素都只能在表的一端进行.插入元素的一端称为栈顶,而另一端称为栈底.插入元素叫入栈(Push),删除元素叫出栈(Pop).下图是堆栈示意图 堆栈只提供入栈,出栈,栈顶元素访问和判断是否为空等几种方法.采用push()方法将元素入栈:采用pop()方法出栈:采用

13 join 线程锁之Lock\Rlock\信号量 将线程变为守护进程 Event事件  queue队列 生产者消费者模型 Queue队列 开发一个线程池

本节内容 操作系统发展史介绍 进程.与线程区别 python GIL全局解释器锁 线程 语法 join 线程锁之Lock\Rlock\信号量 将线程变为守护进程 Event事件 queue队列 生产者消费者模型 Queue队列 开发一个线程池 进程 语法 进程间通讯 进程池 操作系统发展史 手工操作(无操作系统) 1946年第一台计算机诞生--20世纪50年代中期,还未出现操作系统,计算机工作采用手工操作方式. 手工操作程序员将对应于程序和数据的已穿孔的纸带(或卡片)装入输入机,然后启动输入机把

C++STL模板之queue队列的用法

1 #include <iostream> 2 3 #include <queue> 4 5 #include <assert.h> 6 /* 7 调用的时候要有头文件: #include<stdlib.h> 或 #include<cstdlib> + 8 #include<queue> #include<queue> 9 详细用法: 10 定义一个queue的变量 queue<Type> M 11 查看是否为

Stack集合 Queue队列集合 Hashtable哈希表

Stack集合 干草堆集合 栈集合 栈;stack,先进后出,一个一个赋值,一个一个取值,安装顺序来. 属性和方法 实例化 初始化 Stack st = new Stack(); 添加元素 1 个数 2 Console.WriteLine(st.Count); 3 只要使用一次pop方法,就会从最后一个元素开始排除 弹出 4 Console.WriteLine(st.Pop()); 5 Console.WriteLine(st.Count); 6 只想查看不弹出 7 Console.WriteL

使用NODEJS+REDIS开发一个消息队列以及定时任务处理

作者:RobanLee 原创文章,转载请注明: 萝卜李 http://www.robanlee.com 源码在这里: https://github.com/robanlee123/RobCron 时间有限,就不详细注释,有问题或者意见欢迎@我,也欢迎大家批评指正. 本文所必须的一些资料如下: 1. NODEJS ==> 可以去NODEJS.ORG下载最新的源码.2. Redis ==> Redis.io3. KUE ==> Nodejs的一个开源队列系统4. NODE-SCHEDULE

python2.0_s12_day9之day8遗留知识(queue队列&amp;生产者消费者模型)

4.线程 1.语法 2.join 3.线程锁之Lock\Rlock\信号量 4.将线程变为守护进程 5.Event事件 * 6.queue队列 * 7.生产者消费者模型 4.6 queue队列 queue非常有用,当信息必须安全的在多个线程之间进行数据交换的时候就应该想到queue 所以,queue它能保证数据被安全的在多个线程之间进行交换,那他就是天生的线程安全. queue有那么几种: class queue.Queue(maxsize=0) # 先入先出 class queue.LifoQ

python threading模块使用 以及python多线程操作的实践(使用Queue队列模块)

今天花了近乎一天的时间研究python关于多线程的问题,查看了大量源码 自己也实践了一个生产消费者模型,所以把一天的收获总结一下. 由于GIL(Global Interpreter Lock)锁的关系,纯的python代码处理一般逻辑的确无法活动性能上的极大提升,但是在处理需要等待外部资源返回或多用户的应用程序中,多线程仍然可以作为一个比较好的工具来进行使用. python提供了两个模块thread和threading 来支持python的多线程操作.通俗的讲一般现在我们只使用threading

C#基础---Queue(队列)的应用

   Queue队列,特性先进先出. 在一些项目中我们会遇到对一些数据的Check,如果数据不符合条件将会把不通过的信息返回到界面.但是对于有的数据可能会Check很多条件,如果一个数据一旦很多条件不通过,那么全部错误返回到界面,可能会让用户束手无策.我们有时候往往在一个流程中.只将Check流程中第一个不符合条件的错误提示给用户,让用户修改.首先我们就想到了队列,通过队列将所有的Check方法注册,然后依次出列.执行. Demo背景: XX公司招人,对员工的居住地点,姓氏,年龄都有要求. 一.

JDK QUEUE队列

Java  Queue基础 Queue: 基本上,一个队列就是一个先入先出(FIFO)的数据结构. offer,add区别: 一些队列有大小限制,因此如果想在一个满的队列中加入一个新项,多出的项就会被拒绝. 这时新的 offer 方法就可以起作用了.它不是对调用 add() 方法抛出一个 unchecked 异常,而只是得到由 offer() 返回的 false. poll,remove区别: remove() 和 poll() 方法都是从队列中删除第一个元素(head).remove() 的行