使用python实现栈以及各种栈的操作(python版)

        一个栈是一个项的有序集合。添加项和移除项都发生在同一“端”。 这一端通常被称为“顶”。另一端的顶部被称为“底”。栈具有先进后出的特性(FILO),本文不再过度赘述栈的基本概念,有需要的小伙伴请点击传送门:数据结构:栈的基本概念和性质_栈的性质_NULL666888的博客-CSDN博客

        好了,现在进入本文的正式内容,由于python语言的特性,python中的列表(List)具有广义表的性质,也就是:列表中的内容不再限制为只能存同种数据类型的数据,而是具有“包容”的性质,并且,列表的功能强大,具有的操作函数以及参数类型较多,最显著的一个特点就是:列表的长度只取决于列表中元素的个数,也就是说增删列表中的元素,列表的长度会自动改变,这也是列表另一个比较灵活的地方,这点在使用列表实现队列这块将会体现出来,暂时不做研究。

        我们先来看看使用列表实现栈的步骤。根据栈的LIFO的特性,我们取列表的前端作为栈底,列表的后端作为栈顶,这样做主要是因为:对于列表来说,其拥有append和pop两大函数,append函数作为入栈函数,pop作为出栈函数,这样比将栈顶设置在列表的前端要好操作一些,对于初学者更加友好。

        我们使用类(class)来实现“栈”这个数据结构的主体部分,首先定义Stack类并使用__init__初始化这个类,由于列表的便捷性我们将其初始化为一个空列表,代码如下:

class Stack:
    def __init__(self):
        selt.items = []

到这里栈的主体部分就做完了,当然,这是一个类似于其他语言的静态栈,那么肯定有读者有疑问,为什么不定义动态栈呢?根据个人备战多个编程比赛的经验,我个人认为,除非是特殊情境,否则其实没有太大必要,毕竟动态栈的实现涉及到类似于C语言中指针的操作,这块有些读者可能会较为难理解,并且动态栈相比于静态栈优势不是很大,因此,在大多数情况下,静态栈是完全够用的了。

        接下来实现栈的“灵魂操作”--增、删、改、查。

由于这部分操作在列表中均有对应的函数实现:

增:append()

删:pop()

改:replace()

查:find()

这里将不再赘述,我将会使用增和删作为例子以供读者参考:

# 入栈
def Push(self, val):
    return self.items.append()

# 出栈
def Pop(self):
    return self.items.pop()

# 查看栈顶元素
def peek(self):
    return self.items[-1]

# 获取栈的长度
def getlength(self):
    return len(self.items)

完整的代码如下:

​
class Stack:
    def __init__(self):
        selt.items = []

​​
      # 入栈
    def Push(self, val):
        return self.items.append()

      # 出栈
    def Pop(self):
        return self.items.pop()

    # 查看栈顶元素
    def peek(self):
        return self.items[-1]

    ​# 获取栈的长度
    def getlength(self):
        return len(self.items)

        以上就是本文的全部内容, 如有疑问之处,欢迎评论区留言。

你可能感兴趣的:(数据结构python描述,python,开发语言,算法,数据结构)