📅  最后修改于: 2023-12-03 15:36:51.815000             🧑  作者: Mango
列表和地图是计算机科学中常见的两种数据结构。列表可以存储一组有序的数据,而地图可以存储一组无序的键值对。这两种数据结构在实际开发中经常被使用,因此对它们有深入的了解是非常重要的。
列表是一种线性数据结构,它可以存储任意类型的数据,并且支持随机访问、查找、插入和删除操作。列表的实现方式有多种,如数组、链表等。
数组是一种顺序存储的线性数据结构,它通过下标来访问元素,因此具有随机访问的特性。数组的缺点是在插入和删除元素时需要移动后续元素,比较耗时。在实际开发中,我们通常使用语言内置的数组实现,如 Python 中的 list、Java 中的 ArrayList 等。
以下是 Python 中 list 的一些简单用法:
# 创建一个空的列表
a = []
# 向列表末尾添加一个元素
a.append(1)
a.append(2)
a.append(3)
# 访问列表中的元素
print(a[0])
print(a[-1])
# 在指定位置插入元素
a.insert(1, 4)
# 删除列表中的元素
a.remove(2)
# 统计列表中元素的个数
print(len(a))
# 遍历列表
for item in a:
print(item)
链表同样是一种线性数据结构,它通过节点之间的指针来连接元素,链表的插入和删除操作比较高效,但是随机访问操作较慢。链表的实现方式有多种,如单向链表、双向链表等。
以下是 Python 中双向链表的简单实现:
class Node:
def __init__(self, value):
self.val = value
self.prev = None
self.next = None
class DoubleLinkedList:
def __init__(self):
self.head = Node(None)
self.tail = Node(None)
self.head.next = self.tail
self.tail.prev = self.head
def insert_after(self, node, value):
new_node = Node(value)
node_next = node.next
node.next = new_node
new_node.prev = node
new_node.next = node_next
node_next.prev = new_node
def remove(self, node):
prev_node = node.prev
next_node = node.next
prev_node.next = next_node
next_node.prev = prev_node
# 创建一个双向链表
dl = DoubleLinkedList()
# 插入节点
node1 = dl.head
dl.insert_after(node1, 1)
node2 = node1.next
dl.insert_after(node2, 2)
node3 = node2.next
dl.insert_after(node3, 3)
# 删除节点
dl.remove(node2)
# 遍历链表
node = dl.head.next
while node != dl.tail:
print(node.val)
node = node.next
地图也称为哈希表或字典,它是一种存储键值对的数据结构,它可以快速地根据键来查找对应的值。地图的实现方式有多种,如数组 + 链表、红黑树、Hopscotch Hashing 等。
以下是 Python 中字典的一些简单用法:
# 创建一个字典
d = {'apple': 1, 'banana': 2, 'orange': 3}
# 访问字典中的元素
print(d['apple'])
print(d.get('banana'))
# 插入或更新字典中的元素
d['pear'] = 4
d.update({'grape': 5})
# 删除字典中的元素
del d['orange']
d.pop('pear')
# 遍历字典
for key, value in d.items():
print(key, value)
列表和地图是计算机科学中重要的两种数据结构,它们分别适用于不同的场景。我们需要灵活地使用它们来解决实际问题。