【问题标题】:Reversing a file with Stack ADT使用 Stack ADT 反转文件
【发布时间】:2018-07-17 10:02:08
【问题描述】:

我有一个 Stack ADT,当调用它来创建 (stack.create()) 时,它会返回一个表单元组 ("This Stack contains", list())。 ADT 中的其他内容包括 push/pop/size/is_empty

现在我有一个文件,file.txt,就是这样

1 2 3 4
5 6 7 8

我希望它像

一样输出
8 7 6 5
4 3 2 1 

到目前为止,我的代码是这样的:

import StackADT as stack
file = open("file.txt", "r")

stack_main = stack.create()
stack_rev = stack.create()

for line in file:
    line = line.split()
    stack.push(stack_main, line)

print(stack_main)

print(stack_main) 输出

("This Stack Contains", [['1','2','3','4'],['5','6','7','8']]) 

然后我将['5','6','7','8'] 列表推入我的第二个堆栈,如下所示:

stack.push(stack_rev, stack.pop(stack_main))
print(stack_rev)

给出:

("This Stack Contains", [['5', '6', '7', '8']])

现在我的问题是如何从 stack_rev 中弹出项目5,6,7,8

我尝试使用 for 循环,但它给了我一个错误。我还尝试添加这样的 if 语句:

for i in stack_rev:
    if i == 'This Stack Contains':
        pass
    else:
        for x in i:
            print(stack.pop(stack_rev))

但它只返回一个空堆栈,如下所示:("This Stack Contains", []) 任何帮助,将不胜感激。谢谢。

【问题讨论】:

    标签: python data-structures stack


    【解决方案1】:

    不错的尝试,但您的代码存在一些问题。

    1. 您调用 stack.push 时使用 list 作为第二个参数,如果我理解正确,您应该推送一个元素。

    2. 您只推入stack_rev 一次。您必须使用循环,以便将来自stack_main 的每个元素推入stack_rev

    解决方案

    这就是你应该如何构建stack_main

    for line in file:
        for element in line.split():
            stack.push(stack_main, element)
    

    这就是你应该如何反转你的堆栈:

    for _ in range(len(stack_main[1])):  # loop n times; where n = length of stack
        stack.push(stack_rev, stack.pop(stack_main))
    

    打印你的堆栈

    如果您通过弹出元素来打印stack_rev,您将再次反转元素(这将取消第一次反转)。我建议您在 stack 中循环遍历 list 以打印元素。

    像这样:

    for elem in stack_rev[1]:
        print(elem, end=" ")
    

    我不担心,但是

    你做错了 OOP!您在这里展示的 StackADT 的实现非常类似于 C。与其让模块接受目标堆栈的函数,不如创建一个 Stack 类并实现方法。

    如果你是初学者,你可能还没有理解我上面所说的内容,但是你应该研究一下 OOP(面向对象编程)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-12-01
      • 2014-02-04
      • 1970-01-01
      • 2015-12-30
      • 2018-05-05
      • 2022-01-09
      • 2017-12-22
      • 1970-01-01
      相关资源
      最近更新 更多