找回密码
 立即注册→加入我们

QQ登录

只需一步,快速开始

搜索
热搜: 下载 VB C 实现 编写
查看: 2777|回复: 0

【C++】C++模板实现的单向队列

[复制链接]
发表于 2014-12-8 18:01:21 | 显示全部楼层 |阅读模式

欢迎访问技术宅的结界,请注册或者登录吧。

您需要 登录 才可以下载或查看,没有账号?立即注册→加入我们

×
C++模板实现的单向队列的元素添加,元素删除,元素清除功能
Queues.h
  1. //Queues.h
  2. #ifndef DDXX_QUEUES_H
  3. #define DDXX_QUEUES_H
  4. #include <iostream>
  5. using namespace std;

  6. template<typename Type>
  7. class Queues
  8. {
  9. public:
  10.         Queues();
  11.         ~Queues();
  12. public:
  13.         struct Node
  14.         {
  15.                 Type        e;
  16.                 Node*        next;
  17.                
  18.                 Node()
  19.                 {
  20.                 }
  21.                 Node(Type _e)
  22.                 {
  23.                         e                = _e;
  24.                         next        = NULL;
  25.                 }
  26.         };
  27. public:
  28.         bool add(Type e);
  29.         bool erase();
  30.         bool isEmpty();
  31.         int  getLength();
  32.         void print();
  33.         void clear();
  34. private:
  35.         int                m_Length;
  36.         Node*        m_head;
  37.         Node*        m_end;
  38. };

  39. template<typename Type> Queues<Type>::Queues()
  40. {
  41.         m_head = new Node;
  42.         m_end = m_head;
  43.         m_head->next = NULL;
  44.         m_Length = 0;
  45. }

  46. // here change Type to Types has no influence to "add" function
  47. template<typename Types> bool Queues<Types>::add(Types e)
  48. {
  49.         Node* ptr = new Node(e);
  50.         if( ptr == NULL )
  51.         {
  52.                 cout<<"Allocate memory for new element failed"<<endl;
  53.                 return false;
  54.         }
  55.         m_end->next = ptr;
  56.         m_end = ptr;

  57.         m_Length++;
  58.         return true;
  59. }

  60. template<typename Type> bool Queues<Type>::erase()
  61. {
  62.         if ( m_head->next == NULL )
  63.         {
  64.                 cout<<"The queue is empty"<<endl;
  65.                 return false;
  66.         }
  67.         Node* ptr = m_head->next;
  68.         m_head->next = ptr->next;
  69.         delete ptr;
  70.         ptr = NULL;

  71.         m_Length--;
  72.         return true;
  73. }

  74. template<typename Types> bool Queues<Types>::isEmpty()
  75. {
  76.         return m_head == m_end;
  77. }
  78. template<typename Type> int Queues<Type>::getLength()
  79. {
  80.         return m_Length;
  81. }

  82. template<typename Type> void Queues<Type>::print()
  83. {
  84.         Node* ptr = m_head;
  85.         while(ptr->next != NULL)
  86.         {
  87.                 ptr = ptr->next;
  88.                 cout<<"element value:"<<ptr->e<<endl;
  89.         }
  90. }

  91. template<typename Type> void Queues<Type>::clear()
  92. {
  93.         Node* ptr = m_head->next;
  94.         while(ptr != NULL)
  95.         {
  96.                 ptr = ptr->next;
  97.                 delete m_head->next;
  98.                 m_head->next = ptr;
  99.                 m_Length--;
  100.         }
  101.         m_end = m_head;
  102. }

  103. template<typename Type> Queues<Type>::~Queues()
  104. {
  105.         Node* ptr = m_head->next;
  106.         while(ptr != NULL)
  107.         {
  108.                 ptr = ptr->next;
  109.                 delete m_head->next;
  110.                 m_head->next = ptr;
  111.                 m_Length--;
  112.         }
  113.         m_end = m_head;
  114.         delete m_head;
  115.         m_head = NULL;
  116.         m_end = NULL;
  117. }
  118. #endif
复制代码
main.cpp
  1. // main.cpp
  2. #include <iostream>
  3. #include "Queues.h"
  4. using namespace std;

  5. void main()
  6. {
  7.         cout<<"*****************************test queue init***************************"<<endl;
  8.         Queues<int> Que;
  9.         cout<<"Queues is empty? :"<<Que.isEmpty()<<endl;
  10.         cout<<"Que's length is:"<<Que.getLength()<<endl;

  11.         cout<<"*****************************test queue add****************************"<<endl;
  12.         Que.add(1);
  13.         Que.add(2);
  14.         Que.add(3);
  15.         Que.add(4);
  16.         Que.print();
  17.         cout<<"Queues is empty? :"<<Que.isEmpty()<<endl;
  18.         cout<<"Que's length is:"<<Que.getLength()<<endl;

  19.         cout<<"*****************************test queue erase**************************"<<endl;
  20.         Que.erase();
  21.         Que.erase();
  22.         Que.print();
  23.         cout<<"Queues is empty? :"<<Que.isEmpty()<<endl;
  24.         cout<<"Que's length is:"<<Que.getLength()<<endl;

  25.         cout<<"*****************************test queue clear**************************"<<endl;
  26.         Que.clear();
  27.         Que.print();
  28.         cout<<"Queues is empty? :"<<Que.isEmpty()<<endl;
  29.         cout<<"Que's length is:"<<Que.getLength()<<endl;
  30. }
复制代码
程序的运行结果:
1.png
回复

使用道具 举报

本版积分规则

QQ|Archiver|小黑屋|技术宅的结界 ( 滇ICP备16008837号 )|网站地图

GMT+8, 2024-11-23 21:26 , Processed in 0.035053 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表