Suzy找到实习了吗Day 10 | 栈和队列开始啦:232. 用栈实现队列,225. 用队列实现栈

python栈的实现

Python中现成的栈就是列表List。
栈是一个特殊的有序列表,其插入和删除操作都在一端(栈顶)进行。
如果把列表的尾部看作栈顶
List.append()=push到栈顶
List.pop()=pop栈顶元素

Python栈所需要的包

from pythonds.basic.stack import Stack

232. 用栈实现队列

思路

不要按照代码随想录的那个图!要晕!!
stack_in=[]:


|_____________
stack_out=[]:


|_____________
把in的元素一个一个pop()并append()到out里,这样out数组直接pop就能完成pop()函数部分

solution

class MyQueue:
    # list的append()向列表的末尾添加元素
    # list的pop()用于移除列表中的一个元素(默认最后一个元素,即-1),并且返回该元素的值
    # list的del()删除某一个index的元素
    
    def __init__(self):
        self.stack_in=[]
        self.stack_out=[]

    def push(self, x: int) -> None:
        self.stack_in.append(x)

    def pop(self) -> int:
        if self.empty()==True:
            return None
        if len(self.stack_out)!=0:
            return self.stack_out.pop() # 与list有关的函数
        else:
            #out为空
            #只有当out不为空的时候才能直接pop(即不能往里加新的值)
            #for i in (self.stack_in):
            for i in range(len(self.stack_in)):
                self.stack_out.append(self.stack_in.pop())
            return self.stack_out.pop()
        

    def peek(self) -> int:
        #这里有问题 如果in等于空的话 应该用out去取
        #return self.stack_in[len(self.stack_in)-1]
        ans=self.pop()
        self.stack_out.append(ans)#因为pop肯定是从out出来的
        return ans

    def empty(self) -> bool:
        # 只有in和out都为空才说明队列为空
        if len(self.stack_in)==0 and len(self.stack_out)==0:
            return True
        return False

# Your MyQueue object will be instantiated and called as such:
# obj = MyQueue()
# obj.push(x)
# param_2 = obj.pop()
# param_3 = obj.peek()
# param_4 = obj.empty()

??

pop()中的这两个:
#for i in (self.stack_in):
for i in range(len(self.stack_in)):
为什么第一个不对!!!!!???????
因为第一个中stack_in每次都在遍历过程中被动态修改了,但是len()只传一次,没有被修改。

225. 用队列实现栈

思路

如果对于元素1,2,3这个顺序进入栈
栈:从栈顶(出口)到栈底:3,2,1
出来一个元素结果首先是3
队列:队头(出口)到队尾(入口):1,2,3
出来一个元素结果首先是1

solution

class MyStack:

    def __init__(self):
        self.stack=[] #模拟一个队列


    def push(self, x: int) -> None:
        self.stack.append(x)


    def pop(self) -> int:
        if self.empty==True:
            return None
        for i in range(len(self.stack)-1):
            ans=self.stack.pop(0)
            self.stack.append(ans)
        return self.stack.pop(0)

    def top(self) -> int:
        ans=self.pop()
        self.stack.append(ans)
        return ans



    def empty(self) -> bool:
        if len(self.stack)==0:
            return True
        else:
            return False



# Your MyStack object will be instantiated and called as such:
# obj = MyStack()
# obj.push(x)
# param_2 = obj.pop()
# param_3 = obj.top()
# param_4 = obj.empty()
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值