#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++模板实现的更多相关文章

  1. 队列链式存储 - 设计与实现 - API函数

    队列相关基础内容参我的博文:队列顺序存储 - 设计与实现 - API函数 队列也是一种特殊的线性表:可以用线性表链式存储来模拟队列的链式存储. 主要代码: // linkqueue.h // 队列链式 ...

  2. C++编程练习(6)----“实现简单的队列的链式存储结构“

    队列的链式存储结构,其实就是线性表的单链表,只不过它只能尾进头出.简称链队列. 实现代码如下: /* LinkQueue.h 头文件 */ #include<iostream> #defi ...

  3. 队列(FIFO)—循环队列、队列的链式存储

    1 队列的定义 队列是只允许在一端(队尾)进行插入操作,而在另一端(队头)进行删除操作的线性表. 2 队列的特点 1)先进先出是队列最大的特点,是应用中非常常见的模型,例如排队: 2)队列也属于线性表 ...

  4. 队列的顺序存储与链式存储c语言实现

    一. 队列 1.队列定义:只允许在表的一端进行插入,表的另一端进行删除操作的线性表. 2.循环队列:把存储队列的顺序队列在逻辑上视为一个环. 循环队列状态: 初始时:Q.front=Q.rear=0 ...

  5. [置顶] ※数据结构※→☆线性表结构(queue)☆============优先队列 链式存储结构(queue priority list)(十二)

    优先队列(priority queue) 普通的队列是一种先进先出的数据结构,元素在队列尾追加,而从队列头删除.在优先队列中,元素被赋予优先级.当访问元素时,具有最高优先级的元素最先删除.优先队列具有 ...

  6. Java实现链式存储的二叉查找树(递归方法)

    二叉查找树的定义: 二叉查找树或者是一颗空树,或者是一颗具有以下特性的非空二叉树: 1. 若左子树非空,则左子树上所有节点关键字值均小于根节点的关键字: 2. 若右子树非空,则右子树上所有节点关键字值 ...

  7. Java实现链式存储的二叉树

    二叉树的定义: 二叉树(BinaryTree)是n(n≥0)个结点的有限集,它或者是空集(n=0),或者由一个根结点及两棵互不相交的.分别称作这个根的左子树和右子树的二叉树组成. 二叉树的遍历方式主要 ...

  8. C#数据结构-二叉树-链式存储结构

    对比上一篇文章"顺序存储二叉树",链式存储二叉树的优点是节省空间. 二叉树的性质: 1.在二叉树的第i层上至多有2i-1个节点(i>=1). 2.深度为k的二叉树至多有2k- ...

  9. javascript实现数据结构:线性表--线性链表(链式存储结构)

    上一节中, 线性表的顺序存储结构的特点是逻辑关系上相邻的两个元素在物理位置上也相邻,因此可以随机存取表中任一元素,它的存储位置可用一个简单,直观的公式来表示.然后,另一方面来看,这个特点也造成这种存储 ...

  10. 栈的链式存储 - API实现

    基本概念 其它概念详情參看前一篇博文:栈的顺序存储 - 设计与实现 - API实现 这里也是运用了链表的链式存储API高速实现了栈的API. 代码: // linkstack.h // 链式存储栈的A ...

随机推荐

  1. 用JAVA写一个函数,功能例如以下: 随意给定一组数, 找出随意数相加之后的结果为35(随意设定)的情况

    用JAVA写一个函数.功能例如以下:随意给定一组数,比如{12,60,-8,99,15,35,17,18},找出随意数相加之后的结果为35(随意设定)的情况. 能够递归算法来解: package te ...

  2. 杭电 2602 Bone Collector

    Bone Collector Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) T ...

  3. percona监控模板图形解释

    http://blog.itpub.net/28916011/viewspace-1971933/ percona监控mysql的几张图形解释     最近,我仔细研究了一下percona监控mysq ...

  4. QT5中如何自定义窗口部件

    提升法 eg.(定义一个新的QLable部件)1.定义一个类class Label : public base, public QLabel //可以支持多重继承2.在qt creator中打开ui编 ...

  5. CSS_样式sample

    <!DOCTYPE HTML> <html> <head> <title>div浮动</title> <style type=&quo ...

  6. java_jdbc_batch处理_主键id获取

    //create1 速度较慢,create2较快,但是要根据数据库不同来决定 //ps = conn.prepareStatement(sql, Statement.RETURN_GENERATED_ ...

  7. 移动平台的meta标签-----神奇的功效

    对于桌面平台web布局中大家对meta标签再熟悉不过了,它永远位于 head 元素内部,对做SEO的朋友一定对meta有种特殊的感情吧,今天我们就来说说移动平台的meta标签,在移动平台meta标签究 ...

  8. Apache Rewrite 服务器变量

    Apache提供给rewirte模块的环境变量大概分成5个类型. 第一部分: HTTP headers 部分参数 参数名称: HTTP_USER_AGENT 样例参考值: Mozilla/5.0 (W ...

  9. 你不知道的 Javascript

    作用域 词法作用域:编译阶段确定(欺骗词法作用域 eval with) function foo(str){ "use strict" eval(str) console.log( ...

  10. Android_Menu_contextMenu

    xml文件: <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns ...