题意整理。

  • 设计一个排队程序,用户有普通客人和VIP客人之分,VIP客人不排队。

方法一(队列)

1.解题思路

  • 首先定义deque容器。
  • 将guest1和guest2分别从队尾入队。将vipGuest从队头入队。
  • 由于队列先进先出的特性,guest1和guest2会按顺序入队和出队,而vipGuest直接从队头入队,相当于插队了,所以不会排队。

图解展示: alt

2.代码实现

#include <iostream>
#include <deque>
using namespace std;

class Guest {
public:
    string name;
    bool vip;

    Guest(string name, bool vip) {
        this->name = name;
        this->vip = vip;
    }
};

int main() {

    Guest guest1("张三", false);
    Guest guest2("李四", false);
    Guest vipGuest("王五", true);
    deque<Guest> deque;

    //将guest1和guest2分别从队尾入队
    deque.push_back(guest1);
    deque.push_back(guest2);
    //将vipGuest从队头入队
    deque.push_front(vipGuest);

    for (Guest g : deque) {
        cout << g.name << " ";
    }

    return 0;
}

3.复杂度分析

  • 时间复杂度:只需常数次入队操作,所以时间复杂度为O(1)O(1)
  • 空间复杂度:需要额外大小为3的deque容器,所以空间复杂度为O(1)O(1)