zoukankan      html  css  js  c++  java
  • python语言的堆栈与队列类的实现

    基于python语言的数据结构之堆栈与队列的实现

    # 堆栈的实现
    # -*- coding: utf-8 -*-
    """
    栈(stack), 是一种容器,可以存入数据元素,访问元素,删除元素
        只允许在容器的一段存取数据
        特点: 后进先出 Last in first out
    """
    
    """
    借助list来实现堆栈
        添加的方法; 压栈(入栈)
                   弹栈(出栈)
                   Stack() 创建一个新的空栈
                   push(item) 添加一个新元素 item 到栈顶
                   pop() 弹出栈顶元素
                   peek() 返回栈顶元素
                   is_empty() 判断栈是否为空
                   size() 返回栈元素的个数
    """
    
    
    class Stack(object):
        """栈"""
        
        def __init__(self):
            self.__list = []
        
        def push(self, item):
            """添加一个新元素item到栈顶"""
            self.__list.append(item)  # 尾部添加 ,时间复杂度o1
            # self.__list.insert(0,item) 这样从尾部添加的时间复杂度为O(n)
        
        def pop(self):
            """弹出栈顶元素"""
            return self.__list.pop()
        
        def peek(self):
            """返回栈顶元素"""
            if self.__list:
                return self.__list[-1]
            return None
        
        def is_empty(self):
            """判断栈是否为空"""
            return self.__list == []
        
        def size(self):
            """返回栈元素的个数"""
            return len(self.__list)
    
    
    if __name__ == '__main__':
        s = Stack()
        print(s.is_empty())
        s.push(1)
        s.push(3)
        s.push(4)
        print(s.pop())
        print(s.pop())
        print(s.pop())
    
    
    # 队列的实现
    # -*- coding: utf-8 -*-
    
    class Queue:
        """队列"""
        
        def __init__(self):
            self.__list = []
        
        def enqueue(self, item):
            """往队列中添加一个元素"""
            self.__list.append(item)  # 时间复杂度o(1)
        
        def dequeue(self):
            """从队列头部删除一个元素"""
            return self.__list.pop(0)  # 时间复杂度 o(n)
        
        def is_empty(self):
            """判断是否为空"""
            return self.__list == []
        
        def size(self):
            """返回队列大小"""
            return len(self.__list)
    
    
    
    if __name__ == '__main__':
        s = Queue()
        print(s.is_empty())
        s.enqueue(1)
        s.enqueue(3)
        s.enqueue(4)
        print(s.dequeue())
        print(s.dequeue())
        print(s.dequeue())
    
    
    
    # 双端队列的实现
    # -*- coding: utf-8 -*-
    
    
    class Deque(object):
        def __init__(self):
            self.__list = []
        
        def add_front(self, item):
            """往队列头部添加一个元素"""
            self.__list.insert(0, item)  # 时间复杂度o(1)
        
        def add_rear(self, item):
            """往队列尾部添加一个元素"""
            self.__list.append(item)  # 时间复杂度o(1)
        
        def pop_rear(self):
            """从队列尾部删除一个元素"""
            return self.__list.pop()  # 时间复杂度 o(1)
        
        def pop_front(self):
            """从队列头部删除一个元素"""
            return self.__list.pop(0)  # 时间复杂度 o(n)
        
        def is_empty(self):
            """判断是否为空"""
            return self.__list == []
        
        def size(self):
            """返回队列大小"""
            return len(self.__list)
    
    
  • 相关阅读:
    [转]Navicat Premium 12试用期的破解方法
    Redis禁用持久化功能的设置
    阿里云ECS安装的redis服务器,用java代码去连接报错。
    关于Jedis连接Linux上的redis出现 DENIED Redis is running in protected mode问题的解决方案
    修改了jdk在环境变量中的路径怎么cmd中的jdk版本没有变
    阿里云上部署tomcat启动后,通过http不能访问
    【终结篇】不要再问我程序员该如何提高了……
    我是怎么把一个项目带崩的
    eterm和easyfare的官网地址
    java UTC时间和local时间相互转换
  • 原文地址:https://www.cnblogs.com/qianzhengkai/p/10832833.html
Copyright © 2011-2022 走看看