队列之C++实现

Queue.hpp

#include<iostream>
using namespace std;
typedef struct QueueNode{
  QueueNode()
    :next(nullptr)
  {}
  struct QueueNode* next;
  int data;
}Node;
class Queue{
public:
  Queue()
    :_front(nullptr)
    ,_rear(nullptr)
  {}
  //申请节点
  Node* BuyQueueNode(const int data){
    Node* pNewNode = new Node;
    pNewNode->next = nullptr;
    pNewNode->data = data;
    return pNewNode;
  }
  //判断队列是否为空
  int QueueEmpty(){
    return _front == nullptr;
  }
  //入队操作
  void QueuePush(const int data){
    Node* pNewNode = BuyQueueNode(data);
    if(QueueEmpty())
      _rear = _front = pNewNode;
    else{
      _rear->next = pNewNode;
      _rear = pNewNode;
    }
  }
  //出队操作
  void QueuePop(){
    if(QueueEmpty())
      return;
    Node* pDelNode = _front;
    _front = pDelNode->next;
    delete pDelNode;
    pDelNode = nullptr;
  }
  //队列元素大小
  int QueueSize(){
    int count = 0;
    Node* pCur = _front;
    while(pCur){
      count++;
      pCur = pCur->next;
    }
    return count;
  }
  //队头元素值
  int QueueFrontData(){
    return _front->data;
  }
  //队尾元素值
  int QueueRearData(){
    return _rear->data;
  }
  //打印队列元素
  void QueuePrint(){
    Node* pCur = _front;
    while(pCur){
      cout<<pCur->data<<" ";
      pCur = pCur->next;
    }
    cout<<endl;
  }
  ~Queue(){
    Node* pCur = _front;
    while(pCur){
      if(_front){
        _front = pCur->next;
        delete pCur;
        pCur = _front;
      }
    }
    _front = _rear = nullptr;
  }
private:
  Node* _front;
  Node* _rear;

};

Queue.cpp

#include"Queue.hpp"

int main(){
  Test();
  return 0;
}

测试部分

void Test(){
  Queue q;
  q.QueuePush(1);
  q.QueuePush(2);
  q.QueuePush(3);
  q.QueuePush(4);
  q.QueuePush(5);
  q.QueuePush(6);
  q.QueuePush(7);
  q.QueuePrint();
  q.QueuePop();
  q.QueuePrint();
  cout<<q.QueueSize()<<endl;
  cout<<q.QueueFrontData()<<endl;
  cout<<q.QueueRearData()<<endl;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值