1、代码

2、运行结果


1、代码

 #include <stdio.h>
#include <string.h> template <typename T> class ClsQueueData
{
private :
ClsQueueData * __m_next;
T * __m_Data; protected :
void _clear(); public :
ClsQueueData(T * pData);
ClsQueueData();
~ClsQueueData();
void destroy(); ClsQueueData * getNext();
int setNext(ClsQueueData * p); T * getData();
int setData(T * pData);
}; template <typename T> ClsQueueData<T>::ClsQueueData()
{
__m_next = NULL;
__m_Data = NULL;
} template <typename T> ClsQueueData<T>::ClsQueueData(T * p)
{
__m_next = NULL;
__m_Data = p;
} template <typename T> ClsQueueData<T>::~ClsQueueData()
{
_clear();
} template <typename T> ClsQueueData<T> * ClsQueueData<T>::getNext()
{
return __m_next;
} template <typename T> int ClsQueueData<T>::setNext(ClsQueueData * p)
{
if(NULL == p)
{
return -;
}
p->__m_next = NULL;
__m_next = p; return ;
} template <typename T> T * ClsQueueData<T>::getData()
{
return __m_Data;
} template <typename T> int ClsQueueData<T>::setData(T * pData)
{
__m_Data = pData;
return ;
} template <typename T> void ClsQueueData<T>::_clear()
{
if(NULL != __m_Data)
{
delete __m_Data;
}
__m_next = NULL;
} template <typename T> void ClsQueueData<T>::destroy()
{
__m_Data = NULL;
__m_next = NULL;
delete this;
} template <typename T> class ClsQueue
{
private :
ClsQueueData<T> * __m_head;
ClsQueueData<T> * __m_tail;
size_t __m_size; public :
ClsQueue();
~ClsQueue(); int push(T * pData);
int pop (T ** pData);
void clear();
size_t getSize();
}; template <typename T> ClsQueue<T>::ClsQueue()
{
__m_head = NULL;
__m_tail = NULL;
__m_size = ;
} template <typename T> ClsQueue<T>::~ClsQueue()
{
__m_size = ;
ClsQueueData<T> * p = __m_head;
while(p != NULL)
{
ClsQueueData<T> * x = p;
p = p->getNext();
delete x;
}
__m_head = NULL;
__m_tail = NULL;
} template <typename T> int ClsQueue<T>::push(T * pData)
{
ClsQueueData<T> * pElm = new ClsQueueData<T>;
if(NULL == pElm)
{
return -;
}
pElm->setData(pData);
if(NULL == __m_head)
{
__m_head = pElm;
__m_tail = pElm;
}
else if(NULL == __m_tail)
{
ClsQueueData<T> * p = __m_head;
while(p->getNext() != NULL)
{
p = p->getNext();
}
__m_tail = p;
}
else
{
__m_tail->setNext(pElm);
__m_tail = pElm;
}
__m_size ++; return ;
} template <typename T> int ClsQueue<T>::pop (T ** pData)
{
if(NULL == __m_head || NULL == pData)
{
return -;
}
ClsQueueData<T> * p = __m_head; if(__m_head == __m_tail)
{
__m_head = __m_tail = NULL;
}
else
{
__m_head = __m_head->getNext();
}
__m_size --;
*pData = p->getData();
p->destroy(); return ;
} template <typename T> void ClsQueue<T>::clear()
{
ClsQueueData<T> * p = __m_head;
while(p != NULL)
{
ClsQueueData<T> * x = p;
p = p->getNext();
delete x;
}
__m_head = __m_tail = NULL;
__m_size = ;
} template <typename T> size_t ClsQueue<T>::getSize()
{
return __m_size;
} int main()
{
ClsQueue<int> objQ;
int i = ;
for(i = ; i < ; i++)
{
int * x = new int;
*x = i;
objQ.push(x);
printf("line : [%d]; queue size : [%u]\n", __LINE__, objQ.getSize());
}
for(i = ; i < ; i++)
{
int * x = NULL;
int iRet = objQ.pop(&x);
printf("line : [%d]; queue size : [%u]\n", __LINE__, objQ.getSize());
if(- == iRet)
{
printf("get data faild\n");
continue;
}
if(i == *x)
{
printf("RIGHT\n");
}
else
{
printf("WRONG\n");
}
delete x;
}
for(i = ; i < ; i++)
{
int * x = new int;
*x = i;
objQ.push(x);
}
printf("line : [%d]; queue size : [%u]\n", __LINE__, objQ.getSize());
objQ.clear();
printf("line : [%d]; queue size : [%u]\n", __LINE__, objQ.getSize()); return ;
}

2、运行结果

  2.1)编译

g++ -g    -c -o queue.o queue.cpp
g++ -g -o queue queue.o

  2.2)运行结果

