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

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

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

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

栈的实现

支持操作:

  • 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

目录
相关文章
【算法】栈
栈相关算法题,供参考,附有链接地址及板书
197 14
|
缓存 算法 Java
JVM知识体系学习六:JVM垃圾是什么、GC常用垃圾清除算法、堆内存逻辑分区、栈上分配、对象何时进入老年代、有关老年代新生代的两个问题、常见的垃圾回收器、CMS
这篇文章详细介绍了Java虚拟机(JVM)中的垃圾回收机制,包括垃圾的定义、垃圾回收算法、堆内存的逻辑分区、对象的内存分配和回收过程,以及不同垃圾回收器的工作原理和参数设置。
1210 4
JVM知识体系学习六:JVM垃圾是什么、GC常用垃圾清除算法、堆内存逻辑分区、栈上分配、对象何时进入老年代、有关老年代新生代的两个问题、常见的垃圾回收器、CMS
|
算法 程序员 索引
数据结构与算法学习七:栈、数组模拟栈、单链表模拟栈、栈应用实例 实现 综合计算器
栈的基本概念、应用场景以及如何使用数组和单链表模拟栈,并展示了如何利用栈和中缀表达式实现一个综合计算器。
335 1
数据结构与算法学习七:栈、数组模拟栈、单链表模拟栈、栈应用实例 实现 综合计算器
|
算法 安全 NoSQL
2024重生之回溯数据结构与算法系列学习之栈和队列精题汇总(10)【无论是王道考研人还是IKUN都能包会的;不然别给我家鸽鸽丢脸好嘛?】
数据结构王道第3章之IKUN和I原达人之数据结构与算法系列学习栈与队列精题详解、数据结构、C++、排序算法、java、动态规划你个小黑子;这都学不会;能不能不要给我家鸽鸽丢脸啊~除了会黑我家鸽鸽还会干嘛?!!!
|
算法
数据结构与算法二:栈、前缀、中缀、后缀表达式、中缀表达式转换为后缀表达式
这篇文章讲解了栈的基本概念及其应用,并详细介绍了中缀表达式转换为后缀表达式的算法和实现步骤。
397 3
|
存储 算法 定位技术
数据结构与算法学习二、稀疏数组与队列,数组模拟队列,模拟环形队列
这篇文章主要介绍了稀疏数组和队列的概念、应用实例以及如何使用数组模拟队列和环形队列的实现方法。
232 0
数据结构与算法学习二、稀疏数组与队列,数组模拟队列,模拟环形队列
|
算法 C++
【算法单调栈】 矩形牛棚(C/C++)
【算法单调栈】 矩形牛棚(C/C++)
|
存储 人工智能 算法
数据结构与算法细节篇之最短路径问题:Dijkstra和Floyd算法详细描述,java语言实现。
这篇文章详细介绍了Dijkstra和Floyd算法,这两种算法分别用于解决单源和多源最短路径问题,并且提供了Java语言的实现代码。
1250 3
数据结构与算法细节篇之最短路径问题:Dijkstra和Floyd算法详细描述,java语言实现。
|
机器学习/深度学习 存储 缓存
数据结构与算法学习十:排序算法介绍、时间频度、时间复杂度、常用时间复杂度介绍
文章主要介绍了排序算法的分类、时间复杂度的概念和计算方法,以及常见的时间复杂度级别,并简单提及了空间复杂度。
851 1
数据结构与算法学习十:排序算法介绍、时间频度、时间复杂度、常用时间复杂度介绍
|
机器学习/深度学习 存储 算法
【数据结构与算法基础】——算法复杂度
【数据结构与算法基础】——算法复杂度

热门文章

最新文章

推荐镜像

更多