lingedu 发表于 2020-6-26 15:22:21

039课后习题栈类

class Stack:
    def __init__(self, start=[]):
      self.stack = []
      for x in start:
            self.push(x)

    def isEmpty(self):
      return not self.stack
   
    def push(self, obj):
      self.stack.append(obj)

    def pop(self):
      if not self.stack:
            print('警告:栈为空!')
      else:
            return self.stack.pop()

    def top(self):
      if not self.stack:
            print('警告:栈为空!')
      else:
            return self.stack[-1]

    def bottom(self):
      if not self.stack:
            print('警告:栈为空!')
      else:
            return self.stack


这个代码主要是模拟栈的压入和弹出的,要是我想压入fish这个单词,是不是应该在实例化时给start赋值为‘hsif’,之后压入栈中,之后按顺序弹出元素分别是f,i,s,h啊?

qiuyouzhi 发表于 2020-6-26 15:23:41

你对列表是不是有点误解啊?
弹出的是列表的一个元素,不是列表的元素的元素。

Twilight6 发表于 2020-6-26 15:26:09

本帖最后由 Twilight6 于 2020-6-26 15:30 编辑



楼上说的对,我觉的你应该是想这样的:

记着栈是 先进后出 ,后进先出的原则就好了

你如果想分别压入 f i s h ,那么按顺序来看是 f -> i -> s -> hf 是最先放入栈中的

如果你取出,则顺序是h -> s -> i -> f 这样的

所以你分别压入 h s i f 才是分别弹出f i s h

如果你压入 fish那么 弹出也为 fish 了

永恒的蓝色梦想 发表于 2020-6-26 15:59:41

是的。

lingedu 发表于 2020-6-26 16:36:13

Twilight6 发表于 2020-6-26 15:26
楼上说的对,我觉的你应该是想这样的:

记着栈是 先进后出 ,后进先出的原则就好了


fish入栈顺序是f>i>s>h,f在栈底,h在栈顶,出栈是h>s>i>f,对吧,之后打印的话,从上到下是fish对吧,是这个意思吗?

Twilight6 发表于 2020-6-26 16:54:59

lingedu 发表于 2020-6-26 16:36
fish入栈顺序是f>i>s>h,f在栈底,h在栈顶,出栈是h>s>i>f,对吧,之后打印的话,从上到下是fish对吧,是 ...

fish入栈顺序是f>i>s>h,f在栈底,h在栈顶,出栈是h>s>i>f,对吧

对的

之后打印的话,从上到下是fish对吧,是这个意思吗?

从上到下 应该是 hsif ,不是 fish,你自己都理解了 h 是栈顶 怎么就从上到下变回 fish 了呢哈哈

lingedu 发表于 2020-6-26 16:58:58

Twilight6 发表于 2020-6-26 16:54
对的




啊对,先打印的是栈顶
页: [1]
查看完整版本: 039课后习题栈类