Python实现栈、队列

目录

  • 1. 栈的Python实现

    • 1.1 以列表的形式简单实现栈
    • 1.2 以单链表形式实现栈
  • 2. 队列的Python实现
    • 2.1 以列表实现简单队列


? 本文将使用python实现数据结构中的栈、队列;有关栈、队列的理论原理请参考:《数据结构与算法》-3-栈和队列


1. 栈的Python实现

1.1 以列表的形式简单实现栈

"""
以列表的形式简单实现栈
栈:先进后出
"""
class Stack:
    def __init__(self):
        self.stack = []  # 初始化

    def is_empty(self):
        return not bool(self.stack)  # 判空

    def push(self, value):
        self.stack.append(value)  # 入栈
        return True

    def pop(self):
        if self.stack:
            return self.stack.pop()  # 出栈
        else:
            raise LookupError('stack is empty!')

    def peek(self):
        if self.stack:
            return self.stack[-1]  # 获取栈顶元素
        else:
            raise LookupError('stack is empty')

    def length(self):
        return len(self.stack)  # 获取栈内元素个数     

1.2 以单链表形式实现栈

"""
以单链表形式实现栈
栈:先进后出
"""
class Node:
    def __init__(self, val=None, nxt=None):
        self.value = val  # 信息域
        self.next = nxt  # 指针域

class Stack:
    # 初始化一个空栈
    def __init__(self):
        self._top = None  # 栈顶元素

    def is_empty(self):
        return self._top is None

    def push(self, item):
        if not self._top:
            self._top = Node(item)  # 空栈:直接将新结点设置为栈顶元素
            return True
        node = self._top  # 获取栈顶元素
        self._top = Node(item)  # 将新结点设置为栈顶元素
        self._top.next = node  # 将栈顶元素的指针指向原栈顶元素
        return True

    def pop(self):
        if self.is_empty():
            raise LookupError('stack is empty!')
        node = self._top  # 获取栈顶元素
        self._top = self._top.next  # 将原栈顶元素的下一个元素设置为栈顶元素
        return node.value  # 返回原栈顶元素的信息域

    def peek(self):
        if self.is_empty():
            raise LookupError('stack is empty!')
        node = self._top  # 获取栈顶元素
        return node.value  # 返回栈顶元素的信息域

    def length(self):
        if self.is_empty():
            return 0
        node = self._top  # 获取栈顶元素
        count = 1  # 计数
        while node.next:  # 栈顶元素的下一个元素,直到初始None
            node = node.next
            count += 1
        return count

    def show(self):
        if self.is_empty():
            raise LookupError('queue is empty!')
        node = self._top
        li = [node.value]
        while node.next:
            node = node.next
            li.append(node.value)
        return li

2. 队列的Python实现

2.1 以列表实现简单队列

"""
以列表的形式简单实现队列
队列:先进先出
"""
class Queue:
    def __init__(self):
        self.li = []

    def is_empty(self):
        return not bool(self.li)

    def enqueue(self, items):
        self.li.append(items)
        return True

    def dequeue(self):
        if self.is_empty():
            raise LookupError('queue is empty!')
        return self.li.pop(0)

    def length(self):
        return len(self.li)

    def show(self):
        if self.is_empty():
            raise LookupError('queue is empty!')
        return self.li

原文地址:https://www.cnblogs.com/chenzhen0530/p/10706819.html

时间: 2024-10-02 09:06:32

Python实现栈、队列的相关文章

使用python实现栈和队列

