刷题-DAY9
发布人:shili8
发布时间:2025-02-16 19:45
阅读次数:0
**刷题 DAY9**
今天我们将继续我们的刷题之旅,主题是数据结构与算法。我们将讨论一些常见的数据结构和算法,并提供相关的代码示例。
### 一、栈和队列栈和队列都是线性数据结构,它们遵循先进先出(FIFO)或后进先出(LIFO)的原则。
####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):
"""查看顶部元素"""
if not self.is_empty():
return self.items[-1]
else:
raise IndexError("Stack is empty")
def is_empty(self):
"""检查是否为空"""
return len(self.items) ==0####2. 队列队列是一种先进先出的数据结构,新元素总是被添加到队尾,而老元素总是从队头移除。我们可以使用数组或链表来实现队列。
class Queue:
def __init__(self):
self.items = []
def enqueue(self, item):
"""添加元素"""
self.items.append(item)
def dequeue(self):
"""移除元素"""
return self.items.pop(0)
def peek(self):
"""查看头部元素"""
if not self.is_empty():
return self.items[0]
else:
raise IndexError("Queue is empty")
def is_empty(self):
"""检查是否为空"""
return len(self.items) ==0### 二、链表链表是一种线性数据结构,它的元素通过指针连接起来。
####1. 单向链表单向链表是最基本的链表类型,每个结点包含一个值和一个指向下一个结点的指针。
class Node: def __init__(self, value): self.value = value self.next = Noneclass LinkedList: def __init__(self): self.head = None def append(self, value): """添加元素""" node = Node(value) if not self.head: self.head = node else: current = self.head while current.next: current = current.next current.next = node def traverse(self): """遍历链表""" current = self.head while current: print(current.value) current = current.next
####2. 双向链表双向链表是链表的一种变体,每个结点包含一个值和两个指针,分别指向前一个结点和后一个结点。
class Node: def __init__(self, value): self.value = value self.prev = None self.next = Noneclass DoublyLinkedList: def __init__(self): self.head = None self.tail = None def append(self, value): """添加元素""" node = Node(value) if not self.head: self.head = node self.tail = node else: current = self.head while current.next: current = current.next current.next = node node.prev = current def traverse(self): """遍历链表""" current = self.head while current: print(current.value) current = current.next
### 三、树和图树是一种非线性数据结构,它的元素通过父子关系连接起来。图是一种更复杂的非线性数据结构,它的元素通过任意关系连接起来。
####1. 二叉树二叉树是最基本的树类型,每个结点最多有两个孩子,分别称为左孩子和右孩子。
class Node: def __init__(self, value): self.value = value self.left = None self.right = Noneclass BinaryTree: def __init__(self): self.root = None def insert(self, value): """添加元素""" node = Node(value) if not self.root: self.root = node else: current = self.root while True: if value < current.value: if not current.left: current.left = node break current = current.left else: if not current.right: current.right = node break current = current.right def traverse(self): """遍历树""" self._traverse(self.root) def _traverse(self, node): if node: print(node.value) self._traverse(node.left) self._traverse(node.right)
####2. 图图是一种更复杂的非线性数据结构,它的元素通过任意关系连接起来。
class Node:
def __init__(self, value):
self.value = value self.neighbors = []
class Graph:
def __init__(self):
self.nodes = {}
def add_node(self, value):
"""添加结点"""
node = Node(value)
self.nodes[value] = node def add_edge(self, from_value, to_value):
"""添加边"""
if from_value not in self.nodes:
self.add_node(from_value)
if to_value not in self.nodes:
self.add_node(to_value)
self.nodes[from_value].neighbors.append(self.nodes[to_value])
def traverse(self):
"""遍历图"""
for node in self.nodes.values():
print(node.value)
for neighbor in node.neighbors:
print(neighbor.value)
以上就是今天的刷题内容。我们讨论了栈、队列、链表、树和图等数据结构和算法,并提供了相关的代码示例。希望这些内容能够帮助你更好地理解这些概念。

