📅  最后修改于: 2023-12-03 15:10:34.469000             🧑  作者: Mango
作为程序员,我们经常需要处理数据,而数据结构是程序处理数据的基础。一个好的数据结构可以提高程序的效率、减少内存占用和代码实现难度。但是,如何选择最佳数据结构呢?
以下是一些常用数据结构及其应用场景和优缺点。
数组是一种存储相同类型数据的数据结构,在内存中连续存储。可以通过下标快速访问元素。
应用场景:
优点:
缺点:
代码示例:
array = [1, 2, 3, 4, 5]
print(array[2]) # 输出 3
链表是一种通过指针相互连接的数据结构,可以动态增删元素。每个节点包含数据和指向下一个节点的指针。
应用场景:
优点:
缺点:
代码示例:
class Node:
def __init__(self, val=None):
self.val = val
self.next = None
node1 = Node(1)
node2 = Node(2)
node3 = Node(3)
node1.next = node2
node2.next = node3
current_node = node1
while current_node:
print(current_node.val)
current_node = current_node.next
栈是一种后进先出(LIFO)的数据结构,可以利用链表或数组实现。只允许在栈顶进行插入(入栈)和删除(出栈)操作。
应用场景:
优点:
缺点:
代码示例:
class Stack:
def __init__(self):
self.items = []
def is_empty(self):
return len(self.items) == 0
def push(self, item):
self.items.append(item)
def pop(self):
if self.is_empty():
raise Exception('Stack is empty')
return self.items.pop()
def top(self):
if self.is_empty():
raise Exception('Stack is empty')
return self.items[-1]
stack = Stack()
stack.push(1)
stack.push(2)
stack.push(3)
print(stack.top()) # 输出 3
stack.pop()
print(stack.top()) # 输出 2
队列是一种先进先出(FIFO)的数据结构,可以利用链表或数组实现。允许在队尾进行插入(入队)操作,在队头进行删除(出队)操作。
应用场景:
优点:
缺点:
代码示例:
class Queue:
def __init__(self):
self.items = []
def is_empty(self):
return len(self.items) == 0
def enqueue(self, item):
self.items.append(item)
def dequeue(self):
if self.is_empty():
raise Exception('Queue is empty')
return self.items.pop(0)
def front(self):
if self.is_empty():
raise Exception('Queue is empty')
return self.items[0]
queue = Queue()
queue.enqueue(1)
queue.enqueue(2)
queue.enqueue(3)
print(queue.front()) # 输出 1
queue.dequeue()
print(queue.front()) # 输出 2
哈希表是一种以 key-value 形式存储数据的数据结构,可以利用数组和链表实现。通过将 key 映射为在数组中的位置,加快访问速度。
应用场景:
优点:
缺点:
代码示例:
class HashTable:
def __init__(self):
self.size = 10
self.table = [[] for _ in range(self.size)]
def hash_function(self, key):
return key % self.size
def set(self, key, value):
index = self.hash_function(key)
for entry in self.table[index]:
if entry[0] == key:
entry[1] == value
return
self.table[index].append((key, value))
def get(self, key):
index = self.hash_function(key)
for entry in self.table[index]:
if entry[0] == key:
return entry[1]
raise KeyError
hash_table = HashTable()
hash_table.set(1, 'one')
hash_table.set(11, 'eleven')
hash_table.set(21, 'twenty one')
print(hash_table.get(1)) # 输出 "one"
以上是常用的数据结构及其优缺点和应用场景,程序员应该根据具体的应用需求选择最合适的数据结构。