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. maven pom.xml 说明

    本文复制于:http://blog.csdn.net/zhuxinhua/article/details/5788546 一.pom.xml示例 <project> <modelVe ...

  2. Thinkphp 解决写入配置文件的方法

    在/Application/Common/Common创建function.php,然后添加以下代码: <?php /** * [writeArr 写入配置文件方法] * @param [typ ...

  3. jquery获取radio和select选中值

    //jquery 获取radio选中值 <input type="radio" name="c_type" value="a" > ...

  4. [Eclipse] Eclipse配置Tomcat插件

    1 . Eclipse IDE 3.6 for Java EE Developersat- 5.5.28 或者以上版本 : 2 . 安装 Tomcat 插件 , 文件名: tomcatPluginV3 ...

  5. Java优化之输出十万以内的质数

    (1)未经优化时所耗费的时间: public class PrimeNumber { public static void main(String[] args) { long start = Sys ...

  6. LoadRunner参数化之数据生成方式

    一般需要使用多条数据来完成实际事务的时候,需要参数化.而使用参数化可以方便实现很多实际事务,记得在哪里看到过,参数化是比C函数更高级的函数. 参数化的方法 先来个最常见的LR示例的登录脚本: Acti ...

  7. js实现上传图片及时预览

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  8. CSS中margin和padding的区别

    在CSS中margin是指从自身边框到另一个容器边框之间的距离,就是容器外距离.在CSS中padding是指自身边框到自身内部另一个容器边框之间的距离,就是容器内距离. 下面讲解 padding和ma ...

  9. SPOJ REPEATS 后缀数组

    题目链接:http://www.spoj.com/problems/REPEATS/en/ 题意:首先定义了一个字符串的重复度.即一个字符串由一个子串重复k次构成.那么最大的k即是该字符串的重复度.现 ...

  10. POJ 1840 HASH

    题目链接:http://poj.org/problem?id=1840 题意:公式a1x1^3+ a2x2^3+ a3x3^3+ a4x4^3+ a5x5^3=0,现在给定a1~a5,求有多少个(x1 ...