refactor: Follow the PEP 585 Typing standard (#439)

* Follow the PEP 585 Typing standard

* Update list.py
This commit is contained in:
Yudong Jin
2023-03-23 18:51:56 +08:00
committed by GitHub
parent f4e01ea32e
commit 8918ec9079
43 changed files with 256 additions and 342 deletions

View File

@@ -4,17 +4,11 @@ Created Time: 2023-03-01
Author: Krahets (krahets@163.com)
"""
import sys, os.path as osp
sys.path.append(osp.dirname(osp.dirname(osp.abspath(__file__))))
from modules import *
class ArrayDeque:
""" 基于环形数组实现的双向队列 """
def __init__(self, capacity: int) -> None:
""" 构造方法 """
self.__nums: List[int] = [0] * capacity
self.__nums: list[int] = [0] * capacity
self.__front: int = 0
self.__size: int = 0
@@ -86,7 +80,7 @@ class ArrayDeque:
last = self.index(self.__front + self.__size - 1)
return self.__nums[last]
def to_array(self) -> List[int]:
def to_array(self) -> list[int]:
""" 返回数组用于打印 """
# 仅转换有效长度范围内的列表元素
res = []

View File

@@ -4,15 +4,11 @@ Created Time: 2022-12-01
Author: Peng Chen (pengchzn@gmail.com)
"""
import sys, os.path as osp
sys.path.append(osp.dirname(osp.dirname(osp.abspath(__file__))))
from modules import *
class ArrayQueue:
""" 基于环形数组实现的队列 """
def __init__(self, size: int) -> None:
""" 构造方法 """
self.__nums: List[int] = [0] * size # 用于存储队列元素的数组
self.__nums: list[int] = [0] * size # 用于存储队列元素的数组
self.__front: int = 0 # 队首指针,指向队首元素
self.__size: int = 0 # 队列长度
@@ -51,9 +47,9 @@ class ArrayQueue:
assert not self.is_empty(), "队列为空"
return self.__nums[self.__front]
def to_list(self) -> List[int]:
def to_list(self) -> list[int]:
""" 返回列表用于打印 """
res: List[int] = [0] * self.size()
res: list[int] = [0] * self.size()
j: int = self.__front
for i in range(self.size()):
res[i] = self.__nums[(j % self.capacity())]

View File

@@ -4,15 +4,11 @@ Created Time: 2022-11-29
Author: Peng Chen (pengchzn@gmail.com)
"""
import sys, os.path as osp
sys.path.append(osp.dirname(osp.dirname(osp.abspath(__file__))))
from modules import *
class ArrayStack:
""" 基于数组实现的栈 """
def __init__(self) -> None:
""" 构造方法 """
self.__stack: List[int] = []
self.__stack: list[int] = []
def size(self) -> int:
""" 获取栈的长度 """
@@ -36,7 +32,7 @@ class ArrayStack:
assert not self.is_empty(), "栈为空"
return self.__stack[-1]
def to_list(self) -> List[int]:
def to_list(self) -> list[int]:
""" 返回列表用于打印 """
return self.__stack

View File

@@ -4,42 +4,39 @@ Created Time: 2022-11-29
Author: Peng Chen (pengchzn@gmail.com)
"""
import sys, os.path as osp
sys.path.append(osp.dirname(osp.dirname(osp.abspath(__file__))))
from modules import *
from collections import deque
""" Driver Code """
if __name__ == "__main__":
""" 初始化双向队列 """
deque: Deque[int] = collections.deque()
deq: deque[int] = deque()
""" 元素入队 """
deque.append(2) # 添加至队尾
deque.append(5)
deque.append(4)
deque.appendleft(3) # 添加至队首
deque.appendleft(1)
print("双向队列 deque =", deque)
deq.append(2) # 添加至队尾
deq.append(5)
deq.append(4)
deq.appendleft(3) # 添加至队首
deq.appendleft(1)
print("双向队列 deque =", deq)
""" 访问元素 """
front: int = deque[0] # 队首元素
front: int = deq[0] # 队首元素
print("队首元素 front =", front)
rear: int = deque[-1] # 队尾元素
rear: int = deq[-1] # 队尾元素
print("队尾元素 rear =", rear)
""" 元素出队 """
pop_front: int = deque.popleft() # 队首元素出队
pop_front: int = deq.popleft() # 队首元素出队
print("队首出队元素 pop_front =", pop_front)
print("队首出队后 deque =", deque)
pop_rear: int = deque.pop() # 队尾元素出队
print("队首出队后 deque =", deq)
pop_rear: int = deq.pop() # 队尾元素出队
print("队尾出队元素 pop_rear =", pop_rear)
print("队尾出队后 deque =", deque)
print("队尾出队后 deque =", deq)
""" 获取双向队列的长度 """
size: int = len(deque)
size: int = len(deq)
print("双向队列长度 size =", size)
""" 判断双向队列是否为空 """
is_empty: bool = len(deque) == 0
is_empty: bool = len(deq) == 0
print("双向队列是否为空 =", is_empty)

View File

@@ -4,24 +4,20 @@ Created Time: 2023-03-01
Author: Krahets (krahets@163.com)
"""
import sys, os.path as osp
sys.path.append(osp.dirname(osp.dirname(osp.abspath(__file__))))
from modules import *
class ListNode:
""" 双向链表结点 """
def __init__(self, val: int) -> None:
""" 构造方法 """
self.val: int = val
self.next: Optional[ListNode] = None # 后继结点引用(指针)
self.prev: Optional[ListNode] = None # 前驱结点引用(指针)
self.next: ListNode | None = None # 后继结点引用(指针)
self.prev: ListNode | None = None # 前驱结点引用(指针)
class LinkedListDeque:
""" 基于双向链表实现的双向队列 """
def __init__(self) -> None:
""" 构造方法 """
self.front: Optional[ListNode] = None # 头结点 front
self.rear: Optional[ListNode] = None # 尾结点 rear
self.front: ListNode | None = None # 头结点 front
self.rear: ListNode | None = None # 尾结点 rear
self.__size: int = 0 # 双向队列的长度
def size(self) -> int:
@@ -69,7 +65,7 @@ class LinkedListDeque:
if is_front:
val: int = self.front.val # 暂存头结点值
# 删除头结点
fnext: Optional[ListNode] = self.front.next
fnext: ListNode | None = self.front.next
if fnext != None:
fnext.prev = None
self.front.next = None
@@ -78,7 +74,7 @@ class LinkedListDeque:
else:
val: int = self.rear.val # 暂存尾结点值
# 删除尾结点
rprev: Optional[ListNode] = self.rear.prev
rprev: ListNode | None = self.rear.prev
if rprev != None:
rprev.next = None
self.rear.prev = None
@@ -102,10 +98,10 @@ class LinkedListDeque:
""" 访问队尾元素 """
return None if self.is_empty() else self.rear.val
def to_array(self) -> List[int]:
def to_array(self) -> list[int]:
""" 返回数组用于打印 """
node: Optional[ListNode] = self.front
res: List[int] = [0] * self.size()
node: ListNode | None = self.front
res: list[int] = [0] * self.size()
for i in range(self.size()):
res[i] = node.val
node = node.next

View File

@@ -12,8 +12,8 @@ class LinkedListQueue:
""" 基于链表实现的队列 """
def __init__(self):
""" 构造方法 """
self.__front: Optional[ListNode] = None # 头结点 front
self.__rear: Optional[ListNode] = None # 尾结点 rear
self.__front: ListNode | None = None # 头结点 front
self.__rear: ListNode | None = None # 尾结点 rear
self.__size: int = 0
def size(self) -> int:
@@ -53,7 +53,7 @@ class LinkedListQueue:
return False
return self.__front.val
def to_list(self) -> List[int]:
def to_list(self) -> list[int]:
""" 转化为列表用于打印 """
queue = []
temp = self.__front

View File

@@ -12,7 +12,7 @@ class LinkedListStack:
""" 基于链表实现的栈 """
def __init__(self):
""" 构造方法 """
self.__peek: Optional[ListNode] = None
self.__peek: ListNode | None = None
self.__size: int = 0
def size(self) -> int:
@@ -43,9 +43,9 @@ class LinkedListStack:
if not self.__peek: return None
return self.__peek.val
def to_list(self) -> List[int]:
def to_list(self) -> list[int]:
""" 转化为列表用于打印 """
arr: List[int] = []
arr: list[int] = []
node = self.__peek
while node:
arr.append(node.val)

View File

@@ -4,17 +4,15 @@ Created Time: 2022-11-29
Author: Peng Chen (pengchzn@gmail.com)
"""
import sys, os.path as osp
sys.path.append(osp.dirname(osp.dirname(osp.abspath(__file__))))
from modules import *
from collections import deque
""" Driver Code """
if __name__ == "__main__":
if __name__ == "__main__":
""" 初始化队列 """
# 在 Python 中,我们一般将双向队列类 deque 看作队列使用
# 虽然 queue.Queue() 是纯正的队列类,但不太好用
que: Deque[int] = collections.deque()
que: deque[int] = deque()
""" 元素入队 """
que.append(1)

View File

@@ -4,16 +4,11 @@ Created Time: 2022-11-29
Author: Peng Chen (pengchzn@gmail.com)
"""
import sys, os.path as osp
sys.path.append(osp.dirname(osp.dirname(osp.abspath(__file__))))
from modules import *
""" Driver Code """
if __name__ == "__main__":
""" 初始化栈 """
# Python 没有内置的栈类,可以把 list 当作栈来使用
stack: List[int] = []
stack: list[int] = []
""" 元素入栈 """
stack.append(1)