Python实现栈

Task 2 – 栈


  • 很多数据结构的知识都已经遗忘的差不多,借此次学习来一一回顾,我们经常说到堆栈,队列,链表等等,在这里说明一个我很容易犯的错,在数据结构里,堆和栈是两种不同的数据结构,对于堆个人理解更像一个有序的完全二叉树,而栈是一种FILO的数据结构,但是值得我们注意的是,堆栈如果连在一起他其实就是栈,只不过名称不同而已,因此很多人在博客里面更多的利用堆栈来指明栈,这也就会让很多学习者看的很懵(我就是一个)
  • 过多的只是我就不说明,因为在之前看见过一篇博客,写的十分详细稍后将连接贴出来,感兴趣的大家可以去了解下
  • 参考链接: https://www.cnblogs.com/guoxiaoyan/articles/8664150.html
  • 在接下来我会用python实现一系列的数据结构,并不断完善封装,以供直接继承和调用,因为在很多人看来python其实并没有底层c语言之类的更容易理解数据结构,在这里我觉得并不然,正是因为python都已经封装的很完善,我们才更需要去查看源码,了解底层原理,既可以提高自己的编码能力,还能加深理解,对于想自己设计以及自己开发一套新的东西出来很有帮助!
  • 下面的只是最初版,在我个人理解上实现的最原始功能,后续会不断完善,也欢迎各位大佬前来指正和交流

源码
# conding = utf-8

from Task1.OwnLinklist import LinkList


class StackByArray:

    def __init__(self):
        self.stack = list()

    def insert(self, value):
        self.stack.append(value)

    def pop(self):
        try:
            self.stack.pop(-1)
        except IndexError:
            raise IndexError("Stack is empty")


class StackByLinklist:

    def __init__(self):
        """
        由于上一任务中链表存在逻辑问题,此处新建时需要传入参数
        """
        self.stack = LinkList(['header'])

    def insert(self, value):
        self.stack.append(value)

    def pop(self):
        length = self.stack.length()
        if length <= 1:
            raise IndexError("Stack is empty")
        else:
            self.stack.delete(length - 1)


if __name__ == '__main__':

    # task 实现浏览器的前进和后退功能
    stack_web = StackByArray()

    while True:
        # 死循环,注意!!!
        key_event = input("Choose:")
        if key_event == 'forward':
            data = 'url:forward'
            stack_web.insert(data)
            # send url to browser
        else:
            try:
                data = stack_web.pop()
                # send url to browser
            except IndexError:
                raise IndexError("Not enough page")



    # stack_array = StackByArray()
    # stack_array.insert(1)
    # stack_array.insert(2)
    # stack_array.insert(3)
    # print(stack_array.stack)
    # stack_array.pop()
    # print(stack_array.stack)
    #
    # stack_link_list = StackByLinklist()
    # stack_link_list.insert(1)
    # stack_link_list.insert(2)
    # stack_link_list.insert(3)
    # stack_link_list.pop()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值