在上一篇中,我们探讨了 Python 中集合与字典的高级用法,了解了如何利用这些内置数据结构来实现复杂的数据管理与处理。在这一篇中,我们将进一步深入,探讨如何通过自定义数据结构来满足特定需求。
自定义数据结构的优势在于它们可以根据特定的业务逻辑和数据处理需求来量身定制,提供比内置数据结构更高的灵活性和功能。
1. 自定义链表 链表是一种基础且灵活的数据结构,它由节点组成。每个节点包含数据和指向下一个节点的指针。我们先来实现一个简单的单向链表。
1.1 节点的定义 我们先定义一个节点类 Node
,它包含数据和指向下一个节点的指针。
1 2 3 4 class Node : def __init__ (self, data ): self .data = data self .next = None
1.2 链表的定义 接下来,我们定义链表类 LinkedList
,它提供一些基本操作,例如插入、删除和遍历。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 class LinkedList : def __init__ (self ): self .head = None def insert (self, data ): new_node = Node(data) if not self .head: self .head = new_node return last_node = self .head while last_node.next : last_node = last_node.next last_node.next = new_node def delete (self, key ): current = self .head if current and current.data == key: self .head = current.next return prev = None while current and current.data != key: prev = current current = current.next if current is None : return prev.next = current.next def display (self ): current = self .head while current: print (current.data, end=" -> " ) current = current.next print ("None" )
1.3 使用链表 现在我们可以使用这个自定义的链表了。
1 2 3 4 5 6 7 8 linked_list = LinkedList() linked_list.insert(1 ) linked_list.insert(2 ) linked_list.insert(3 ) linked_list.display() linked_list.delete(2 ) linked_list.display()
2. 自定义栈 栈是一种后进先出(LIFO)的数据结构,可以使用链表或列表来实现。我们将自己实现一个简单的栈。
2.1 栈的定义 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 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() return None def peek (self ): if not self .is_empty(): return self .items[-1 ] return None def is_empty (self ): return len (self .items) == 0 def size (self ): return len (self .items)
2.2 使用栈 现在让我们使用自定义的栈。
1 2 3 4 5 6 7 8 stack = Stack() stack.push(1 ) stack.push(2 ) stack.push(3 ) print (stack.pop()) print (stack.peek()) print (stack.size())
3. 自定义队列 队列是一种先进先出(FIFO)的数据结构。我们可以使用列表或者链表来实现。
3.1 队列的定义 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 class Queue : def __init__ (self ): self .items = [] def enqueue (self, item ): self .items.insert(0 , item) def dequeue (self ): if not self .is_empty(): return self .items.pop() return None def is_empty (self ): return len (self .items) == 0 def size (self ): return len (self .items)
3.2 使用队列 接下来,我们使用自定义的队列。
1 2 3 4 5 6 7 queue = Queue() queue.enqueue(1 ) queue.enqueue(2 ) queue.enqueue(3 ) print (queue.dequeue()) print (queue.size())
4. 总结 在本篇中,我们探讨了如何通过实现自定义数据结构(如链表、栈和队列)来应对特定的编程需求。这些数据结构能够帮助我们更好地组织和管理数据,使得编程任务变得更加高效。
在下一篇中,我们将讨论更为复杂的自定义数据结构,例如树和图的实现,以及它们的应用场景。希望大家继续关注!