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. wp8 入门到精通 高仿微信发信息 键盘不消失

    <Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0"> < ...

  2. WPF初学(一)——布局【良好界面的基础】

    由Winform转到WPF的一部分人,很可能忽略掉布局,习惯性的使用固定定位.然而,没有良好的布局,后面界面控件画的再好看,花哨,都不过是鲜花插在牛粪上,很可能始终都是一坨??(呵呵). 闲话少说,首 ...

  3. 如何hash一条有向边

    之前这个问题还困扰了我好久,但是现在我才明白这个很蠢的问题 那就是(3,7)(4,9)(3,3)这种有向序点对(括号可能用的不对) 我们可以变成对"(3,7)"字符串的hash,当 ...

  4. for循环嵌套

    今天复习了分支语句以及for循环,新内容主要讲解了for循环的嵌套: 外循环控制行,内循环控制列 下面几个实例: 五行五列的矩阵 左下角是直角的三角形: 左上角是直角的三角形: 右上角为直角的三角形: ...

  5. 一个android样本的过保护

    前段时间处理一个android样本,样本本身作用不大,但是加了保护,遂做一个过保护的记录 通过dex2jar将dex转为jar文件的时候发现无法成功,通过抛出的异常可知,此处MainActivity: ...

  6. express-4 质量保证(1)

    QA 在Web开发中,质量可以分解为四个维度: 到达率: 到达率是指产品的市场普及程度,即查看网站或使用服务的人数.到达率和盈利能力是正相关关系:访问网站的人越多,购买产品或服务的人就越多.从开发的角 ...

  7. PHP学习笔记(一)

    by Alina.Xia, dated on 2016.11.27 一.MyAql数据库PHP在开发web站点或管理一些系统时,需要对大量的数据进行保存.XML文件和文本文件虽然可以作为数据的整体,但 ...

  8. CSS3-基于浮动的布局,响应式WEB设计,定位网页上的元素,设计打印页面的css技术

    基于浮动的布局: 1.除非图片设置了宽度,否则始终应该要对浮动的图片设置一个宽度,这样可以让浏览器给其他内容腾出环绕的空间 2.当侧边栏的高度与主内容区的高度不一致的时候,可以用个margin进行调整 ...

  9. UI中经常出现的下拉框下拉自动筛选效果的实现

    小需求是当你在第一个下拉框选择了国家时,会自动更新第二个省份的下拉框,效果如下 两个下拉选择Html如下: <select id="country_select"> & ...

  10. 解决Ue4C++使用UMG之类的模块时出现的拼写错误

    在cs文件中加入UMG模块后,在项目文件上右键生成项目文件即可解决