纪念逝去的岁月——C++实现一个队列(使用类模板)
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++实现一个队列(使用类模板)的更多相关文章
- 纪念逝去的岁月——C++实现一个栈(使用类模板)
这个版本是上个版本的加强版,上个版本的代码:http://www.cnblogs.com/fengbohello/p/4542912.html 目录 1.代码 2.运行结果 1.代码 1.1 调试信息 ...
- 纪念逝去的岁月——C++实现一个栈
1.代码 2.运行结果 1.代码 stack.cpp #include <stdio.h> #include <string.h> class ClsStack { priva ...
- 基于数组阻塞队列 ArrayBlockingQueue 的一个队列工具类
java语言基于ArrayBlockingQueue 开发的一个根据特定前缀和后缀的队列.每天自动循环生成. 1.定义队列基类 Cookie package com.bytter.util.queue ...
- 纪念逝去的岁月——C/C++排序二叉树
1.代码 2.运行结果 3.分析 1.代码 #include <stdio.h> #include <stdlib.h> typedef struct _Node { int ...
- 纪念逝去的岁月——C/C++二分查找
代码 #include <stdio.h> int binarySearch(int iList[], int iNum, int iX, int * pPos) { if(NULL == ...
- 纪念逝去的岁月——C/C++快速排序
快速排序 代码 #include <stdio.h> void printList(int iList[], int iLen) { ; ; i < iLen; i++) { pri ...
- 纪念逝去的岁月——C/C++交换排序
交换排序 代码 #include <stdio.h> void printList(int iList[], int iLen) { ; ; i < iLen; i++) { pri ...
- 纪念逝去的岁月——C/C++选择排序
选择排序 代码 #include <stdio.h> void printList(int iList[], int iLen) { ; ; i < iLen; i++) { pri ...
- 纪念逝去的岁月——C/C++冒泡排序
冒泡排序 代码 #include <stdio.h> void printList(int iList[], int iLen) { ; ; i < iLen; i++) { pri ...
随机推荐
- FTP是否可以修改为其它端口?
对服务器的ftp端口进行了修改,把21端口改了,比如221端口,就这样用221连接的时候,连接登录成功,但打不开目录,为何,总结如下: 1.完成一个FTP的传输过程不仅仅只需要21一个端口,而是2个端 ...
- 攻城狮在路上(叁)Linux(二十六)--- linux文件系统的特殊查看与操作
一.boot sector 与 super block的关系: 1.boot sector用于存放引导装载程序,占用1024个字节. 2.super block的大小也为1024字节. 3.若bloc ...
- web magic 小结
缘起 写了多年的程序,鲜有产出物,于是最近打算做个不可说的东西来祭奠逝去的青春.数据,是一个程序的起点,我们没有数以亿计的用户,无法让活跃用户给我们产生数据,那就只能去别人的站点上借点数据了.这个功能 ...
- .NET NLog 详解(五) - Condition Expression
Sample <!-- during normal execution only log Info messages --> <defaultFilter>level > ...
- Linggle: 英语写作学习搜索引擎
Linggle 搜索引擎是一个可用于英语写作的语法.句子工具,可帮助学习者分析更准确的英文写作建议,能够根据词性来推测短句和句子,可精准的分享出完整英文句子如何撰写. Linggle 是台湾学术团队研 ...
- OpenMesh 删除网格顶点
OpenMesh 提供了 delete_vertex() 函数来实现从网格中删除顶点,在删除掉顶点的同时,所有与该顶点相连的边也同时被删除. OpenMesh 官方文档 中给的顶点删除函数声明如下: ...
- Linux文本比较-diff&awk
最近为了完成工作,需要将两个文件A.old和A进行比较,然后将A中新增加的部分保存到A中,其他部分删除.经过查找相关资料,发现有两种比较好的方法. 1. 使用diff命令 diff old.file ...
- python学习-爬虫
转载自 静觅的博客 最普通下载网页 import urrlib2 response = urllib2.urlopen("http://www.baidu.com") print ...
- Liferay 6.2 改造系列之十八:修改登录Portlet配置,去除无用链接
在/portal-master/portal-impl/src/portal.properties文件中,有如下配置: # # Input a list of sections that will b ...
- AngularJS学习之Select(选择框)
1.AngularJS可以使用数组或对象创建一个下拉列表选项: 2.在AngularJS中我们可以使用ng-option指令创建一个下拉列表:列表项通过对象和数组循环输出: <div ng-ap ...