zoukankan      html  css  js  c++  java
  • 队列的实现

     1 # -*- coding:utf-8 -*-
     2 """
     3 队列的特点是 先进先出 ,一般有一下操作
     4 enqueue 将一个元素存入队列中
     5 dequeue 将一个元素从队列中取出, 并在队列中删除他
     6 
     7 empty 查看队列是否是空
     8 """
     9 
    10 
    11 # Node类是一个节点, 有两个属性, 一个是存储元素, 一个指向另一节点的引用
    12 class Node(object):
    13     def __init__(self, element=None, next=None):
    14         self.element = element
    15         self.next = next
    16 
    17     # 这个函数是在使用print的时候被自动调用, 就是把这个Node显示出来
    18     def __repr__(self):
    19         return str(self.element)
    20 
    21 
    22 class Queue(object):
    23     # 初始化函数, 自动被调用
    24     # 初始化Queue()类的时候, 他有两个属性, 分别指向头尾
    25     def __init__(self):
    26         self.head = Node()
    27         self.tail = self.head
    28 
    29     # 如果head的next属性为空, 说明队列是空的 这里不能是head的element
    30     def empty(self):
    31         return self.head.next is None
    32 
    33     # 创建一个node
    34     # 让tail.next指向ta
    35     # 让tail指向他, tail现在就是新的队尾
    36     def enqueue(self, element):
    37         n = Node(element)
    38         self.tail.next = n
    39         self.tail = n
    40 
    41     # 取出head.next指向的元素, 如果队列不是空的, 就让head.next指向node.next,
    42     # 这样node就不在队列中
    43     def dequeue(self):
    44         node = self.head.next
    45         if not self.empty():
    46             self.head.next = node.next
    47             # 看看是不是只有一个元素, 如果是的话,
    48             # 让让tail指回第一个Node
    49             if self.head.next == None: 
    50                 self.tail = self.head   
    51         return node
    52 
    53 def test():
    54     q = Queue()
    55     q.enqueue(1)
    56     print(q.dequeue())
    57     q.enqueue(1)
    58     print(q.dequeue())
    59     print(q.dequeue())
    60     print(q.dequeue())
    61     print(q.dequeue())
    62 
    63 if __name__ == "__main__":
    64     test()
  • 相关阅读:
    基于ngx_lua模块的waf开发实践
    ffmpeg 和 x264的参数对照
    Javascript 面向对象编程(一):封装
    使用node.js + socket.io + redis实现基本的聊天室场景
    的NodeJS异步数据库函数需要同步的答案 +
    vlan设置
    windows2003服务器双线双IP双网卡设置方法
    Centos 添加SWAP(交换分区)
    centos6 编译安装gcc4.8.2
    libtool: Version mismatch error. 解决方法
  • 原文地址:https://www.cnblogs.com/cuzz/p/8098046.html
Copyright © 2011-2022 走看看