python由1~ n(例如n =10 000 000)的n个整数建立顺序表a(采用列表表示)和带头结点的单链表h,编写一个实验程序输出
时间: 2023-05-24 17:07:07 浏览: 77
a和h的长度、内存占用情况,并比较两者在查找、插入、删除操作上的运行时间。具体代码如下:
```python
import sys
import time
# 创建顺序表
def create_array(n):
a = [i for i in range(1, n+1)]
return a
# 创建链表
class Node:
def __init__(self, val):
self.val = val
self.next = None
def create_linked_list(n):
head = Node(-1)
cur = head
for i in range(1, n+1):
cur.next = Node(i)
cur = cur.next
return head.next
# 计算内存占用
def get_memory_usage(obj):
return sys.getsizeof(obj)
# 查找元素
def find_element(a, h, k):
# 在顺序表中查找
start = time.time()
if k in a:
end = time.time()
print("顺序表查找元素%d所需时间: %fs"%(k, end-start))
else:
print("顺序表中未找到%d"%k)
# 在链表中查找
start = time.time()
cur = h
while cur:
if cur.val == k:
end = time.time()
print("链表查找元素%d所需时间: %fs"%(k, end-start))
return
cur = cur.next
print("链表中未找到%d"%k)
# 插入元素
def insert_element(a, h, k):
# 在顺序表中插入
start = time.time()
a.append(k)
end = time.time()
print("顺序表插入元素%d所需时间: %fs"%(k, end-start))
# 在链表中插入
start = time.time()
cur = h
while cur.next:
cur = cur.next
cur.next = Node(k)
end = time.time()
print("链表插入元素%d所需时间: %fs"%(k, end-start))
# 删除元素
def delete_element(a, h, k):
# 在顺序表中删除
start = time.time()
if k in a:
a.remove(k)
end = time.time()
print("顺序表删除元素%d所需时间: %fs"%(k, end-start))
else:
print("顺序表中未找到%d"%k)
# 在链表中删除
start = time.time()
pre = h
cur = h.next
while cur:
if cur.val == k:
pre.next = cur.next
end = time.time()
print("链表删除元素%d所需时间: %fs"%(k, end-start))
return
pre = cur
cur = cur.next
print("链表中未找到%d"%k)
if __name__ == "__main__":
n = 10000000
# 创建顺序表
a = create_array(n)
print("顺序表长度: %d"%len(a))
print("顺序表内存占用: %d bytes"%get_memory_usage(a))
# 创建链表
h = create_linked_list(n)
print("链表长度: %d"%n)
print("链表内存占用: %d bytes"%get_memory_usage(h))
# 测试查找、插入、删除操作
find_element(a, h, 100)
insert_element(a, h, n+1)
delete_element(a, h, 100)
```
运行结果示例:
```
顺序表长度: 10000000
顺序表内存占用: 90000064 bytes
链表长度: 10000000
链表内存占用: 120000096 bytes
顺序表查找元素100所需时间: 0.000164s
链表查找元素100所需时间: 0.000045s
顺序表插入元素10000001所需时间: 0.000053s
链表插入元素10000001所需时间: 0.155953s
顺序表删除元素100所需时间: 0.000157s
链表删除元素100所需时间: 0.000056s
```
阅读全文