由1~ n(例如n =10 000 000)的n个整数建立顺序表a(采用列表表示)和带头结点的单链表h,编写一个实验程序输出分别将所有元素逆置的时间。
时间: 2023-09-12 08:02:47 浏览: 69
以下是Python的实现代码:
```
import time
# 定义顺序表类
class SeqList:
def __init__(self, n):
self.elem = [i for i in range(1, n+1)]
self.length = n
def reverse(self):
start_time = time.time() # 记录开始时间
i, j = 0, self.length-1
while i < j:
self.elem[i], self.elem[j] = self.elem[j], self.elem[i]
i += 1
j -= 1
end_time = time.time() # 记录结束时间
return end_time - start_time # 返回耗时
# 定义单链表类
class ListNode:
def __init__(self, x):
self.val = x
self.next = None
class LinkedList:
def __init__(self, n):
self.head = ListNode(0)
p = self.head
for i in range(1, n+1):
p.next = ListNode(i)
p = p.next
self.length = n
def reverse(self):
start_time = time.time() # 记录开始时间
p = self.head.next
pre = None
while p:
q = p.next
p.next = pre
pre = p
p = q
self.head.next = pre
end_time = time.time() # 记录结束时间
return end_time - start_time # 返回耗时
# 测试代码
n = 10000000
seq_list = SeqList(n)
linked_list = LinkedList(n)
print("顺序表逆置耗时:", seq_list.reverse())
print("单链表逆置耗时:", linked_list.reverse())
```
注意,由于Python的列表和单链表的实现方式不同,顺序表的逆置采用了经典的双指针法,而单链表的逆置采用了迭代法。在其他语言中,实现方式可能会有所不同。
阅读全文