这个编程怎么编啊数据结构思想理解了但是实操没有一点思路,已经把所有的子函数也写上了也不明白
定义
这个算法2.1即为子函数6
(1) 子函数的实现:
# 子函数1: 使用头插法建立单链表
def create_linked_list(nums):
head = None
for num in nums:
new_node = Node(num)
new_node.next = head
head = new_node
return head
# 子函数2: 获取单链表的长度
def get_length(head):
length = 0
while head:
length += 1
head = head.next
return length
# 子函数3: 获取单链表指定位置的元素值
def get_element(head, position):
index = 0
while head:
if index == position:
return head.data
index += 1
head = head.next
return None
# 子函数4: 查找单链表的元素
def find_element(head, target):
index = 0
while head:
if head.data == target:
return index
index += 1
head = head.next
return -1
# 子函数5: 向单链表中指定位置插入数据
def insert_element(head, position, data):
if position == 0:
new_node = Node(data)
new_node.next = head
return new_node
index = 0
curr = head
while curr:
if index == position - 1:
new_node = Node(data)
new_node.next = curr.next
curr.next = new_node
return head
index += 1
curr = curr.next
return head
# 子函数6: 算法2.2,单链表的归并
def merge_lists(head1, head2):
head = None
curr = None
if head1.data <= head2.data:
head = head1
head1 = head1.next
else:
head = head2
head2 = head2.next
curr = head
while head1 and head2:
if head1.data <= head2.data:
curr.next = head1
head1 = head1.next
else:
curr.next = head2
head2 = head2.next
curr = curr.next
if head1:
curr.next = head1
if head2:
curr.next = head2
return head
(2) 主函数的实现:
# 定义单链表节点的类
class Node:
def __init__(self, data):
self.data = data
self.next = None
# 建立两个单链表 La 和 Lb,存放两个非递减排列的序列值
nums1 = [1, 3, 5, 7, 9]
nums2 = [2, 4, 6, 8, 10]
# 创建单链表 La 和 Lb
La = create_linked_list(nums1)
Lb = create_linked_list(nums2)
# 输出 La 和 Lb 两个单链表的值
print("La:", end=" ")
curr = La
while curr:
print(curr.data, end=" ")
curr = curr.next
print()
print("Lb:", end=" ")
curr = Lb
while curr:
print(curr.data, end=" ")
curr = curr.next
print()
# 完成两个单链表对应序列的归并,存放到链表 Lc 中
Lc = merge_lists(La, Lb)
# 输出单链表 Lc 的值
print("Lc:", end=" ")
curr = Lc
while curr:
print(curr.data, end=" ")
curr = curr.next
print()
上述代码中使用了一个 Node
类来表示单链表中的节点,每个节点包含一个 data
属性来存放数据,以及一个 next
属性来指向下一个节点。子函数中的链表操作都是基于该节点类实现的。
(3) 测试用例和实验结果:
输入:
La: 1 3 5 7 9
Lb: 2 4 6 8 10
输出:
Lc: 1 2 3 4 5 6 7 8 9 10
(4) 实验体会:
在这个实验中,我实现了几个常用的单链表操作函数,并进行了一些简单的测试。通过这个实验,我对单链表的建立、插入、查找、合并等操作有了更深入的理解,加深了对链表的概念和应用的理解。同时,也感受到了使用链表相比于数组的一些优势,如动态扩展和插入删除的灵活性。