数据结构之python实现栈的链式存储

顺序存储是分配一组连续的存储单元 ,如果栈满,不能再添加;采用链式存储,可以需要多少存储空间就申请多少空间。

python实现

class StackNode:
    def __init__(self):
        self.data = None
        self.next = None
class LinkStack:
    def __init__(self):
        self.top = StackNode()
    '''判断链栈是否为空'''
    def IsEmptyStack(self):
        if self.top.next == None:
            iTop = True
        else:
            iTop = False
        return iTop
    '''进栈'''
    def PushStack(self,da):
        tStackNode = StackNode()
        tStackNode.data = da
        tStackNode.next = self.top.next
        self.top.next = tStackNode
        print("当前入栈的元素为:",da)
    '''出栈'''
    def PopStack(self):
        if self.IsEmptyStack() == True:
            return
        else:
            tStackNode = self.top.next
            self.top.next = tStackNode.next
            return tStackNode.data
    '''获取栈顶元素'''
    def GetTopStack(self):
        if self.IsEmptyStack() == True:
            print("栈为空")
        else: 
            return self.top.next.data
    '''创建一个链栈'''
    def CreateStackByInput(self):
        data = input("请输入元素(确定按回车键,结束按“#”):")
        while data != "#":
            self.PushStack(data)
            data = input("请输入元素(确定按回车键,结束按“#”):")
    def StackVisit(self):
        element = input("请输入要寻找的元素:")    
        i = 0
        tStackNode = self.top
        result = self.PopStack()
        while tStackNode.next!= None and element != result:
            tStackNode = tStackNode.next
            result = self.PopStack()
            i += 1
        if element == result:
            print("已找到,距栈顶",i,"个位置")
        else:
            print("链栈中无此元素")
Ls = LinkStack()
Ls.CreateStackByInput()
Ls.StackVisit()

结果如下:
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_40283816/article/details/87898150