📅  最后修改于: 2023-12-03 15:37:09.762000             🧑  作者: Mango
在计算机科学中,数据结构是指数据在计算机中存储、组织和管理的方式。不同的数据结构适用于不同的场合和要求,因此熟练运用各种数据结构的常用操作是程序员的一项重要技能。
本文将介绍一些常见数据结构的基本操作及其复杂度。
数组是一种线性数据结构,用于存储一组具有相同类型的数据。数组的特点是随机访问快,插入和删除慢。
使用以下语法声明一个名为 arr
,长度为 n
的整数数组:
arr = [0] * n
下标从 0 开始,访问第 i
个元素的时间复杂度为 O(1):
print(arr[i])
遍历数组的时间复杂度为 O(n):
for i in range(n):
print(arr[i])
在数组的末尾插入元素的时间复杂度为 O(1):
arr.append(x)
删除指定位置的元素的时间复杂度为 O(n):
del arr[i]
链表是一种线性数据结构,用于存储一组具有相同类型的数据。链表的特点是插入和删除快,随机访问慢。
使用以下语法声明一个名为 head
的单向链表:
class ListNode:
def __init__(self, val=0, next=None):
self.val = val
self.next = next
head = ListNode()
访问链表元素的时间复杂度为 O(n):
p = head.next
while p:
print(p.val)
p = p.next
遍历链表的时间复杂度为 O(n):
p = head.next
while p:
# Do something
p = p.next
在链表的头部插入元素的时间复杂度为 O(1):
new_node = ListNode(val)
new_node.next = head.next
head.next = new_node
删除指定节点的时间复杂度为 O(n):
prev, curr = None, head.next
while curr:
if curr.val == x:
prev.next = curr.next
break
prev, curr = curr, curr.next
栈是一种后进先出(LIFO)的数据结构,用于存储一组具有相同类型的数据。
使用以下语法声明一个名为 stack
的栈:
stack = []
入栈元素的时间复杂度为 O(1):
stack.append(x)
出栈元素的时间复杂度为 O(1):
x = stack.pop()
查看栈顶元素的时间复杂度为 O(1):
x = stack[-1]
队列是一种先进先出(FIFO)的数据结构,用于存储一组具有相同类型的数据。
使用以下语法声明一个名为 queue
的队列:
queue = collections.deque()
入队元素的时间复杂度为 O(1):
queue.append(x)
出队元素的时间复杂度为 O(1):
x = queue.popleft()
查看队首元素的时间复杂度为 O(1):
x = queue[0]
堆是一种特殊的树形数据结构,用于维护一个集合中最值等特殊要求。
使用以下语法声明一个名为 heap
的最小堆:
heap = []
插入元素的时间复杂度为 O(log n):
heappush(heap, x)
弹出堆顶元素的时间复杂度为 O(log n):
x = heappop(heap)
查看堆顶元素的时间复杂度为 O(1):
x = heap[0]