引言
数据结构是计算机科学中的基础概念,它涉及如何有效地存储、管理和组织数据。掌握数据结构对于编程和软件开发至关重要。本文将详细介绍300道经典的数据结构习题,并提供详细的解答与实战技巧,帮助你轻松掌握数据结构。
1. 数组
1.1 数组的基本操作
习题:实现一个数组,支持以下操作:插入、删除、查找和排序。
解答:
class Array:
def __init__(self, capacity):
self.capacity = capacity
self.size = 0
self.array = [None] * capacity
def insert(self, index, value):
if index < 0 or index > self.size:
raise IndexError("Index out of bounds")
if self.size == self.capacity:
raise IndexError("Array is full")
for i in range(self.size, index, -1):
self.array[i] = self.array[i - 1]
self.array[index] = value
self.size += 1
def delete(self, index):
if index < 0 or index >= self.size:
raise IndexError("Index out of bounds")
for i in range(index, self.size - 1):
self.array[i] = self.array[i + 1]
self.size -= 1
def find(self, value):
for i in range(self.size):
if self.array[i] == value:
return i
return -1
def sort(self):
for i in range(self.size):
for j in range(i + 1, self.size):
if self.array[i] > self.array[j]:
self.array[i], self.array[j] = self.array[j], self.array[i]
1.2 数组的查找与排序
习题:实现二分查找和快速排序。
解答:
def binary_search(arr, target):
left, right = 0, len(arr) - 1
while left <= right:
mid = (left + right) // 2
if arr[mid] == target:
return mid
elif arr[mid] < target:
left = mid + 1
else:
right = mid - 1
return -1
def quick_sort(arr):
if len(arr) <= 1:
return arr
pivot = arr[len(arr) // 2]
left = [x for x in arr if x < pivot]
middle = [x for x in arr if x == pivot]
right = [x for x in arr if x > pivot]
return quick_sort(left) + middle + quick_sort(right)
2. 链表
2.1 链表的基本操作
习题:实现一个单链表,支持以下操作:插入、删除、查找和反转。
解答:
class ListNode:
def __init__(self, value=0, next=None):
self.value = value
self.next = next
class LinkedList:
def __init__(self):
self.head = None
def insert(self, value):
new_node = ListNode(value)
new_node.next = self.head
self.head = new_node
def delete(self, value):
prev = None
curr = self.head
while curr and curr.value != value:
prev = curr
curr = curr.next
if curr:
if prev:
prev.next = curr.next
else:
self.head = curr.next
def find(self, value):
curr = self.head
while curr and curr.value != value:
curr = curr.next
return curr
def reverse(self):
prev = None
curr = self.head
while curr:
next_node = curr.next
curr.next = prev
prev = curr
curr = next_node
self.head = prev
2.2 链表的查找与排序
习题:实现链表的归并排序。
解答:
def merge_sort(head):
if not head or not head.next:
return head
middle = get_middle(head)
next_to_middle = middle.next
middle.next = None
left = merge_sort(head)
right = merge_sort(next_to_middle)
sorted_list = merge(left, right)
return sorted_list
def get_middle(head):
if not head:
return head
slow = head
fast = head
while fast.next and fast.next.next:
slow = slow.next
fast = fast.next.next
return slow
def merge(left, right):
if not left:
return right
if not right:
return left
if left.value < right.value:
temp = left
left = left.next
else:
temp = right
right = right.next
head = temp
while left and right:
if left.value < right.value:
temp.next = left
left = left.next
else:
temp.next = right
right = right.next
temp = temp.next
if not left:
temp.next = right
if not right:
temp.next = left
return head
3. 栈和队列
3.1 栈和队列的基本操作
习题:实现一个栈和队列,支持以下操作:插入、删除、查找和排序。
解答:
class Stack:
def __init__(self):
self.items = []
def push(self, item):
self.items.append(item)
def pop(self):
return self.items.pop()
def peek(self):
return self.items[-1]
def is_empty(self):
return len(self.items) == 0
def size(self):
return len(self.items)
def sort(self):
return sorted(self.items)
class Queue:
def __init__(self):
self.items = []
def enqueue(self, item):
self.items.insert(0, item)
def dequeue(self):
return self.items.pop()
def is_empty(self):
return len(self.items) == 0
def size(self):
return len(self.items)
def sort(self):
return sorted(self.items)
3.2 栈和队列的查找与排序
习题:实现栈和队列的排序。
解答:
def stack_sort(stack):
return sorted(stack.items)
def queue_sort(queue):
return sorted(queue.items)
4. 树
4.1 树的基本操作
习题:实现一个二叉树,支持以下操作:插入、删除、查找和排序。
解答:
class TreeNode:
def __init__(self, value=0, left=None, right=None):
self.value = value
self.left = left
self.right = right
class BinaryTree:
def __init__(self):
self.root = None
def insert(self, value):
if self.root is None:
self.root = TreeNode(value)
else:
self._insert_recursive(self.root, value)
def _insert_recursive(self, node, value):
if value < node.value:
if node.left is None:
node.left = TreeNode(value)
else:
self._insert_recursive(node.left, value)
else:
if node.right is None:
node.right = TreeNode(value)
else:
self._insert_recursive(node.right, value)
def delete(self, value):
self.root = self._delete_recursive(self.root, value)
def _delete_recursive(self, node, value):
if node is None:
return node
if value < node.value:
node.left = self._delete_recursive(node.left, value)
elif value > node.value:
node.right = self._delete_recursive(node.right, value)
else:
if node.left is None:
return node.right
elif node.right is None:
return node.left
else:
min_larger_node = self._find_min(node.right)
node.value = min_larger_node.value
node.right = self._delete_recursive(node.right, min_larger_node.value)
return node
def _find_min(self, node):
while node.left is not None:
node = node.left
return node
def find(self, value):
return self._find_recursive(self.root, value)
def _find_recursive(self, node, value):
if node is None:
return None
if value < node.value:
return self._find_recursive(node.left, value)
elif value > node.value:
return self._find_recursive(node.right, value)
else:
return node
def sort(self):
return self._inorder_traversal(self.root)
def _inorder_traversal(self, node):
if node is None:
return []
return self._inorder_traversal(node.left) + [node.value] + self._inorder_traversal(node.right)
4.2 树的查找与排序
习题:实现二叉搜索树的排序。
解答:
def binary_search_tree_sort(root):
if not root:
return []
return binary_search_tree_sort(root.left) + [root.value] + binary_search_tree_sort(root.right)
5. 图
5.1 图的基本操作
习题:实现一个图,支持以下操作:插入、删除、查找和排序。
解答:
class Graph:
def __init__(self):
self.vertices = {}
def add_vertex(self, key):
if key not in self.vertices:
self.vertices[key] = []
def add_edge(self, key1, key2):
if key1 in self.vertices and key2 in self.vertices:
self.vertices[key1].append(key2)
self.vertices[key2].append(key1)
def delete_vertex(self, key):
if key in self.vertices:
del self.vertices[key]
def delete_edge(self, key1, key2):
if key1 in self.vertices and key2 in self.vertices:
self.vertices[key1].remove(key2)
self.vertices[key2].remove(key1)
def find(self, key):
return self.vertices.get(key, [])
def sort(self):
return sorted(self.vertices.keys())
5.2 图的查找与排序
习题:实现图的排序。
解答:
def graph_sort(graph):
return sorted(graph.vertices.keys())
总结
本文详细介绍了300道经典的数据结构习题,包括数组、链表、栈、队列、树和图等数据结构。通过这些习题的解答与实战技巧,可以帮助你轻松掌握数据结构。希望本文能对你有所帮助!
