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)
  • 相关阅读:
    LeetCode_222.完全二叉树的节点个数
    LeetCode_219.存在重复元素 II
    LeetCode_217.存在重复元素
    LeetCode_215.数组中的第K个最大元素
    LeetCode_21.合并两个有序链表
    LeetCode_206.反转链表
    LeetCode_205.同构字符串
    LeetCode_202.快乐数
    LeetCode_20.有效的括号
    LeetCode_2.两数相加
  • 原文地址:https://www.cnblogs.com/linyuhong/p/9794697.html
Copyright © 2011-2022 走看看