队列(链式存储)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 ...
随机推荐
- ArcGIS教程:加权叠加
摘要 使用经常使用測量比例叠加多个栅格数据,并依据各栅格数据的重要性分配权重. 插图 插图中,两个输入栅格已又一次分类为 1 至 3 三种公共測量级别.为每一个栅格均分配了一个影响百分比.这些像元值与 ...
- WIX在VS2012中如何制作中文安装包
WIX安装图文并茂简易说明一文中介绍了WIX安装包的制作过程,不过生成的是英文版的,如果需要制作中文版的安装包呢? 方法很简单,只需要两步. 1.增加中文UI的文件WixUI_zh-cn.wxl到工程 ...
- mac中vmware tools进行磁盘压缩和vmware-tools-cli的使用方法
前言: 高高兴兴的在vmware9.0中安装了mac10.8系统,然后学习iphone开发,但是发现下载的pdf都是基于xcode3.2.5的,又在10.8上面安装3.2.5,出现“五国”无法解决,最 ...
- Navigation Bar上的返回按钮文本颜色,箭头颜色以及导航栏按钮的颜色
自从IOS7后UINavigationBar的一些属性的行为发生了变化.你可以在下图看到: 现在,如果你要修改它们的颜色,用下面的代码: self.navigationController.navig ...
- 将WSDL文件生成的Java文件
- iOS的崩溃和编译错误
1. Command /bin/sh failed with exit code 127 这是因为mogenerator找不到路径,stackoverflow给出的答案是: If /usr/local ...
- oracle 不转义 &
在为表加注释,遇到有些注释包含'&' 但又不想写eacape, 在sqlplus下,set define off 即可将&输入到数据库中.
- 关于ER图和UML图之间的对比
ER图与UML图 ER图:实体-联系图(Entity-Relation Diagram)用来建立数据模型,在数据库系统概论中属于概念设计阶段,ER图提供了表示实体(即数据对象).属性和联系的方法,用来 ...
- (总结)CentOS Linux下VNC Server远程桌面配置详解
一.安装相应桌面环境与vnc服务端和客户端: # yum groupinstall "GNOME Desktop Environment"(CentOS 5.x安装GNOME桌面环 ...
- PHP 简易读取文件目录下的文件,生成css spirte图片
因为个人不是对PS熟悉,不清楚如何在PS中生成一张横向有序的spirte图片,使用了"css sprite V4.3"版本,生成的图片会出现压缩图片大小的情况,本想修改原作者开发的 ...