mirror of
https://github.com/krahets/hello-algo.git
synced 2026-02-01 19:25:00 +08:00
refactor: Follow the PEP 585 Typing standard (#439)
* Follow the PEP 585 Typing standard * Update list.py
This commit is contained in:
@@ -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 = []
|
||||
|
||||
@@ -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())]
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user