• 用两个栈实现队列(Python and C++解法)


    题目:

      用两个栈实现一个队列。队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead ,分别完成在队列尾部插入整数和在队列头部删除整数的功能。(若队列中没有元素,deleteHead 操作返回 -1 )

    示例 1:

    输入:
    ["CQueue","appendTail","deleteHead","deleteHead"]
    [[],[3],[],[]]
    输出:[null,null,3,-1]
    示例 2:

    输入:
    ["CQueue","deleteHead","appendTail","appendTail","deleteHead","deleteHead"]
    [[],[],[5],[2],[],[]]
    输出:[null,-1,null,null,5,2]

    来源:力扣(LeetCode)
    链接:https://leetcode-cn.com/problems/yong-liang-ge-zhan-shi-xian-dui-lie-lcof

    思路:

      stack1只负责入栈元素即可。

      在删除stack2中的元素时,需要考虑特殊情况:如果stack2非空,直接出栈栈顶元素;如果stack2为空,且stack1为空,返回-1,如果satck1非空,需要将stack1中的元素全部压入stack2,将stack1中的元素倒序排列。

    Python解法:

     1 class CQueue:
     2     def __init__(self):
     3         self.stack1 = []
     4         self.stack2 = []
     5 
     6     def appendTail(self, value: int) -> None:
     7         self.stack1.append(value)
     8         return []
     9 
    10     def deleteHead(self) -> int:
    11         if not self.stack2:  # 如果stack2是空的,不能用self.stack2 is []进行判断!!!!!!!!!!!!
    12             if not self.stack1:  # 如果stack1是空的
    13                 return -1
    14             else:
    15                 while self.stack1:  # 如果stack1不是空的,把它的元素全部压入stack2
    16                     self.stack2.append(self.stack1.pop())
    17                 return self.stack2.pop()
    18         else:
    19             return self.stack2.pop()

    C++解法:

     1 class CQueue {
     2 public:
     3     stack<int> stack1;
     4     stack<int> stack2;
     5     CQueue() {
     6 
     7     }
     8     
     9     void appendTail(int value) {
    10         stack1.push(value);
    11     }
    12     
    13     int deleteHead() {
    14         if(stack2.empty()) {
    15             if(stack1.empty()) 
    16                 return -1;
    17             else {
    18                 while(!stack1.empty()) {
    19                     int temp = stack1.top();
    20                     stack2.push(temp);
    21                     stack1.pop();  // C++的pop只能删除元素,没有返回值
    22                 }
    23             }
    24         }
    25         int tempRes = stack2.top();
    26         stack2.pop();
    27         return tempRes;
    28     }
    29 };
  • 相关阅读:
    如何在视频中添加字幕
    需要查询的东西
    VC++6.0选择打开文件命令时停止工作解决方法
    DMA方式的数据传送过程
    MFC如何创建目录
    opencv配置Debug,
    MFC中关闭窗口的几种办法+MFC中MessageBox的用法
    静态RAM和动态RAM的比较
    openCV学习笔记(2)--cvCreateTrackbar
    WWDC 2015动画效果 transform transition animation 练习
  • 原文地址:https://www.cnblogs.com/kongzimengzixiaozhuzi/p/13198508.html
Copyright © 2020-2023  润新知