C++实现队列

C++实现队列

分类: c++ 编程语言   1922人阅读  评论(4)  收藏  举报

 C++实现队列,如有不足之处,还望指正

[cpp]  view plain copy
  1. // MyQueue.cpp : 定义控制台应用程序的入口点。  
  2. //实现链式队列(queue),包括一个头结点。队列操作包括在队头出队(pop)、在队尾入队(push)、  
  3. //取得队头元素(front_element)、取得队尾元素(back_element)、队列元素个数(size)、  
  4. //队列是否为空(empty)。  
  5. #include "stdafx.h"  
  6. #include <iostream>  
  7.   
  8. using namespace std;  
  9.   
  10. //定义队列的节点结构  
  11. template <class T>  
  12. struct NODE  
  13. {  
  14.     NODE<T>* next;  
  15.     T data;  
  16. };  
  17.   
  18. template <class T>  
  19. class MyQueue  
  20. {  
  21. public:  
  22.     MyQueue()  
  23.     {  
  24.         NODE<T>* p = new NODE<T>;  
  25.         if (NULL == p)  
  26.         {  
  27.             cout << "Failed to malloc the node." << endl;  
  28.         }  
  29.         p->data = NULL;  
  30.         p->next = NULL;  
  31.         front = p;  
  32.         rear = p;  
  33.     }  
  34.   
  35. //在队尾入队  
  36.     void push(T e)  
  37.     {  
  38.         NODE<T>* p = new NODE<T>;  
  39.         if (NULL == p)  
  40.         {  
  41.             cout << "Failed to malloc the node." << endl;  
  42.         }  
  43.         p->data = e;  
  44.         p->next = NULL;  
  45.         rear->next = p;  
  46.         rear = p;  
  47.     }  
  48.   
  49. //在队头出队  
  50.     T pop()  
  51.     {  
  52.         T e;  
  53.   
  54.         if (front == rear)  
  55.         {  
  56.             cout << "The queue is empty." << endl;  
  57.             return NULL;  
  58.         }  
  59.         else  
  60.         {  
  61.             NODE<T>* p = front->next;  
  62.             front->next = p->next;  
  63.             e = p->data;  
  64.             //注意判断当只有一个元素,且删除它之后,rear指向的node被删除  
  65.             //应将其指向头结点  
  66.             if (rear == p)  
  67.             {  
  68.                 rear = front;  
  69.             }  
  70.             delete p; p = NULL;  
  71.             return e;  
  72.         }  
  73.     }  
  74.   
  75.     //取得队头元素  
  76.     T front_element()  
  77.     {  
  78.         if (front == rear)  
  79.         {  
  80.             cout << "The queue is empty." << endl;  
  81.             return NULL;  
  82.         }  
  83.         else  
  84.         {  
  85.             NODE<T>* p = front->next;  
  86.             return p->data;  
  87.         }  
  88.     }  
  89.   
  90.     T back_element()  
  91.     {  
  92.         if (front == rear)  
  93.         {  
  94.             cout << "The queue is empty." << endl;  
  95.             return NULL;  
  96.         }  
  97.         else  
  98.         {  
  99.             return rear->data;  
  100.         }  
  101.     }  
  102.       
  103.     //取得队列元素个数  
  104.     int size()  
  105.     {  
  106.         int count(0);  
  107.   
  108.         NODE<T>* p = front;  
  109.   
  110.         while (p != rear)  
  111.         {  
  112.             p = p->next;  
  113.             count++;  
  114.         }  
  115.         return count;  
  116.     }  
  117.       
  118.     //判断队列是否为空  
  119.     bool empty()  
  120.     {  
  121.         if (front == rear)  
  122.         {  
  123.             return true;  
  124.         }  
  125.         else  
  126.         {  
  127.             return false;  
  128.         }  
  129.     }  
  130.   
  131. private:  
  132.     NODE<T>* front; //指向头结点的指针。 front->next->data是队头第一个元素。  
  133.     NODE<T>* rear;//指向队尾(最后添加的一个元素)的指针  
  134. };  
  135.   
  136. int _tmain(int argc, _TCHAR* argv[])  
  137. {  
  138.     MyQueue<int> myqueue;  
  139.     cout << myqueue.size() << endl;  
  140.     myqueue.push(10);  
  141.     myqueue.push(20);  
  142.     myqueue.push(30);  
  143.     cout << myqueue.front_element() << endl;  
  144.     cout << myqueue.back_element() << endl;  
  145.     myqueue.pop();  
  146.     if (myqueue.empty())  
  147.     {  
  148.         cout << "The queue is empty now." << endl;  
  149.     }  
  150.     else  
  151.     {  
  152.         cout << "The queue has " << myqueue.size() << " elements now." << endl;  
  153.     }  
  154.     myqueue.pop();  
  155.     myqueue.pop();  
  156.     if (myqueue.empty())  
  157.     {  
  158.         cout << "The queue is empty now." << endl;  
  159.     }  
  160.     else  
  161.     {  
  162.         cout << "The queue has " << myqueue.size() << " elements now." << endl;  
  163.     }  
  164.     return 0;  
  165. }  
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值