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)

原文地址:https://www.cnblogs.com/qianzhengkai/p/10832833.html