NWJ619 2022-07-14 21:55 采纳率: 66.7%
浏览 66
已结题

使用链接实现创建堆栈ADT

一个节点类(Node class)。您将使用链接(linked implementation)实现创建堆栈(Stack) ADT。实现是链接的节点。
问题相关代码,请勿粘贴截图
运行结果及报错内容
class Node:
def __init__(self, data, node=None):
    # 初始化这个节点,插入数据,如果有则设置下一个节点
    self.data = data
    self.chain = node

class MyStack:
def init(self, data=None):
# 初始化这个栈,如果存在则存储数据
pass
self.length = 0
self.last = None
if data != None:
self.push(data)

def push(self, data):
    # 将数据添加到栈的开头
    newNode = Node(data)

    if self.last != None:
        newNode.prev = self.last
    self.last = newNode
    self.length = self.length + 1
    pass

def pop(self):
    # 移除栈首元素。
    # 返回栈首元素中的数据,如果栈为空则返回None
    if self.length == 0:
        return None

    data = self.last.data
    self.last = self.last.prev
    self.length = self.length - 1
    return data
    pass


def top(self):
    # 返回开头元素中的数据,但不移除。
    # 如果堆栈为空,则返回 None。
    if self.length == 0:
        return None
    pass

def __len__(self):
    # 返回栈中的元素个数
    return self.length
    pass

def sum_exists(n, p_list):
# 如果 n 可以从重复的 p_list 中形成,则返回 True
# 任意次数。
pass

我想要达到的结果
  • 写回答

3条回答 默认 最新

  • 天际的海浪 2022-07-14 22:12
    关注

    改了下算法看看行不行

    class Node:
        def __init__(self, data, node=None):
            # 初始化这个节点,插入数据,如果有则设置下一个节点
            self.data = data
            self.chain = node
    
    class MyStack:
        def __init__(self, data=None):
            # 初始化这个栈,如果存在则存储数据
            pass
            self.length = 0
            self.last = None
            if data != None:
                self.push(data)
    
        def push(self, data):
            # 将数据添加到栈的开头
            newNode = Node(data)
    
            if self.last != None:
                newNode.chain = self.last  #应该是chain
            self.last = newNode
            self.length = self.length + 1
            pass
    
        def pop(self):
            # 移除栈首元素。
            # 返回栈首元素中的数据,如果栈为空则返回None
            if self.length == 0:
                return None
    
            data = self.last.data
            self.last = self.last.chain  #应该是chain
            self.length = self.length - 1
            return data
            pass
    
    
        def top(self):
            # 返回开头元素中的数据,但不移除。
            # 如果堆栈为空,则返回 None。
            if self.length == 0:
                return None
            return self.last.data   #加上
    
        def __len__(self):
            # 返回栈中的元素个数
            return self.length
            pass
    
    def sum_exists(n, p_list):
        # 如果 n 可以从重复的 p_list 中形成,则返回 True
        # 任意次数。
        li = sorted(p_list,reverse=True)
        l = len(li)
        st = MyStack() #定义空栈
        st.push([0,0]) #给栈赋初值0
        while len(st)>0:  #处理栈,当栈为空时结束循环
            d,i = st.pop()  #出栈
            if (n-d)%li[i] == 0:
                return True
            if i < l-1:
                while d < n:
                    st.push([d, i+1]) #入栈
                    d += li[i]
        return False
    
    if __name__ == "__main__":
        print(sum_exists(17, [2,3,5]))
        print(sum_exists(7, [3,5]))
        print(sum_exists(107, [2,3,37]))
        print(sum_exists(43, [3,29]))
        print(sum_exists(146, [17,29,37]))
    
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(2条)

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 7月19日
  • 已采纳回答 7月19日
  • 赞助了问题酬金40元 7月14日
  • 创建了问题 7月14日

悬赏问题

  • ¥15 Python语言实验
  • ¥15 SAP HANA SQL 增加合计行
  • ¥20 用C#语言解决一个英文打字练习器,有偿
  • ¥15 srs-sip外部服务 webrtc支持H265格式
  • ¥15 在使用abaqus软件中,继承到assembly里的surfaces怎么使用python批量调动
  • ¥15 大一C语言期末考试,求帮助🙏🙏
  • ¥15 ch340驱动未分配COM
  • ¥15 Converting circular structure to JSON
  • ¥30 Hyper-v虚拟机相关问题,求解答。
  • ¥15 TSM320F2808PZA芯片 Bootloader