蓝桥杯Leecode——栈排序

Posted Py小郑

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了蓝桥杯Leecode——栈排序相关的知识,希望对你有一定的参考价值。

问题描述:

栈排序。 编写程序,对栈进行排序使最小元素位于栈顶。最多只能使用一个其他的临时栈存放数据,但不得将元素复制到别的数据结构(如数组)中。该栈支持如下操作:push、pop、peek 和 isEmpty。当栈为空时,peek 返回 -1。

思路分析:

1.涉及到排序 并且只允许四种操作 那么引入临时属性self.tmp>>>List

2:push指将元素压入栈顶 pop是删除栈顶的元素并返回它 peek是返回栈顶的元素

isEmpty判断栈是否为空 

3:比较排序就要利用好pop能返回值这一用途

实现代码:

class SortedStack:

    def __init__(self):
        self.stack=[]
        self.tmp=[]#临时空间


    def push(self, val: int) -> None:
        if  not self.stack:#如果空栈 直接压栈
            self.stack.append(val)
        else:
            while self.stack and val>self.stack[-1] :#如果val大于栈顶且stack非空 and前后顺序不可调换 否则报错 "out of index range"
                self.tmp.append(self.stack.pop())#从stack出栈 从tmp进栈
            self.stack.append(val)#插入要插入的值
            while self.tmp:#原来出栈的元素回栈
                self.stack.append(self.tmp.pop())

    def pop(self) -> None:
        if self.stack:
            end=self.stack[-1]#暂时储存
            del self.stack[-1]
            return end
        else:
            return#后面什么都不加 返回null
        

    def peek(self) -> int:
        return -1 if len(self.stack)==0 else  self.stack[-1]#返回栈顶


    def isEmpty(self) -> bool:
        return not self.stack #如果stack为空 not False 等价于True 如果非空 not True 等价于False 



# Your SortedStack object will be instantiated and called as such:
# obj = SortedStack()
# obj.push(val)
# obj.pop()
# param_3 = obj.peek()
# param_4 = obj.isEmpty()

以上是关于蓝桥杯Leecode——栈排序的主要内容,如果未能解决你的问题,请参考以下文章

蓝桥杯赛前冲刺-枚举暴力和排序专题2(包含历年蓝桥杯真题和AC代码)

蓝桥杯必会数据结构-栈队列与优先队列

蓝桥杯必会数据结构-栈队列与优先队列

蓝桥杯必会数据结构-栈队列与优先队列

蓝桥杯集训100题scratch从小到大排序 蓝桥杯scratch比赛专项预测编程题 集训模拟练习题第17题

蓝桥杯每日一练之数列排序