1.使用python实现栈: 1 class stack(): 2 def __init__(self): 3 self.stack = [] 4 def empty(self): 5 return self.stack==[] 6 def push(self,data): 7 self.stack.append(data) 8 def pop(self): 9 if self.empty(): 10 return None; 11 else: 12 return self.stack.pop(

python全栈和python自动化课程的区别在哪?

老男孩算是国内组早的做python培训的机构了,下面小编对于python自动化课程及全栈课程做了一个总结,希望能帮到你们: python全栈开发: 适合人群:应届本科生,专科,及零基础学员学习基础:0基础上课形式:脱产5个月,周一至周五上课课程内容:linux基础知识,python基础知识,网络编程,数据库应用,web开发,算法设计模式项目实战:博客系统开发,CRM系统开发,CMDB开发,主机开发管理,爬虫开发,金融量化交易项目开发未来发展方向:python全栈开发工程师就业方向:python爬

Python全栈开发【基础三】

Python全栈开发[基础三]  本节内容: 函数(全局与局部变量) 递归 函数 一.定义和使用 函数最重要的是减少代码的重用性和增强代码可读性 1 def 函数名(参数): 2 3 ... 4 函数体 5 ... 6 返回值 函数的定义主要有如下要点: def:表示函数的关键字 函数名:函数的名称,日后根据函数名调用函数 函数体:函数中进行一系列的逻辑计算 参数:为函数体提供数据 返回值:当函数执行完毕后,可以给调用者返回数据. 总结使用函数的好处: 1.减少代码重用 2.保持一致性,易维护

Python全栈开发【第一篇】:初识Python

Python全栈开发[第一篇] 本节内容: Python 的种类 Python 的环境 Python 入门(解释器.编码.变量.input输入.if流程控制与缩进.while循环) if流程控制与while循环练习题 基本数据类型前引 Python 的种类 Cpython Python的官方版本,使用C语言实现,使用最为广泛,CPython实现会将源文件(py文件)转换成字节码文件(pyc文件),然后运行在Python虚拟机上. Jyhton Python的Java实现,Jython会将Pyth

Python全栈开发

Python全栈开发 一文让你彻底明白Python装饰器原理,从此面试工作再也不怕了. 一.装饰器 装饰器可以使函数执行前和执行后分别执行其他的附加功能,这种在代码运行期间动态增加功能的方式,称之为“装饰器”(Decorator),装饰器的功能非常强大,但是理解起来有些困难,因此我尽量用最简单的例子一步步的说明这个原理. 1.不带参数的装饰器 假设我定义了一个函数f,想要在不改变原来函数定义的情况下,在函数运行前打印出start,函数运行后打印出end,要实现这样一个功能该怎么实现?看下面如何用

python之消息队列

引言 你是否遇到过两个(多个)系统间需要通过定时任务来同步某些数据?你是否在为异构系统的不同进程间相互调用.通讯的问题而苦恼.挣扎?如果是,那么恭喜你,消息服务让你可以很轻松地解决这些问题.消息服务擅长于解决多系统.异构系统间的数据交换(消息通知/通讯)问题,你也可以把它用于系统间服务的相互调用(RPC).本文将要介绍的RabbitMQ就是当前最主流的消息中间件之一. RabbitMQ简介 RabbitMQ是一个由erlang开发的AMQP(Advanced Message Queue )的开源

Python全栈开发【基础二】

Python全栈开发[基础二] 本节内容: Python 运算符(算术运算.比较运算.赋值运算.逻辑运算.成员运算) 基本数据类型(数字.布尔值.字符串.列表.元组.字典) 编码与进制转换 Python 运算符 1.算术运算: 2.比较运算: 3.赋值运算: 4.逻辑运算:  5.成员运算: 基本数据类型 1.数字 int(整型) 1 class int(object): 2 """ 3 int(x=0) -> integer 4 int(x, base=10) -&g

Python全栈考试-部分试题(精选)

Python全栈考试(一) Python全栈考试(一) 1.执行 Python 脚本的两种方式 答:1.>>python ../pyhton.py 2. >>python.py   #必须在首行有 #!/usr/bin/env python3 指定执行语言 2.简述位.字节的关系 答:一个字节(byte)=8位(bit)  位为最小的单位 3.简述 ascii.unicode.utf-8.gbk 的关系 ascii:只能表示256个符号 unicode:万国码,各国都有 需要有2位

51CTO - 老男孩python全栈心路

转眼入学都两个月了,自从参加老男孩python全栈的课以来,感觉收获很多. 一.为什么参加培训 我是非计算机专业毕业的,有那么几年的工作经验,之前都是依靠自学,所谓的野路子出身.刚开始还好,目标就是查资料,解决问题. 但后来随着工作年限的积累,别人的工资都蹭蹭蹭的往上涨,而我只能一点点的往上挪.心中难免不服气,比我牛的比我工资高我也就认了,为啥那些没我有经验的,水平不如我的工资也可以比我高? 后来发现,人家都说科班出身的,用了四年的时间来打基础,而我只能是遇到问题临时抱佛脚.心理平衡了,自然就要

<数据结构与算法分析 C++描述> 表/栈/队列

这一章主要内容: * 抽象数据类型(ADT)的概念 * 实现表/栈/队列 * 了解这三个数据结构的应用场景 1. ADT ADT: abstract data type, 是抽象的数学模型,在该模型上定义了一系列的操作.使用它的人,不需要了解它的存储方式,只关心它的逻辑特征.可以使用三元组的方法来表示(D,S,P),D是数据对象,S是数据之间的关系,P是对数据的基本操作,具体介绍,可以参考帖子:点击打开链接 2. 表ADT 表的数据自然是单个元素,而元素之间的关系是前驱与后继,操作包括查找/插入