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)
    
    
  • 相关阅读:
    sed
    zabbix时间不同步
    zabbix-agent安装
    zabbix安装(网络)
    sendmail启动报错
    12306:被骂十年不吭声,终成大器
    一文带你看清HTTP所有概念(转)
    为什么 K8s 在阿里能成功(转)
    一文解读融资方式
    一文解读工业互联网 (转)
  • 原文地址:https://www.cnblogs.com/qianzhengkai/p/10832833.html
Copyright © 2011-2022 走看看