Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
baibaixiaoya
Python
提交
1cd8e685
P
Python
项目概览
baibaixiaoya
/
Python
与 Fork 源项目一致
从无法访问的项目Fork
通知
2
Star
0
Fork
1
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
P
Python
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
未验证
提交
1cd8e685
编写于
10月 24, 2020
作者:
ishellhub
提交者:
GitHub
10月 24, 2020
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Update LinkedQueue (#3683)
* update LinkedQueue * add type hint and rename
上级
409438d2
变更
1
显示空白变更内容
内联
并排
Showing
1 changed file
with
108 addition
and
31 deletion
+108
-31
data_structures/queue/linked_queue.py
data_structures/queue/linked_queue.py
+108
-31
未找到文件。
data_structures/queue/linked_queue.py
浏览文件 @
1cd8e685
""" A Queue using a
Linked L
ist like structure """
from
typing
import
Any
,
Optional
""" A Queue using a
linked l
ist like structure """
from
typing
import
Any
class
Node
:
def
__init__
(
self
,
data
:
Any
,
next
:
Optional
[
"Node"
]
=
None
):
self
.
data
:
Any
=
data
self
.
next
:
Optional
[
"Node"
]
=
next
def
__init__
(
self
,
data
:
Any
)
->
None
:
self
.
data
=
data
self
.
next
=
None
def
__str__
(
self
)
->
str
:
return
f
"
{
self
.
data
}
"
class
LinkedQueue
:
"""
Linked List Queue implementing put (to end of queue),
get (from front of queue) and is_empty
>>> queue = LinkedQueue()
>>> queue.is_empty()
True
...
...
@@ -35,40 +35,117 @@ class LinkedQueue:
>>> queue.get()
Traceback (most recent call last):
...
IndexError:
get
from empty queue
IndexError:
dequeue
from empty queue
"""
def
__init__
(
self
)
->
None
:
self
.
front
:
Optional
[
Node
]
=
None
self
.
rear
:
Optional
[
Node
]
=
None
self
.
front
=
self
.
rear
=
None
def
__iter__
(
self
):
node
=
self
.
front
while
node
:
yield
node
.
data
node
=
node
.
next
def
__len__
(
self
)
->
int
:
"""
>>> queue = LinkedQueue()
>>> for i in range(1, 6):
... queue.put(i)
>>> len(queue)
5
>>> for i in range(1, 6):
... assert len(queue) == 6 - i
... _ = queue.get()
>>> len(queue)
0
"""
return
len
(
tuple
(
iter
(
self
)))
def
__str__
(
self
)
->
str
:
"""
>>> queue = LinkedQueue()
>>> for i in range(1, 4):
... queue.put(i)
>>> queue.put("Python")
>>> queue.put(3.14)
>>> queue.put(True)
>>> str(queue)
'1 <- 2 <- 3 <- Python <- 3.14 <- True'
"""
return
" <- "
.
join
(
str
(
item
)
for
item
in
self
)
def
is_empty
(
self
)
->
bool
:
""" returns boolean describing if queue is empty """
return
self
.
front
is
None
"""
>>> queue = LinkedQueue()
>>> queue.is_empty()
True
>>> for i in range(1, 6):
... queue.put(i)
>>> queue.is_empty()
False
"""
return
len
(
self
)
==
0
def
put
(
self
,
item
:
Any
)
->
None
:
""" append item to rear of queue """
node
:
Node
=
Node
(
item
)
def
put
(
self
,
item
)
->
None
:
"""
>>> queue = LinkedQueue()
>>> queue.get()
Traceback (most recent call last):
...
IndexError: dequeue from empty queue
>>> for i in range(1, 6):
... queue.put(i)
>>> str(queue)
'1 <- 2 <- 3 <- 4 <- 5'
"""
node
=
Node
(
item
)
if
self
.
is_empty
():
# the queue contains just the single element
self
.
front
=
node
self
.
rear
=
node
self
.
front
=
self
.
rear
=
node
else
:
# not empty, so we add it to the rear of the queue
assert
isinstance
(
self
.
rear
,
Node
)
self
.
rear
.
next
=
node
self
.
rear
=
node
def
get
(
self
)
->
Any
:
""" returns and removes item at front of queue """
"""
>>> queue = LinkedQueue()
>>> queue.get()
Traceback (most recent call last):
...
IndexError: dequeue from empty queue
>>> queue = LinkedQueue()
>>> for i in range(1, 6):
... queue.put(i)
>>> for i in range(1, 6):
... assert queue.get() == i
>>> len(queue)
0
"""
if
self
.
is_empty
():
raise
IndexError
(
"get from empty queue"
)
else
:
# "remove" element by having front point to the next one
raise
IndexError
(
"dequeue from empty queue"
)
assert
isinstance
(
self
.
front
,
Node
)
node
:
N
ode
=
self
.
front
self
.
front
=
node
.
next
n
ode
=
self
.
front
self
.
front
=
self
.
front
.
next
if
self
.
front
is
None
:
self
.
rear
=
None
return
node
.
data
def
clear
(
self
)
->
None
:
"""
>>> queue = LinkedQueue()
>>> for i in range(1, 6):
... queue.put(i)
>>> queue.clear()
>>> len(queue)
0
>>> str(queue)
''
"""
self
.
front
=
self
.
rear
=
None
if
__name__
==
"__main__"
:
from
doctest
import
testmod
testmod
()
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录