鱼C论坛

 找回密码
 立即注册
查看: 1321|回复: 5

python 第39课 定义一个栈

[复制链接]
发表于 2018-5-3 23:54:21 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 铁岭小刚fishc 于 2018-5-4 00:10 编辑
  1. class Stack:
  2.     def __init__(self, start=[]):
  3.         self.stack = []
  4.         for x in start:
  5.             self.push(x)

  6.     def isEmpty(self):
  7.         return not self.stack

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

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

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

  20.     def bottom(self):
  21.         if not self.stack:
  22.             print('警告:栈为空!')
  23.         else:
  24.             return self.stack[0]
复制代码


求个注释      def __init__(self, start=[]):
        self.stack = []
        for x in start:
            self.push(x)
  这里定义的 self.stack 中的 stack是属性么?

    def isEmpty(self):
        return not self.stack 这个方法里的这句话是什么意思?  not  表示 不的意思
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2018-5-4 00:18:19 From FishC Mobile | 显示全部楼层
start=[]:为接下来的压栈做准备,如果没有,无法运用循环来压栈,当实例化类时,会把参数传入栈里
self.stack=[]#定义一个空列表的实例变量
self.push(x)#为栈传入元素,
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-5-4 00:22:08 | 显示全部楼层
栈可以用顺序表方式实现,也可以用链表方式实现。我大Python的内建数据结构太强大,可以用list直接实现栈,简单快捷。人生苦短
  1. class Stack(object):
  2.     # 初始化栈为空列表
  3.     def __init__(self):
  4.         self.items = []

  5.     # 判断栈是否为空,返回布尔值
  6.     def is_empty(self):
  7.         return self.items == []

  8.     # 返回栈顶元素
  9.     def peek(self):
  10.         return self.items[len(self.items) - 1]

  11.     # 返回栈的大小
  12.     def size(self):
  13.         return len(self.items)

  14.     # 把新的元素堆进栈里面(程序员喜欢把这个过程叫做压栈,入栈,进栈……)
  15.     def push(self, item):
  16.         self.items.append(item)

  17.     # 把栈顶元素丢出去(程序员喜欢把这个过程叫做出栈……)
  18.     def pop(self, item):
  19.         return self.items.pop()


  20. if __name__ == __main__:
  21.     # 初始化一个栈对象
  22.     my_stack = Stack()
  23.     # 把'h'丢进栈里
  24.     my_stack.push('h')
  25.     # 把'a'丢进栈里
  26.     my_stack.push('a')
  27.     # 看一下栈的大小(有几个元素)
  28.     print my_stack.size()
  29.     # 打印栈顶元素
  30.     print my_stack.peek()
  31.     # 把栈顶元素丢出去,并打印出来
  32.     print my_stack.pop()
  33.     # 再看一下栈顶元素是谁
  34.     print my_stack.peek()
  35.     # 这个时候栈的大小是多少?
  36.     print my_stack.size()
  37.     # 再丢一个栈顶元素
  38.     print my_stack.pop()
  39.     # 看一下栈的大小
  40.     print my_stack.size
  41.     # 栈是不是空了?
  42.     print my_stack.is_empty()
  43.     # 哇~真好吃~
  44.     print 'Yummy~'
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-5-4 00:25:17 From FishC Mobile | 显示全部楼层
return not self.stack #等同if not self.stack:#如果self.stack不为空时,返回True,否则返回False
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-5-4 01:04:31 | 显示全部楼层
故梦L 发表于 2018-5-4 00:25
return not self.stack #等同if not self.stack:#如果self.stack不为空时,返回True,否则返回False

这个明白了,上面栈的那玩意 还得再研究研究。。。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-5-4 01:39:11 | 显示全部楼层
1 '''栈:是一种运算受限的线性表,其特点在于仅允许在一端进行元素的插入和删除操作,最后入栈的最先出栈,而最先入栈的元素最后出栈'''
2 s = []
3 s.append(3) #在尾部追加元素,模拟入栈操作
4 s.append(5)
5 s.append(7)
6 print(s)
7 s.pop() #在尾部弹出元素,模拟出栈操作
8 print('出栈后:',s)
9 s.pop() #在尾部弹出元素,模拟出栈操作
10 s.pop() #在尾部弹出元素,模拟出栈操作
11 #s.pop() #在尾部弹出元素,模拟出栈操作
12     # Traceback (most recent call last):
13     #   File "/Users/c2apple/PycharmProjects/easyToPython/customStack.py", line 11, in <module>
14     #     s.pop() #在尾部弹出元素,模拟出栈操作
15     # IndexError: pop from empty list
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-12-29 22:44

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表