队列&栈

  1. 先入先出(FIFO)的数据结构
    入队(enqueue)和出队(dequeue)
    队列是典型的FIFO数据结构

  2. 实现队列
    为了实现队列,可以使用动态数组和指向数组头部的索引;一个队列最主要的操作为入队和出队,可以将它们设置为返回值为布尔值的函数,操作成功返回true,操作失败返回false。还需要一个显示队列头元素的函数和一个判断队列是否为空的函数

#include <iostream>

class MyQueue {
   private:
       // store elements
       vector<int> data;       
       // a pointer to indicate the start position
       int p_start;            
   public:
       MyQueue() {p_start = 0;}
       /** Insert an element into the queue. Return true if the operation is successful. */
       bool enQueue(int x) {
           data.push_back(x);
           return true;
       }
       /** Delete an element from the queue. Return true if the operation is successful. */
       bool deQueue() {
           if (isEmpty()) {
               return false;
           }
           p_start++;
           return true;
       };
       /** Get the front item from the queue. */
       int Front() {
           return data[p_start];
       };
       /** Checks whether the queue is empty or not. */
       bool isEmpty()  {
           return p_start >= data.size();
       }
};

int main() {
   MyQueue q;
   q.enQueue(5);
   q.enQueue(3);
   if (!q.isEmpty()) {
       cout << q.Front() << endl;
   }
   q.deQueue();
   if (!q.isEmpty()) {
       cout << q.Front() << endl;
   }
   q.deQueue();
   if (!q.isEmpty()) {
       cout << q.Front() << endl;
   }
}

3、队列的使用
c++有自带的队列库,意味着我们不用自己造轮子。以下是使用示例:

#include <iostream>
#include <queue>
using namespace std;
int main() {
  // 1. Initialize a queue.
  queue<int> q;
  // 2. Push new element.
  q.push(5);
  q.push(13);
  q.push(8);
  q.push(6);
  // 3. Check if queue is empty.
  if (q.empty()) {
      cout << "Queue is empty!" << endl;
      return 0;
  }
  // 4. Pop an element.
  q.pop();
  // 5. Get the first element.
  cout << "The first element is: " << q.front() << endl;
  // 6. Get the last element.
  cout << "The last element is: " << q.back() << endl;
  // 7. Get the size of the queue.
  cout << "The size is: " << q.size() << endl;
}

关键方法
pop():出队
push():入队
front():返回首元素
back()返回尾元素

posted @ 2021-08-17 17:25  智子lock  阅读(42)  评论(0)    收藏  举报