Python 作业 — nasbuild.dev
py 实验一.py
py 实验二.py
Python UTF-8
class Node: def __init__(self, data): self.data = data self.next = None class LinkedList: def __init__(self): # ① 新建一个带有头结点的空链表 self.head = Node(None) def add(self, data): # 在链表头插入一个新结点(头插法) new_node = Node(data) new_node.next = self.head.next self.head.next = new_node def insert(self, data): # 在指定值的结点后面插入新结点 # 找到值为 data 的前驱结点,在其后面插入 data+1 p = self.head while p.next is not None: if p.next.data == data: new_node = Node(data + 1) new_node.next = p.next.next p.next.next = new_node return p = p.next def display(self): # 逐个输出结点的值 p = self.head.next while p is not None: if p.next is not None: print(p.data, end="->") else: print(p.data) p = p.next # 主程序 L = LinkedList() # ② 在链表头逐个插入9个结点 # 头插法是倒序插入,要得到 1,2,3,4,5,7,8,9,10 的遍历结果 # 需要按从大到小的顺序插入 nums = [10, 9, 8, 7, 5, 4, 3, 2, 1] for x in nums: L.add(x) print("链表建立完成后遍历结果:") L.display() # ③ 在5和7之间插入一个结点,数据域为6 L.insert(5) print("在5和7之间插入6后遍历结果:") L.display()
class Node: def __init__(self, data): self.data = data self.next = None class LinkedList: def __init__(self): self.head = None self.tail = None def add(self, data): new_node = Node(data) if self.head is None: self.head = new_node self.tail = new_node else: self.tail.next = new_node self.tail = new_node def delete_head(self): if self.head is None: return None data = self.head.data self.head = self.head.next if self.head is None: self.tail = None return data def is_empty(self): return self.head is None def display(self): p = self.head while p is not None: print(p.data, end=" ") p = p.next def radix_sort(arr): # ① 将待排数据转换为链表方式存储 L = LinkedList() for x in arr: L.add(x) print("排序前:") L.display() print() # 找最大值,确定最大位数 max_val = max(arr) max_digits = len(str(max_val)) # ② 建立10个链表,分别对应数字0-9 buckets = [] for i in range(10): buckets.append(LinkedList()) # 按位数从个位到最高位进行分配和收集 for digit in range(max_digits): # 分配:将链表中的元素按当前位的数字插入对应桶 while not L.is_empty(): num = L.delete_head() # 取当前位的数字 index = (num // (10 ** digit)) % 10 buckets[index].add(num) # 收集:将10个桶中的元素按顺序读出,回存到链表 for i in range(10): while not buckets[i].is_empty(): num = buckets[i].delete_head() L.add(num) print("第", digit + 1, "轮排序后:") L.display() print() return L # 主程序 arr = [123, 45, 678, 9, 10, 321, 55, 888, 234, 66] L = radix_sort(arr) print("排序最终结果:") L.display() print()