zoukankan      html  css  js  c++  java
  • python 使用顺序表实现栈和队列

    栈:

     1 # -*- coding: utf-8 -*-
     2 # @author: Tele
     3 # @Time  : 2019/04/24 下午 2:33
     4 # 采用list(顺序表)实现栈结构,后入先出
     5 class MyStack:
     6     def __init__(self):
     7         self.__list = list()
     8 
     9     def is_empty(self):
    10         return self.__list == list()
    11 
    12     def size(self):
    13         return len(self.__list)
    14 
    15     # 弹出栈顶元素(删除)
    16     def pop(self):
    17         return self.__list.pop()
    18 
    19     # 入栈
    20     def push(self, item):
    21         self.__list.append(item)
    22 
    23     # 返回栈顶元素
    24     def peek(self):
    25         if self.is_empty():
    26             return None
    27         else:
    28             return self.__list[-1]
    29 
    30 
    31 def main():
    32     mystack = MyStack()
    33     mystack.push(1)
    34     mystack.push(2)
    35     mystack.push(3)
    36     mystack.push(4)
    37     mystack.push(5)
    38     print(mystack.peek())
    39     print(mystack.pop())
    40     print(mystack.size())
    41     print(mystack.is_empty())
    42 
    43 
    44 if __name__ == '__main__':
    45     main()

    队列:

     1 # -*- coding: utf-8 -*-
     2 # @author: Tele
     3 # @Time  : 2019/04/28 下午 3:16
     4 # 队列,先进先出
     5 # 设定list的头即为队列的头,list的尾即为队列的尾
     6 class Queue:
     7     def __init__(self):
     8         self.__list = list()
     9 
    10     def is_empty(self):
    11         return self.__list == list()
    12 
    13     def size(self):
    14         return len(self.__list)
    15 
    16     # 入队
    17     def enqueue(self, item):
    18         self.__list.append(item)
    19 
    20     # 出队,从队列头部删除一个元素
    21     def dequeue(self):
    22         return self.__list.pop(0)
    23 
    24 
    25 def main():
    26     queue = Queue()
    27     queue.enqueue(1)
    28     queue.enqueue(2)
    29     queue.enqueue(3)
    30     print(queue.dequeue())
    31     print(queue.is_empty())
    32     print(queue.size())
    33 
    34 
    35 if __name__ == '__main__':
    36     main()

    双向队列:

     1 # -*- coding: utf-8 -*-
     2 # @author: Tele
     3 # @Time  : 2019/04/28 下午 3:24
     4 # 双端队列,类似两个栈的栈底合并在一起
     5 # 设定list的头即为队列的头,list的尾即为队列的尾
     6 class DoubleQueue:
     7     def __init__(self):
     8         self.__list = list()
     9 
    10     def is_empty(self):
    11         return self.__list == list()
    12 
    13     def size(self):
    14         return len(self.__list)
    15 
    16     # 在队头添加元素
    17     def add_front(self, item):
    18         self.__list.insert(0, item)
    19 
    20     # 在队尾添加元素
    21     def add_rear(self, item):
    22         self.__list.append(item)
    23 
    24     # 从队头删除元素
    25     def remove_front(self):
    26         return self.__list.pop(0)
    27 
    28     # 从队尾删除元素
    29     def remove_rear(self):
    30         return self.__list.pop()
    31 
    32 
    33 def main():
    34     dq = DoubleQueue()
    35     dq.add_front(1)
    36     dq.add_front(2)
    37     dq.add_rear(1000)
    38     print(dq.size())
    39     print(dq.is_empty())
    40     print(dq.remove_front())
    41     print(dq.remove_rear())
    42 
    43 
    44 if __name__ == '__main__':
    45     main()

    队列的头尾选择与list的头尾对应关系应根据实际需要,如入队的频率高(在队尾添加元素),则队列的的尾就是list的尾,因为append的的复杂度为O(1),反之出队的频率高(从队头删除一个元素),则队列的头部为list的尾部,pop的复杂度为O(1)

  • 相关阅读:
    大学生自学网
    如何保证主从复制数据一致性
    CDN
    后端 线上 服务监控 与 报警 方案2
    利用 Gearman 实现系统错误报警功能
    增量部署和全量部署
    后端线上服务监控与报警方案
    简析TCP的三次握手与四次分手
    301 和 302 对 SEO 的影响
    Linux 查看负载
  • 原文地址:https://www.cnblogs.com/tele-share/p/10784332.html
Copyright © 2011-2022 走看看