zoukankan      html  css  js  c++  java
  • 「数据结构与算法(Python)」(三)

    栈结构实现

    栈可以用顺序表实现,也可以用链表实现。

    栈的操作

    • Stack() 创建一个新的空栈
    • push(item) 添加一个新的元素item到栈顶
    • pop() 弹出栈顶元素
    • peek() 返回栈顶元素
    • is_empty() 判断栈是否为空
    • size() 返回栈的元素个数

    这里我们用python的list来实现栈的操作

    class Stack(object):
         """"""
         def __init__(self):
              self.__list = []
     
         def is_empty(self):
             """判断是否为空"""
             return self.__list == []
         #return not self.__list
    
         def push(self, item):
            """加入元素"""
             self.__list.append(item) #可以选择从栈顶或栈底推入,这里我们选择从list尾部插入,时间复杂度为O(1);从头部则要改为.append(0, item) O(n)
     
         def pop(self):
             """弹出元素"""
             return self.__list.pop()
     
         def peek(self):
             """返回栈顶元素"""
            if self__list:
            return self.__list[-1]
         else:
            return None
     
         def size(self):
             """返回栈的大小"""
             return len(self.__list)
     
     if __name__ == "__main__":
         stack = Stack()
         stack.push("hello")
         stack.push("itcast")
         print stack.size()
         print stack.peek()
         print stack.pop()
         print stack.pop()
         print stack.pop()

    队列

    一端进一端出

    # coding:utf-8
    
    class Queue(object):
        """队列"""
        def __init__(self):
            self.__list = list()
    
        def enqueue(self, item):
            """往队列中添加元素"""
            self.__list.append(item)
    
        def dequeue(self):
            """从队列头部删除一个元素"""
            return self.__list.pop(0)
    
        def is_empty(self):
            """判空"""
            return not self.__list
    
        def size(self):
            """返回一个队列长度"""
            return len(self.__list)
    
    
    if __name__ == "__main__":
        q = Queue()
        q.enqueue(1)
        q.enqueue(2)
        q.enqueue(3)
        q.enqueue(4)
        q.enqueue(5)
        print(q.size())
        print(q.dequeue())
        print(q.size())
        print(q.is_empty())

    双端队列

    一端可以进也可以出,另一端可以进也可以出

    # coding:utf-8
    
    class Dequeue(object):
        """双端队列"""
        def __init__(self):
            self.__list = list()
    
        def add_front(self, item):
            """往队列头部添加元素"""
            self.__list.insert(0, item)
    
        def add_rear(self, item):
            """往队列尾部添加元素"""
            self.__list.append(item)
    
        def remove_front(self):
            """从队列头部删除一个元素"""
            self.__list.pop(0)
    
        def remove_rear(self):
            """从队列尾部删除一个元素"""
            return self.__list.pop()
    
        def is_empty(self):
            """判空"""
            return not self.__list
    
        def size(self):
            """返回一个队列长度"""
            return len(self.__list)
  • 相关阅读:
    在业务层进行回滚操作时如何避免回滚指令冗余
    云计算VS大数据 记与思
    [SAPBI]解决:不存在源系统(逻辑系统) T90CLNT090 的源系统标识符
    物料分类账简介
    BW Query设计中公式冲突解决方案
    解决BW处理链中节点有选择的执行
    如何立即手动执行BW周期性处理链
    资产数据源抽取当日增量数据的配置说明
    文本数据源预览出错
    主数据上载因重复记录报错问题解决
  • 原文地址:https://www.cnblogs.com/linyuhong/p/9794697.html
Copyright © 2011-2022 走看看