📜  列表与地图 (1)

📅  最后修改于: 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)
总结

列表和地图是计算机科学中重要的两种数据结构,它们分别适用于不同的场景。我们需要灵活地使用它们来解决实际问题。