python数据结构与算法——栈、队列与双端队列

栏目: Python · 发布时间: 6年前

内容简介:栈:是一种容器,可存入数据元素、访问元素、删除元素,它的特点在于只能允许在容器的一端进行加入数据和输出数据的运算。没有了位置概念,保证任何时候可以访问、删除的元素都是此前最后存入的那个元素,确定了一种默认的访问顺序。支持操作:队列(queue)是只允许在一端进行插入操作,而在另一端进行删除操作的线性表

栈:是一种容器,可存入数据元素、访问元素、删除元素,它的特点在于只能允许在容器的一端进行加入数据和输出数据的运算。没有了位置概念,保证任何时候可以访问、删除的元素都是此前最后存入的那个元素,确定了一种默认的访问顺序。

  • 由于只能在一端操作,因此按照后进先出的原理运作

栈的实现

支持操作:

  • Stack()创建一个新的空栈
  • push(item)添加一个新的元素item到栈顶

  • pop()弹出栈顶元素

  • peek()返回栈顶元素

  • is_empty()判断栈是否为空

  • size()返回栈的元素个数

class Stack(object):
    """栈"""
    def __init__(self):
        self.__list = []

    def push(self, item):
        """加入元素"""
        self.__list.append(item)

    def pop(self):
        """弹出元素"""
        return self __list.pop()

    def peek(self):
        """返回栈顶元素"""
        if self.__list:
            return self.__list[-1]
        else:
            return None

    def is_empty(self):
        """判断是否为空"""
        #return self.__list == []
        return not self__list

    def size(self):
        """返回栈的大小"""
        return len(self.__list)

if __name__ == "__main__":
    stack = Stack()
    stack.push("hello, world")
    stack.push("hello, python")
    stack.push("hello, China")
    print(stack.size())
    print(stack.peek())
    print(stack.pop())
    print(stack.pop())

队列与双端队列

队列(queue)是只允许在一端进行插入操作,而在另一端进行删除操作的线性表

队列是一种先进先出的线性表,简称FIFO。允许插入的一端为队尾,允许删除的一端为队头。队列不允许在中间部位进行操作。

队列的实现

class Queue(object):
    """队列"""
    def __init__(self):
        self.__list = []

    def enqueue(self,item):
        """往队列中添加一个item元素"""
        self.__list.append(item)

    def dequeue(self):
        """从队列头部删除一个元素"""
        return slef.pop(0)

    def is_empty(self):
        """判断一个队列是否为空"""
        return self.__list == []

    def size(self):
        """返回队列的大小"""
        return len(self.__list)

if __name__ == "__main__":
    s = Queue()
    s.enqueque(1)
    s.enqueque(2)
    s.enqueque(3)
    s.enqueque(4)
    print(s.pop())
    print(s.pop())
    print(s.pop())
    print(s.pop())

双端队列

双端队列,是一种具有队列和栈的性质的数据结构

双端队列中的元素可以从两端弹出,其限定插入和删除操作在表的两端进行。双端队列可以在队列任意一端入队和出队

双端队列的实现

操作:

  • Deque()创建一个空的双端队列
  • add_front(item)从队头加入一个item元素

  • add_rear(item)从队尾加入一个item元素

  • remove_front()从队头删除一个item元素

  • remove_rear()从队尾删除一个item元素

  • is_empty()判断双端是否为空

  • size()返回队列大小

class Deque(object):
    """双端队列"""
    def __init__(self):
        self.__list = []

    def add_front(self, item):
        """往队列头部添加一个item元素"""
        self.__list.insert(0, item)

    def add_rear(self, item):
        """往队列尾部添加一个item元素"""
        self.__list.append(item)

    def pop_front(self):
        """从队列头部删除一个元素"""
        return self.__list.pop(0)

    def pop_rear(self):
        """从队列尾部删除一个元素"""
        return self.__list.pop()

    def is_empty(self):
        """判断一个队列是否为空"""
        return self.__list == []

    def size(self):
        """返回队列大小"""
        return len(self.__list)

原创文章,转载周知

持续更新…

个人博客地址:www.limiao.tech

简书:techLee


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

视觉SLAM十四讲

视觉SLAM十四讲

高翔、张涛、等 / 电子工业出版社 / 2017-3 / 75

《视觉SLAM十四讲:从理论到实践》系统介绍了视觉SLAM(同时定位与地图构建)所需的基本知识与核心算法,既包括数学理论基础,如三维空间的刚体运动、非线性优化,又包括计算机视觉的算法实现,例如多视图几何、回环检测等。此外,还提供了大量的实例代码供读者学习研究,从而更深入地掌握这些内容。 《视觉SLAM十四讲:从理论到实践》可以作为对SLAM 感兴趣的研究人员的入门自学材料,也可以作为SLAM......一起来看看 《视觉SLAM十四讲》 这本书的介绍吧!

HTML 压缩/解压工具
HTML 压缩/解压工具

在线压缩/解压 HTML 代码

JSON 在线解析
JSON 在线解析

在线 JSON 格式化工具

MD5 加密
MD5 加密

MD5 加密工具