python数据结构---栈

数据结构是一种比较抽象的计算机结构,我们要理解数据结构的基本原理,必须对计算机的底层,计算机硬件的运行方式有一定的了解,比如说,创建一个新的变量,赋值给这个变量,那么就称这个变量为标识符,变量在内存空间里面有一个独立的小空间,这个小空间里存储赋值的数据,这就是变量在物理硬件上的存储方式。python语言内部并没有指针的概念,所以对于学习数据结构来说,C语言更加适合,对于python语言需要自己去创建一个指针,来实现栈和队列的数据元素连接与脱离。

举个例子,我们把书本放到一个箱子里面,我们最先放入箱子中的书本,按顺序取是最后才取出来的,反而,最后放入箱子的书本,是最先取出来的。

对于python实现数据结构,通常使用列表这种数据类型,线性表,栈,队列等数据结构也可以使用列表这种数据类型来实现,列表在python中是一个重要的数据类型。

实现代码,如下:

class SequenceStack:#定义一个顺序栈的类
    def __init__(self):#初始化栈
        self.MaxStackSize = 10#初始化栈的长度,设置为10
        self.s = [None for x in range(0,self.MaxStackSize)]#创建一个长度为10的没有元素的空列表
        self.top = -1#初始化指针为-1

    def IsEmptyStack(self):#判断栈是否为空
        if self.top==-1:#当指针在原始位置时。此时空栈
            iTop=True
        else:
            iTop=False
        return iTop

    def PushStack(self,x):#压栈,元素进栈
        if self.top < self.MaxStackSize-1:#如果没有达到栈的最大存储空间,可以继续进栈。
            self.top=self.top+1
            self.s[self.top]=x
        elif None not in self.s:
            print("满栈")
            print('栈顶元素是',self.top)
            return self.top

    def PopStack(self):#弹出栈顶元素,即最后一个进栈的元素。
        if self.IsEmptyStack():
            print('空栈')
        else:
            iTop = self.top
            self.top = self.top - 1
            return self.s[iTop]

    def GetTopStack(self):#查看栈顶元素
        if self.IsEmptyStack():
            print('空栈')
            return
        else:
            return self.s[self.top]

    def StackTraverse(self):#反转栈内元素
        if self.IsEmptyStack():
            print('空栈')
        else:
            for i in range(0,self.top+1):
                print(self.s[i],end=' ')

    def CreateStackByInput(self):
        data = input("请输入元素(继续输入请按回车键,结束请输入 '!'):")
        while data != '!':
            self.PushStack(data)
            if None not in self.s:
                break
            else:
                data = input("请输入元素:")

if __name__ == '__main__':#设置主函数作为程序出口
    S = SequenceStack()#实例化对象。
    S.CreateStackByInput()#调用函数
    print('栈内的元素为:',end=' ')
    S.StackTraverse()#调用函数

文中或有诸多不妥之处,还望大家指出和海涵。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不羁_神话

感谢支持,欢迎交流。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值