在计算机科学领域,数据结构是学习算法的基石。上海交通大学的数据结构课程深受广大学生的喜爱,其丰富的源码内容为学习者提供了宝贵的实践机会。本文将深度解析上海交大数据结构课程的源码,帮助大家轻松掌握核心算法。
一、课程概述
上海交通大学的数据结构课程主要介绍了线性表、栈、队列、链表、树、图等基本数据结构,以及各种排序和查找算法。课程源码涵盖了这些数据结构的核心实现,是学习数据结构算法的宝贵资源。
二、线性表
线性表是数据结构中最基础的部分,包括顺序表和链表。顺序表采用数组存储元素,而链表采用节点存储元素。
顺序表
class SeqList:
def __init__(self, capacity):
self.data = [None] * capacity
self.size = 0
self.capacity = capacity
def append(self, item):
if self.size < self.capacity:
self.data[self.size] = item
self.size += 1
def get(self, index):
if index >= 0 and index < self.size:
return self.data[index]
else:
raise IndexError("Index out of bounds")
链表
class ListNode:
def __init__(self, value):
self.value = value
self.next = None
class LinkedList:
def __init__(self):
self.head = None
def append(self, item):
new_node = ListNode(item)
if self.head is None:
self.head = new_node
else:
current = self.head
while current.next is not None:
current = current.next
current.next = new_node
三、栈和队列
栈和队列是两种特殊的线性表,它们遵循“后进先出”(LIFO)和“先进先出”(FIFO)的原则。
栈
class Stack:
def __init__(self):
self.data = []
def push(self, item):
self.data.append(item)
def pop(self):
if self.data:
return self.data.pop()
else:
raise IndexError("Stack is empty")
def peek(self):
if self.data:
return self.data[-1]
else:
raise IndexError("Stack is empty")
队列
class Queue:
def __init__(self):
self.data = []
def enqueue(self, item):
self.data.insert(0, item)
def dequeue(self):
if self.data:
return self.data.pop()
else:
raise IndexError("Queue is empty")
def front(self):
if self.data:
return self.data[0]
else:
raise IndexError("Queue is empty")
四、树和图
树和图是比线性表更复杂的数据结构,它们在计算机科学和实际应用中有着广泛的应用。
树
class TreeNode:
def __init__(self, value):
self.value = value
self.children = []
def add_child(self, child):
self.children.append(child)
class BinaryTree:
def __init__(self, root):
self.root = root
def pre_order_traversal(self, node):
if node:
print(node.value)
for child in node.children:
self.pre_order_traversal(child)
图
class Graph:
def __init__(self):
self.vertices = {}
def add_vertex(self, vertex):
self.vertices[vertex] = []
def add_edge(self, start, end):
if start in self.vertices and end in self.vertices:
self.vertices[start].append(end)
self.vertices[end].append(start)
def bfs(self, start):
visited = set()
queue = [start]
while queue:
vertex = queue.pop(0)
if vertex not in visited:
visited.add(vertex)
for neighbor in self.vertices[vertex]:
queue.append(neighbor)
return visited
五、排序和查找算法
排序和查找算法是数据结构中的核心技术,上海交大数据结构课程源码中包含了多种排序和查找算法的实现。
快速排序
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)
二分查找
def binary_search(arr, target):
left, right = 0, len(arr) - 1
while left <= right:
mid = (left + right) // 2
if arr[mid] < target:
left = mid + 1
elif arr[mid] > target:
right = mid - 1
else:
return mid
return -1
六、总结
上海交大数据结构课程源码内容丰富,覆盖了各种数据结构和算法的核心实现。通过深入解析这些源码,我们可以轻松掌握数据结构算法,为后续的计算机科学学习打下坚实的基础。希望本文的解析对大家有所帮助!
