队列(链式存储)C++模板实现
#include <iostream>
using namespace std; //队列结点类
template <typename T>
class QueueNode{
private:
T data; //结点数值部分
QueueNode<T> * next; //指向下一结点
public:
QueueNode(T d=0 , QueueNode<T> *n=NULL){ //构造函数
data= d;
next=n;
};
void setData(T d){ //设置数值部分
data = d;
}
void setNext(QueueNode<T> * n){ //设置next
next = n;
}
T getData() const { //返回数值部分
return data;
}
QueueNode<T> * getNext() const{ //返回next
return next;
}
}; //队列类
template <typename T>
class Queue{
private:
int num; //队列结点个数
QueueNode<T> *front,*rear; //front队首指针(出队的一端),rear队尾指针(入队的一端)。
public:
Queue(){ //队列类构造函数
num=0;
front=NULL;
rear=NULL;
}
~Queue(){ //释放整个队列空间即释放整个链表
while(front){
QueueNode<T> * p = front;
front = front->getNext();
delete p;
}
}
void In(T x); //一个值为x的结点进队
void Out(); //队首结点出队
T getFront() const; //获得队首结点的值
bool isEmpty() const; //判断队列是否为空
int getLength() const; //获得队列长度
void printAll() const; //打印整个队列
}; //一个值为x的结点进队,实现部分
template <typename T>
void Queue<T>::In(T x){
if(isEmpty())
front=rear=new QueueNode<T>(x);
else {
QueueNode<T> *p= new QueueNode<T>(x);
rear->setNext(p);
rear = p;
}
num++;
} //队首结点出队,实现部分
template <typename T>
void Queue<T>::Out(){
QueueNode<T> *p=front;
front = front->getNext();
delete p;
num--;
} //获得队首结点的值,实现部分
template <typename T>
T Queue<T>::getFront() const {
return front->getData();
} //判断队列是否为空,实现部分
template <typename T>
bool Queue<T>::isEmpty() const {
return num==0;
} //获得队列长度,实现部分
template <typename T>
int Queue<T>::getLength() const {
return num;
} //打印整个队列,实现部分
template <typename T>
void Queue<T>::printAll() const{
if(isEmpty())
cout<<"队列为空"<<endl;
else{
QueueNode<T> *p =front;
int i =1;
while(p){
cout<<"第"<<i<<"个结点:"<<p->getData()<<endl;
p = p->getNext();
i++;
}
}
}
void main(){
Queue<int> a; //创建队列
cout<<"队列初始长度:"<<a.getLength()<<endl<<endl;
a.In(1); //值为1的结点进队
a.In(2); //值为2的结点进队
a.In(3); //值为3的结点进队
a.In(4); //值为4的结点进队
a.In(5); //值为5的结点进队
cout<<"队列长度:"<<a.getLength()<<endl;
a.printAll(); //打印队列
a.Out(); //队首结点出队
a.Out(); //队首结点出队
cout<<endl<<"队列长度:"<<a.getLength()<<endl;
a.printAll(); //打印队列
}
队列(链式存储)C++模板实现的更多相关文章
- 队列链式存储 - 设计与实现 - API函数
队列相关基础内容参我的博文:队列顺序存储 - 设计与实现 - API函数 队列也是一种特殊的线性表:可以用线性表链式存储来模拟队列的链式存储. 主要代码: // linkqueue.h // 队列链式 ...
- C++编程练习(6)----“实现简单的队列的链式存储结构“
队列的链式存储结构,其实就是线性表的单链表,只不过它只能尾进头出.简称链队列. 实现代码如下: /* LinkQueue.h 头文件 */ #include<iostream> #defi ...
- 队列(FIFO)—循环队列、队列的链式存储
1 队列的定义 队列是只允许在一端(队尾)进行插入操作,而在另一端(队头)进行删除操作的线性表. 2 队列的特点 1)先进先出是队列最大的特点,是应用中非常常见的模型,例如排队: 2)队列也属于线性表 ...
- 队列的顺序存储与链式存储c语言实现
一. 队列 1.队列定义:只允许在表的一端进行插入,表的另一端进行删除操作的线性表. 2.循环队列:把存储队列的顺序队列在逻辑上视为一个环. 循环队列状态: 初始时:Q.front=Q.rear=0 ...
- [置顶] ※数据结构※→☆线性表结构(queue)☆============优先队列 链式存储结构(queue priority list)(十二)
优先队列(priority queue) 普通的队列是一种先进先出的数据结构,元素在队列尾追加,而从队列头删除.在优先队列中,元素被赋予优先级.当访问元素时,具有最高优先级的元素最先删除.优先队列具有 ...
- Java实现链式存储的二叉查找树(递归方法)
二叉查找树的定义: 二叉查找树或者是一颗空树,或者是一颗具有以下特性的非空二叉树: 1. 若左子树非空,则左子树上所有节点关键字值均小于根节点的关键字: 2. 若右子树非空,则右子树上所有节点关键字值 ...
- Java实现链式存储的二叉树
二叉树的定义: 二叉树(BinaryTree)是n(n≥0)个结点的有限集,它或者是空集(n=0),或者由一个根结点及两棵互不相交的.分别称作这个根的左子树和右子树的二叉树组成. 二叉树的遍历方式主要 ...
- C#数据结构-二叉树-链式存储结构
对比上一篇文章"顺序存储二叉树",链式存储二叉树的优点是节省空间. 二叉树的性质: 1.在二叉树的第i层上至多有2i-1个节点(i>=1). 2.深度为k的二叉树至多有2k- ...
- javascript实现数据结构:线性表--线性链表(链式存储结构)
上一节中, 线性表的顺序存储结构的特点是逻辑关系上相邻的两个元素在物理位置上也相邻,因此可以随机存取表中任一元素,它的存储位置可用一个简单,直观的公式来表示.然后,另一方面来看,这个特点也造成这种存储 ...
- 栈的链式存储 - API实现
基本概念 其它概念详情參看前一篇博文:栈的顺序存储 - 设计与实现 - API实现 这里也是运用了链表的链式存储API高速实现了栈的API. 代码: // linkstack.h // 链式存储栈的A ...
随机推荐
- Codeforces Round #200 (Div. 1) B. Alternating Current 栈
B. Alternating Current Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/343 ...
- 应用之星推出“图文app”制作工具,并附上教程
应用之星已推出的"图文"app制作工具,是高速制作图文电子书,图文杂志等一切有关图文资料的app生成工具,以下跟大家介绍"图文"制作教程,简单快捷,大致分三大步 ...
- 百度之星资格赛,hdu 4825 XOR SUM
显然是要建一棵0.1树 事实上非常easy就是二叉树,仅仅只是为了操作简便,即程序的速度,所以就採用静态树,即不动态分配内存,使用较大的全局数组.0是根节点 #include<cstdio> ...
- Android仿腾讯应用宝 应用市场,下载界面, 有了进展button
近期应用市场做,需要使用.下载与进度显示button,因此,要寻找其他大神做,直接用于改善.和很多无用的切出.在改进共享后. 再一次改变.当下载进度时,有进步.进度显示自己主动运行文本.并设置背景为灰 ...
- iOS快速集成检查更新
一直以为Appstore有了检查版本是否更新的机制,我们在APP上做这个更新功能会被拒,但是也有看到一些APP也是做了这个更新功能的.因为在网上没有找到完全正确的方法能获取到iTunes里的数据的,于 ...
- 升级ADT22.6后,Android模拟器无法创建
这 两天,在社区里看到有小伙伴们反应,自己在Eclipse下无法创建Android模拟器的问题.起初,自己也没太在意,我一直使用的是 Genymotion模拟器.然后,问题不解决,总有那么一天会让自己 ...
- js上传文件获取客户端地址
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- careercup-C和C++ 13.5
13.5 谈谈C语言关键字”volatile”的意义(或重要性)? 解答 关键字volatile的作用是指示编译器,即使代码不对变量做任何改动,该变量的值仍可能被外界修改.操作系统.硬件或其他线程都可 ...
- 【转】使用BBB的device tree和cape(重新整理版)
只要你想用BBB做哪怕一丁点涉及到硬件的东西,你就不可避免地要用到cape和device tree的知识.所以尽管它们看起来很陌生而且有点复杂,但还是得学.其实用起来不难的.下面我只讲使用时必须会的内 ...
- A+B Problem III
描述 求A+B是否与C相等. 输入 T组测试数据. 每组数据中有三个实数A,B,C(-10000.0<=A,B<=10000.0,-20000.0<=C<=20000.0) 数 ...