Python 使用单链表实现队列 (基于class, 包含迭代器)

#!/usr/bin/python
# -*- coding: utf-8 -*-

'''
Created on 2015-2-3
@author: beyondzhou
@name: test_linklistqueue.py
'''

def test_linklistqueue():

    # import pyListQueue
    from myqueue import linkListQueue

    print '#Init a queue named smith using enqueue'
    smith = linkListQueue()
    smith.enqueue('CSCI-112')
    smith.enqueue('MATH-121')
    smith.enqueue('HIST-340')
    smith.enqueue('ECON-101')

    print '\n#output smith queue'
    for element in smith:
        print element

    print '\n#dequeue one item'
    smith.dequeue()

    print '\n#output smith after dequeue'
    for element in smith:
        print element 

    smith.enqueue('ECON-102')
    print '\n#output smith after enqueue again'
    for element in smith:
        print element 

    print '\n#get the length of queue'
    print 'the lenght of queue is ', len(smith)

    print '\n#check wheter the queue is empty'
    if smith.isEmpty():
        print 'queue is empty!'
    else:
        print 'queue is not empty!'

    print '\n#dequeue all items'
    while not smith.isEmpty():
        smith.dequeue()

    print '\n#check wheter the queue is empty after dequeue all items'
    if smith.isEmpty():
        print 'queue is empty!'
    else:
        print 'queue is not empty!'

    print '\n#init again'
    smith.enqueue('CSCI-112')
    smith.enqueue('MATH-121')
    smith.enqueue('HIST-340')
    smith.enqueue('ECON-101')

    print '\n#output smith queue'
    for element in smith:
        print element

if __name__ == "__main__":
    test_linklistqueue()
# Implementation of the Queue ADT using a linked list
class linkListQueue:
    # Creates an empty queue
    def __init__(self):
        self._qhead = None
        self._qtail = None
        self._count = 0

    # Returns True if the queue is empty
    def isEmpty(self):
        return self._qhead is None

    # Returns the number of items in the queue
    def __len__(self):
        return self._count

    # Adds the given item to the queue
    def enqueue(self, item):
        node = _LinkListQueueNode(item)
        if self.isEmpty():
            self._qhead = node
        else:
            self._qtail.next = node

        self._qtail = node
        self._count += 1

    # Removes and returns the first item in the queue
    def dequeue(self):
        assert not self.isEmpty(), "Cannot dequeue from an empty queue."
        node = self._qhead
        if self._qhead is self._qtail:
            self._qtail = None
        self._qhead = self._qhead.next
        self._count -= 1
        return node.item

    # Returns an iterator for traversing the list of items
    def __iter__(self):
        return _LinkListQueueIterator(self._qhead)

# Private storage class for creating the linked list nodes
class _LinkListQueueNode(object):
    def __init__(self, item):
        self.item = item
        self.next = None

# Defines a linked list iterator
class _LinkListQueueIterator:
    def __init__(self, queueHead):
        self._curNode = queueHead

    def __iter__(self):
        return self

    def next(self):
        if self._curNode is None:
            raise StopIteration
        else:
            item = self._curNode.item
            self._curNode = self._curNode.next
            return item
#Init a queue named smith using enqueue

#output smith queue
CSCI-112
MATH-121
HIST-340
ECON-101

#dequeue one item

#output smith after dequeue
MATH-121
HIST-340
ECON-101

#output smith after enqueue again
MATH-121
HIST-340
ECON-101
ECON-102

#get the length of queue
the lenght of queue is  4

#check wheter the queue is empty
queue is not empty!

#dequeue all items

#check wheter the queue is empty after dequeue all items
queue is empty!

#init again

#output smith queue
CSCI-112
MATH-121
HIST-340
ECON-101

时间: 2024-12-16 23:49:21

Python 使用单链表实现队列 (基于class, 包含迭代器)的相关文章

Python 使用单链表实现堆栈 (基于class, 包含迭代器)

#!/usr/bin/python # -*- coding: utf-8 -*- ''' Created on 2015-1-28 @author: beyondzhou @name: test_linkliststack.py ''' def test_linkliststack(): # import linkListStack from mystack import LinkListStack print '#Init a stack named smith using push' sm

Python 使用循环数组实现队列 (基于class, 包含迭代器)

#!/usr/bin/python # -*- coding: utf-8 -*- ''' Created on 2015-2-2 @author: beyondzhou @name: test_arryqueue.py ''' def test_arryqueue(): # import pyListQueue from myqueue import arrayQueue print '#Init a queue named smith using enqueue' smith = array

Python 使用list实现队列 (基于class, 包含迭代器)

#!/usr/bin/python # -*- coding: utf-8 -*- ''' Created on 2015-1-27 @author: beyondzhou @name: test_listqueue.py ''' def test_listqueue(): # import pyListQueue from myqueue import pyListQueue print '#Init a queue named smith using enqueue' smith = pyL

使用带有头尾节点的单链表实现队列

package db; public class Queue<E> { /** * 内部类--单链表 * @author fightzhao * * @param <E> */ private static class Node<E> { public Node<E> next; public E data; public Node(E data, Node<E> next) { this.data = data; this.next = nex

Python 使用由单链表构建的数组实现有边际优先队列 (基于class, 包含迭代器)

#!/usr/bin/python # -*- coding: utf-8 -*- ''' Created on 2015-2-6 @author: beyondzhou @name: test_bpriorityqueue.py ''' def test_bpriorityqueue(): # import pyListQueue from myqueue import BPriorityQueue print '#Init a queue named smith using enqueue'

python实现单链表的反转

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 #!/usr/bin/env python #coding = utf-8 class Node:     def __init__(self,data=None,next = None):         self.data = data         self.next = next def rev(link):     pre = link     cur = l

python 实现单链表

#! /usr/bin/env python ### ### Linked List python implementation ### ### @reference Data Structures and Algorithm Analysis in C:Second Edition : Mark Allen Weiss ### @date Tue Sep 29 20:51:55 CST 2015 #node structure class Node(object): def __init__(

python实现单链表

#encoding:utf-8 import sys class Lnode():     def __init__(self,elem,next=None):         self.elem = elem    #节点的值         self.next = next    #指向下一个节点     def getelem(self):         return self.elem     def getnext(self):         return self.next cl

单链表实现队列

#include <stdio.h> #include <stdlib.h> typedef int queue_element_t; typedef struct queue_node_s { queue_element_t element; struct queue_node_s *restp; }queue_node_t; /*Queue front & rear pointer*/ typedef struct { queue_node_t *frontp, *re