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. 湘潭1247 Pair-Pair(树状数组)

    分析: 给定n个二元组,求选出两个二元组(可以是同一个)组成一序列其LIS为1,2,3,4的方法数. 分别记为s1, s2, s3, s4 s1,s4对应的情形为a >= b >= c & ...

  2. css3 妙味

    css3 属性 <!DOCTYPE html> <html> <head lang="en"> <meta charset="U ...

  3. C语言中的回调函数调用过程以及函数指针使用

    回调函数比喻: 你到一个商店买东西,刚好你要的东西没有货,于是你在店员那里留下了你的电话,过了几天店里有货了,店员就打了你的电话,然后你接到电话后就到店里去取了货. 在这个例子里,你的电话号码就叫回调 ...

  4. 第一篇:SOUI是什么?

    概述 用C++做产品最痛苦的是什么?肯定是做UI. SOUI的使命就是把痛苦的UI变化成快乐的UI. 什么?UI还能快乐?脑子进水了吗? 当你看完这个系统教程的时候相信你面对UI至少不会再痛苦.你可以 ...

  5. DOM对象与jquery对象的区别

    jQuery对象和DOM对象使用说明,需要的朋友可以参考下. 1.jQuery对象和DOM对象 第一次学习jQuery,经常分辨不清哪些是jQuery对象,哪些是 DOM对象,因此需要重点了解jQue ...

  6. cocos2dx游戏开发——微信打飞机学习笔记(一)——开发准备

    一.环境的搭建 1.Windows开发准备: (1)软件下载及安装 •下载Cocos2d-x 最新版本:http://www.cocos2d-x.org/download 或者从Cocos2d-x G ...

  7. SQL Server2008函数大全(完整版)

    SQL2008 表达式:是常量.变量.列或函数等与运算符的任意组合. 1. 字符串函数 函数 名称 参数 示例 说明 ascii(字符串表达式) select ascii('abc') 返回 97 返 ...

  8. hadoop中map和reduce的数量设置问题

    转载http://my.oschina.net/Chanthon/blog/150500 map和reduce是hadoop的核心功能,hadoop正是通过多个map和reduce的并行运行来实现任务 ...

  9. 临时变量不能作为非const类型引用形参的实参

    摘要:     非const 引用形参只能与完全同类型的非const对象关联.      具体含义为:(1)不能用const类型的对象传递给非const引用形参:                  ( ...

  10. Android优化

    ListView的优化 复用convertview , 历史的view对象 减少子孩子查询的次数 viewholder 异步加载数据(把图片缓存) 条目多时分页加载数据 加载时显示进度条让用户等待 I ...