image.png

方法一:新增直接增加,删除使用双栈

新增数据:栈 s1 存放新增的栈。
删除数据:将 s1 中的所有数 “倒进” s2 中,然后使用出栈操作就完成了删除的操作。最后再将 s2 中的数据 “倒回” s1 中。

  1. class CQueue {
  2. public:
  3. CQueue() {
  4. }
  5. void appendTail(int value) {
  6. s1.push(value);
  7. }
  8. int deleteHead() {
  9. while(!s1.empty()){
  10. s2.push(s1.top());
  11. s1.pop();
  12. }
  13. if(s2.empty()){
  14. return -1;
  15. }
  16. int temp = s2.top();
  17. s2.pop();
  18. while(!s2.empty()){
  19. s1.push(s2.top());
  20. s2.pop();
  21. }
  22. return temp;
  23. };
  24. private:
  25. stack<int> s1;
  26. stack<int> s2;
  27. };

方法二:双栈 第一个栈支持插入操作,第二个栈支持删除操作

栈 s1 支持新增操作。
栈 s2 支持删除操作,

  • 如果 s2 不为空,s2 最顶层元素出栈
  • 如果 s2 为空,
    • 如果 s1 不为空, 将 s1 中元素 “倒入” s2 中,s2 最顶层元素出栈
    • 如果 s1 中元素为空,则 return -1