$ ./queue
line : []; queue size : []
line : []; queue size : []
line : []; queue size : []
line : []; queue size : []
line : []; queue size : []
line : []; queue size : []
line : []; queue size : []
line : []; queue size : []
line : []; queue size : []
line : []; queue size : []
line : []; queue size : []
RIGHT
line : []; queue size : []
RIGHT
line : []; queue size : []
RIGHT
line : []; queue size : []
RIGHT
line : []; queue size : []
RIGHT
line : []; queue size : []
RIGHT
line : []; queue size : []
RIGHT
line : []; queue size : []
RIGHT
line : []; queue size : []
RIGHT
line : []; queue size : []
RIGHT
line : []; queue size : []
get data faild
line : []; queue size : []
line : []; queue size : []

纪念逝去的岁月——C++实现一个队列(使用类模板)的更多相关文章

  1. 纪念逝去的岁月——C++实现一个栈(使用类模板)

    这个版本是上个版本的加强版,上个版本的代码:http://www.cnblogs.com/fengbohello/p/4542912.html 目录 1.代码 2.运行结果 1.代码 1.1 调试信息 ...

  2. 纪念逝去的岁月——C++实现一个栈

    1.代码 2.运行结果 1.代码 stack.cpp #include <stdio.h> #include <string.h> class ClsStack { priva ...

  3. 基于数组阻塞队列 ArrayBlockingQueue 的一个队列工具类

    java语言基于ArrayBlockingQueue 开发的一个根据特定前缀和后缀的队列.每天自动循环生成. 1.定义队列基类 Cookie package com.bytter.util.queue ...

  4. 纪念逝去的岁月——C/C++排序二叉树

    1.代码 2.运行结果 3.分析 1.代码 #include <stdio.h> #include <stdlib.h> typedef struct _Node { int ...

  5. 纪念逝去的岁月——C/C++二分查找

    代码 #include <stdio.h> int binarySearch(int iList[], int iNum, int iX, int * pPos) { if(NULL == ...

  6. 纪念逝去的岁月——C/C++快速排序

    快速排序 代码 #include <stdio.h> void printList(int iList[], int iLen) { ; ; i < iLen; i++) { pri ...

  7. 纪念逝去的岁月——C/C++交换排序

    交换排序 代码 #include <stdio.h> void printList(int iList[], int iLen) { ; ; i < iLen; i++) { pri ...

  8. 纪念逝去的岁月——C/C++选择排序

    选择排序 代码 #include <stdio.h> void printList(int iList[], int iLen) { ; ; i < iLen; i++) { pri ...

  9. 纪念逝去的岁月——C/C++冒泡排序

    冒泡排序 代码 #include <stdio.h> void printList(int iList[], int iLen) { ; ; i < iLen; i++) { pri ...

随机推荐

  1. POJ1285 Combinations, Once Again(背包 排列组合)

    背包解组合数学问题,n种物品,每种num[i]个,求取r个的方法数. 背包思想,f[j]表示当前取j个数的方法数,则状态转移方程为 f[j] += f[k](max(j - num[i], 0) &l ...

  2. WPF 创建自定义窗体

    在前面的一篇博客"WPF 自定义Metro Style窗体",展示了如何创建一个类似于Metro Style的Window,并在程序中使用.但是这个窗体不能够自由的改变大小.今天的 ...

  3. xcrun: error: active developer path ("/XX") does not exist

    MAC OS 10.9下执行命令 svn --version 报出如下错误: xcrun: error: active developer path ("/Users/username/Do ...

  4. ListView中每个item条目在被单击选中时能够高亮显示

    在布局文件中设定: android:listSelector="@android:color/holo_red_light" 在代码中实现 listView.setSelector ...

  5. Salesforce中所有常用类型字段的取值与赋值

    Salesforce中所有常用字段类型的定义以及如何用代码进行取值和赋值: Field Type的定义: http://www.salesforce.com/us/developer/docs/api ...

  6. Linux学习笔记(6)Linux常用命令之帮助命令与用户管理命令

    (1)man man命令用于获得命令或配置文件的帮助信息,英文原意为manual,所在路径为/usr/bin/man,其语法格式为: man [命令或配置文件] 注意:查看配置文件的帮助信息时无需绝对 ...

  7. LoadRunner 脚本学习 -- 使用动态链接库

    DLL = Dynamic Link Library DLL最重要的一个特点就扩展应用程序的特性. 再强大的工具也有不是万能的,通过调用动态库的方法极大地增强loadrunner的功能.当你在用loa ...

  8. 异步框架asyn4j的原理

    启动时调用init方法 public void init(){ if (!run){ run = true; //工作队列 workQueue = newPriorityBlockingQueue(m ...

  9. java中 几种数据库连接池 的写法

    JDBC连接数据库 •创建一个以JDBC连接数据库的程序,包含7个步骤: 1.加载JDBC驱动程序: 在连接数据库之前,首先要加载想要连接的数据库的驱动到JVM(Java虚拟机), 这通过java.l ...

  10. BZOJ 2716 [Violet 3]天使玩偶 ——KD-Tree

    [题目分析] KD-Tree的例题.同BZOJ2648. [代码] #include <cstdio> #include <cstring> #include <cstd ...