栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

破坏性堆栈迭代

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

破坏性堆栈迭代

一种简单的方法可以为您的Stack提供一个可用于迭代的替代头。我还添加了一个

__len__
方法来返回堆栈的大小。

class Stack:    def __init__(self):        self.head = None        self.size = 0    def __len__(self):        return self.size    def push(self, item):        node = Node(item)        if not self.head: self.head = node        else: node.next = self.head self.head = node        self.size += 1    def pop(self):        if self.size == 0: raise ValueError('Popping off an empty stack!')        item = self.head.val        self.head = self.head.next        return item    def peek(self):        if self.size == 0: raise ValueError('Peeking into an empty stack!')        return self.head.val    def __iter__(self):        self.top = self.head        return self    def __next__(self):        if self.top: curr = self.top        else: raise StopIteration()        self.top = self.top.next        return curr.valclass Node:    def __init__(self, val):        self.val = val        self.next = Noneif __name__ == '__main__':    stack = Stack()    stack.push(12)    stack.push(13)    stack.push(9)    print('Size', len(stack))    for item in stack:        print(item)    print(stack.peek())    stack.push(42)    print('Size', len(stack))    for item in stack:        print(item)

输出

Size 3913129Size 44291312

这可能是一个好主意,添加

self.top =None
__init__
,虽然这不是绝对必要的。您可能希望将其标记为带有下划线的私人名称:
self._top

正如timgeb在评论中所暗示的那样,这种方法有些脆弱,因为我们只能在堆栈上一次只执行一次迭代

self.top


顺便说一句,您可以

push
稍微优化该方法:

def push(self, item):    node = Node(item)    if self.head:        node.next = self.head    self.head = node    self.size += 1


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/661532.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号