C++ 用类封装实现队列

  1 #include<stdlib.h> 
  2 #include <iostream>
  3 using std::cout;
  4 using std::endl;
  5 
  6 #define SUM 3 //此处设置队列的大小,因为队列节点是 malloc 的空间,一般不用设置队列上限。但是为了测试方便就加了上限
  7 
  8 typedef struct QNode{
  9     int data;
 10     struct QNode *pNext;
 11 }QNode,*pQNode;
 12 
 13 class Queue{
 14     private:
 15         pQNode m_front;
 16         pQNode m_rear;
 17         int m_sum;//队列中节点数目
 18     public:
 19         Queue();
 20         ~Queue();
 21         void push(int x);
 22         void pop();
 23         int front();
 24         int back();
 25         bool empty();
 26         bool full();
 27 };
 28 Queue::Queue(){
 29     m_front = m_rear =(pQNode)malloc(sizeof(QNode));
 30     m_front->pNext = NULL;
 31     m_sum = 0;
 32 }
 33 Queue::~Queue(){//清空队列
 34     pQNode p,q;
 35     m_rear = m_front;
 36     p = m_front->pNext;
 37     m_front->pNext = NULL;
 38     while(p){
 39         q = p;
 40         p = p->pNext;
 41         free(q);
 42     }
 43     free(m_front);
 44 }
 45 void Queue::push(int x){
 46     if(!full()){
 47         pQNode p =(pQNode)malloc(sizeof(QNode));
 48         p->data = x;
 49         p->pNext = NULL;
 50         cout<< "进队列元素是"<< x <<endl;
 51         m_rear->pNext = p;
 52         m_rear = p;
 53         m_sum++;
 54     }else{
 55         cout << "队列已满" <<endl;
 56     }
 57 }
 58 void Queue::pop(){
 59   
 60     pQNode tmp;//指向被删除节点,方便释放空间&判断被删节点是否是对尾节点
 61     if(empty()){
 62         cout << "队列为空,出队失败" <<endl;
 63         return ;
 64     }
 65     cout <<"删除的队列头是:" << m_front->pNext->data <<endl;
 66     tmp = m_front->pNext;
 67     m_front->pNext = tmp->pNext;
 68     if(m_rear == tmp){
 69         m_rear = m_front;
 70     }
 71     free(tmp);
 72     m_sum--;
 73 }
 74 int Queue::front(){
 75     if(empty()){
 76         cout << "队列为空" <<endl;
 77         return -1;//队列为空
 78     }else{
 79         return m_front->pNext->data;
 80     }
 81 }
 82 int Queue::back(){
 83     if(empty()){
 84         cout <<"队列为空" <<endl;
 85         return -1;//队列为空
 86     }else{
 87         return m_rear->data;
 88     }
 89 }
 90 bool Queue::empty(){
 91     if(m_front == m_rear){
 92         return true;
 93     }else
 94         return false;
 95 }
 96 bool Queue::full(){
 97     if(m_sum < SUM){
 98         return false;
 99     }else
100         return true;
101 }
102 
103 int main(){
104     Queue que;
105     int ret;
106 
107     que.pop();
108     que.push(1);
109     que.push(2);
110 
111     que.pop();
112     if((ret = que.front()) != -1){
113         cout << "队列头元素是:"<< ret <<endl;
114     }
115     if((ret = que.back()) != -1){
116         cout << "队列尾元素是:" << ret <<endl;
117     }
118     que.push(3);
119     que.push(4);
120     que.push(5);
121 
122     if((ret = que.front()) != -1){
123         cout << "队列头元素是:"<< ret <<endl;
124     }
125     if((ret = que.back()) != -1){
126         cout << "队列尾元素是:" << ret <<endl;
127     }
128 
129     return 0;
130     
131 }
原文地址:https://www.cnblogs.com/24zyt/p/6980324.html