Python: Iterator Pattern

DuIterator.py

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
# 迭代器模式 Iterator Pattern
 
# Doubly Linked List
class Node(object):
    def __init__(self, value, nextNode, prevNode):
        self.value = value
        self.next = nextNode
        self.prev = prevNode
 
 
class DoublyLinkedList(object):
    def __init__(self):
        self.size = 0
        self.head = None
        self.tail = None
 
    def isEmpty(self):
        return self.head is None
 
    def addLast(self, value):
        if self.isEmpty():
            tmp = Node(value, None, None)
            self.head = tmp
            self.tail = tmp
            self.size += 1
            return
 
        self.tail.next = Node(value, None, self.tail)
        self.tail = self.tail.next
        self.size += 1
 
    def getIterator(self):
        return DLinkIterator(self.head)
 
    def getReverseIterator(self):
        return DLinkReverseIterator(self.tail)
 
# Forward Iterator:
class DLinkIterator(object):
   def __init__(self, startNode):
       self.current = startNode
 
   def hasNext(self):
       return self.current != None
 
   def next(self):
       if not self.hasNext():
           raise IndexError
       val = self.current.value
       self.current = self.current.next
       return val
# Reverse Iterator:
class DLinkReverseIterator(object):
   def __init__(self, startNode):
       self.current = startNode
 
   def hasNext(self):
       return self.current != None
 
   def next(self):
       if not self.hasNext():
           raise IndexError
       val = self.current.value
       self.current = self.current.prev
       return val

  

main.py 调用:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 迭代器模式 Iterator Pattern
myList = DuIterator.DoublyLinkedList()
 
myList.addLast("Hello")
myList.addLast("Geovin Du")
myList.addLast("Goodbye")
myList.addLast("涂聚文")
 
# Iterate the list forwards:
forwardIter = myList.getIterator()
 
while forwardIter.hasNext():
 print(forwardIter.next())
 print("\n")

  

输出:

1
2
3
4
5
6
7
8
9
10
Hello
 
 
Geovin Du
 
 
Goodbye
 
 
涂聚文

  

posted @   ®Geovin Du Dream Park™  阅读(27)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
历史上的今天:
2012-10-23 Csharp: winform PDF view control use Adobe Reader X
2009-10-23 cookieLibrary.js 写入cookie的JavaScript代码库
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示