数据结构(7) 链队列 c++ 模板实现
2013-07-23 00:43
751 查看
[b]链队列
[/b]
1、 链队列的定义
队列的链式存储结构简称为链队列。它是限制仅在表头删除和表尾插入的单链表。
2、 链队列的结构类型说明
[/b]
1、 链队列的定义
队列的链式存储结构简称为链队列。它是限制仅在表头删除和表尾插入的单链表。
2、 链队列的结构类型说明
//QueueNode.h template <typename Type> class LinkQueue; template <typename Type> class QueueNode { private: friend class LinkQueue<Type>; Type m_data; QueueNode *m_pnext; private: QueueNode():m_pnext(NULL){}; QueueNode(Type item,QueueNode<Type> *pnext=NULL):m_data(item),m_pnext(pnext){}; ~QueueNode() {m_pnext=NULL;} public: Type Getdata(); }; template <typename Type> Type QueueNode<Type>::Getdata() { return m_data; }
//LinkQueue.h #include "QueueNode.h" template <typename Type> class LinkQueue { private: QueueNode<Type> *m_prear; QueueNode<Type> *m_pfront; int m_count; public: LinkQueue():m_prear(NULL),m_pfront(NULL),m_count(0){}; ~LinkQueue() { ClearQueue(); delete m_prear; delete m_pfront; } public: bool IsEmpty(); void ClearQueue(); int Length(); bool Append(Type item); Type Delete(); Type Peek(); void Print(); }; template <typename Type> bool LinkQueue<Type>::IsEmpty() { return m_pfront==NULL; } template <typename Type> int LinkQueue<Type>::Length() {return m_count;} template <typename Type> bool LinkQueue<Type>::Append(Type item) { if(IsEmpty()) m_pfront=m_prear=new(nothrow) QueueNode<Type>(item) ; else m_prear=m_prear->m_pnext=new(nothrow) QueueNode<Type>(item) ;//m_prear->m_pnext是之前的最末结点 ++m_count; return true; } template <typename Type> Type LinkQueue<Type>::Delete() { if(IsEmpty()) {cout<<"The Queue is Empty!"<<endl; return NULL;} QueueNode<Type> *m_ptemp=m_pfront; Type temp=m_ptemp->m_data; m_pfront=m_pfront->m_pnext; delete m_ptemp; --m_count; return temp; } template <typename Type> Type LinkQueue<Type>::Peek() { return m_pfront->m_data; } template <typename Type> void LinkQueue<Type>::ClearQueue() { QueueNode<Type> *pdel; while(m_pfront!=NULL) { pdel=m_pfront; m_pfront=m_pfront->m_pnext; delete pdel; } m_prear=NULL; m_count=0; } template <typename Type> void LinkQueue<Type>::Print() { QueueNode<Type> *pmove=m_pfront; cout<<"front"; while(pmove!=NULL) { cout<<"--->"<<pmove->m_data; pmove=pmove->m_pnext; } cout<<"--->rear"<<endl; }
// LinkQueue.cpp #include "stdafx.h" #include"LinkQueue.h" #include<iostream> using namespace std; int _tmain(int argc, _TCHAR* argv[]) { //测试代码 FILE *pOut(nullptr); errno_t err = freopen_s( &pOut, "debug_output.txt", "w", stdout ); if(err) cout << "error on freopen" << endl; // Turn on free store debugging and leak-checking bits _CrtSetDbgFlag( _CRTDBG_LEAK_CHECK_DF|_CRTDBG_ALLOC_MEM_DF ); // Direct warnings to stdout _CrtSetReportMode(_CRT_WARN, _CRTDBG_MODE_FILE); _CrtSetReportFile(_CRT_WARN, _CRTDBG_FILE_STDOUT); LinkQueue<int> queue; int init[10]={1,3,6,8,9,2,0,5,4,7}; for(int i=0;i<10;i++){ queue.Append(init[i]); } queue.Print(); queue.Delete(); queue.Print(); cout<<queue.Length()<<endl; cout<<queue.Peek()<<endl; queue.Print(); queue.ClearQueue(); queue.Print(); queue.Delete(); return 0; }
相关文章推荐
- 数据结构(6) 顺序队列 c++ 模板实现
- C++模板实现二叉查找树(一 树的数据结构定义与节点插入)
- 数据结构队列C++实现 链式和循环
- 【c++版数据结构】之循环队列的实现
- C++利用模板实现一个队列
- C++模板链表实现优先级队列
- 队列详解与C++模板实现
- C++类模板 实现队列的链式存储结构算法 《数据结构》(北京科海) 部分代码摘抄,自己编写运行
- C++模板实现二叉查找树(一 树的数据结构定义与节点插入)
- 数据结构——顺序队列的C++实现
- [数据结构]队列之链式队列的类模板实现
- 【c++版数据结构】链队列的实现
- 数据结构之C++实现链式队列(LinkQueue)(无主函数)
- C++ 学习练手 - 数组型队列的模板实现
- 用C++队列模板实现杨辉三角的输出
- C++类模板 实现双向循环链表的基本算法 《数据结构》(C++版 北京科海)中摘抄
- C++模板实现优先级队列
- 基于数组的循环队列(C++模板实现)
- C++模板链表实现优先级队列
- 优先级队列 C++ 模板实现