pyhton题目-----stack by list

本文介绍了一种使用Python列表来实现栈数据结构的方法。定义了一个名为Stack的类,其中包括了基本的栈操作如push(压栈)、pop(弹栈)等,并实现了判断栈是否为空及是否已满的功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

通过list实现stack功能:

class Stack:
    def __init__(self, size = 10):
        self.top = -1
        self.size = size
        self.stack = []

    def push(self, value):
        if self.isFull():
            raise "Stack is full"
        else:
            self.stack.append(value)
            self.top += 1

    def pop(self):
        if self.isEmpty():
            raise "Stack is empty"
        else:
            data = self.stack[-1]
            self.top= self.top-1
            del self.stack[-1]
            return data

    def isFull(self):
        if self.top == self.size -1:
            return True
        else:
            return False

    def isEmpty(self):
        if self.top == -1:
            return True
        else:
            return False

    def set_size(self,size):
        self.size = size

    def empty(self):
        self.stack = []
        self.top = -1

    def Top(self):
        return self.top



if __name__ == '__main__':
    st = Stack()
    for i in range(1,15):
        try:
            st.push(i)
        except:
            print "out of size"
        else:
            print "push " + str(i) + " OK"
            print("top value is %s" % st.stack[st.Top()])

    print("start pop")
    while not st.isEmpty():
        print("top value is %d" % st.stack[st.Top()])
        st.pop()



### 蓝桥杯 Python 竞赛题目及解析 #### 计算倒数和问题 在青少年组蓝桥杯 Python 选拔赛中有一道关于计算倒数和的问题。此题要求编写程序来处理一系列整数并求其倒数之和[^1]。 对于此类问题,可以采用如下方法解决: ```python def sum_of_reciprocals(numbers): total = 0.0 for number in numbers: try: total += 1 / float(number) except ZeroDivisionError: print("Warning: Division by zero encountered.") return total ``` 这段代码定义了一个函数 `sum_of_reciprocals` 接受一个列表作为参数,并返回这些数值的倒数总和。如果遇到分母为零的情况,则会发出警告而不中断整个过程。 #### 堆砖块问题 另一个例子是从堆栈操作角度出发设计算法——即所谓的“堆砖块”。这类题目考察选手对数据结构的理解以及运用能力。 针对这个问题的一个简单实现可能是这样的: ```python class Stack: def __init__(self): self.items = [] def is_empty(self): return not bool(self.items) def push(self, item): self.items.append(item) def pop(self): if not self.is_empty(): return self.items.pop() raise IndexError("pop from empty stack") def peek(self): if not self.is_empty(): return self.items[-1] raise IndexError("peek at an empty stack") # 使用Stack类解决问题的具体逻辑可以根据实际需求构建 ``` 这里展示的是如何创建一个基本的栈(Stack)对象及其常用的方法;具体的解法还需要依据具体的要求进一步开发。 #### 寻找最大质因数 还有一种常见的问题是找到给定范围内每个自然数的最大质因子。这不仅考验了参赛者的数学知识也检验了编程技巧[^3]。 下面是一个用于分解质因数并将它们打印出来的脚本片段: ```python import math def find_prime_factors(num): while num % 2 == 0: yield 2 num //= 2 max_factor = int(math.sqrt(num)) + 1 for factor in range(3, max_factor, 2): while num % factor == 0: yield factor num //= factor if num > 2: yield num a, b = map(int, input().split()) for n in range(a, b + 1): factors = list(find_prime_factors(n)) output = '*'.join(str(f) for f in factors) or str(n) print(f"{n}={output}") ``` 上述代码通过迭代的方式有效地减少了重复计算的工作量,提高了效率。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值