刷题-DAY5
发布人:shili8
发布时间:2024-12-31 02:17
阅读次数:0
**刷题-DAY5**
今天是我们刷题的第五天了,希望你已经对一些常见的算法和数据结构有了一定的了解。今天,我们将继续深入地探讨一下链表、栈和队列这三个基本数据结构。
### 链表链表是一种线性数据结构,它由一系列结点组成,每个结点包含一个值和一个指向下一个结点的引用。链表可以在任意位置插入或删除元素,而不需要移动其他元素。
#### 双向链表双向链表是链表的一种特殊形式,除了每个结点都有一个指向下一个结点的引用外,还有一个指向上一个结点的引用。这种结构可以在任意位置插入或删除元素,并且可以快速找到前驱和后继结点。
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: self.tail.next = node node.prev = self.tail self.tail = node def print_list(self): current = self.head while current: print(current.value, end=" ") current = current.next print()
#### 单向链表单向链表是链表的一种特殊形式,每个结点只包含一个指向下一个结点的引用。这种结构可以在任意位置插入或删除元素,但需要移动其他元素。
class Node: def __init__(self, value): self.value = value self.next = Noneclass SinglyLinkedList: 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 print_list(self): current = self.head while current: print(current.value, end=" ") current = current.next print()
### 栈栈是一种后进先出的数据结构,它遵循 LIFO(Last In First Out)原则。栈的基本操作是入栈和出栈。
#### 使用列表实现栈
class Stack: def __init__(self): self.items = [] def push(self, item): self.items.append(item) def pop(self): if not self.is_empty(): return self.items.pop() else: raise IndexError("Stack is empty") 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
#### 使用链表实现栈
class Node: def __init__(self, value): self.value = value self.next = Noneclass Stack: def __init__(self): self.top = None def push(self, item): node = Node(item) if not self.top: self.top = node else: current = self.top while current.next: current = current.next current.next = node def pop(self): if self.top: value = self.top.value self.top = self.top.next return value else: raise IndexError("Stack is empty") def peek(self): if self.top: return self.top.value else: raise IndexError("Stack is empty")
### 队列队列是一种先进先出的数据结构,它遵循 FIFO(First In First Out)原则。队列的基本操作是入队和出队。
#### 使用列表实现队列
class Queue: def __init__(self): self.items = [] def enqueue(self, item): self.items.append(item) def dequeue(self): if not self.is_empty(): return self.items.pop(0) else: raise IndexError("Queue is empty") 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
#### 使用链表实现队列
class Node: def __init__(self, value): self.value = value self.next = Noneclass Queue: def __init__(self): self.front = None self.rear = None def enqueue(self, item): node = Node(item) if not self.front: self.front = node self.rear = node else: current = self.front while current.next: current = current.next current.next = node self.rear = node def dequeue(self): if self.front: value = self.front.value self.front = self.front.next if not self.front: self.rear = None return value else: raise IndexError("Queue is empty") def peek(self): if self.front: return self.front.value else: raise IndexError("Queue is empty")
以上就是今天的内容,希望你已经对链表、栈和队列这三个基本数据结构有了一定的了解。这些数据结构在实际应用中非常重要,例如缓存管理、任务调度等。