当前位置:实例文章 » 其他实例» [文章]数据结构(二)

数据结构(二)

发布人:shili8 发布时间:2025-02-25 19:50 阅读次数:0

**数据结构(二)**

在上一篇文章中,我们介绍了基本的数据结构,如数组、链表等。在本篇文章中,我们将继续讨论一些更复杂的数据结构,包括栈、队列、树和图。

###1. 栈栈是一种特殊的线性表,它遵循后进先出(LIFO)的原则。也就是说,在栈中最后添加的元素将在首先被移除。

####1.1 栈的定义栈可以用数组或链表来实现。栈中的元素都有一个索引,称为栈顶(top)。栈顶是栈中最新添加的元素。

####1.2 栈的操作栈支持以下几个基本操作:

* **push(x)**:将元素 x 添加到栈顶。
* **pop()**:移除栈顶元素,并返回该元素的值。
* **peek()**:返回栈顶元素的值,但不移除它。
* **isEmpty()**:检查栈是否为空。

####1.3 栈的实现我们可以使用链表来实现栈。每个结点都包含一个元素和一个指向下一个结点的指针。

class Node:
 def __init__(self, value):
 self.value = value self.next = Noneclass Stack:
 def __init__(self):
 self.top = None def push(self, value):
 node = Node(value)
 if self.top is None:
 self.top = node else:
 node.next = self.top self.top = node def pop(self):
 if self.isEmpty():
 raise IndexError("Stack is empty")
 value = self.top.value self.top = self.top.next return value def peek(self):
 if self.isEmpty():
 raise IndexError("Stack is empty")
 return self.top.value def isEmpty(self):
 return self.top is None


###2. 队列队列是一种特殊的线性表,它遵循先进先出(FIFO)的原则。也就是说,在队列中最先添加的元素将在首先被移除。

####2.1 队列的定义队列可以用数组或链表来实现。队列中的元素都有一个索引,称为队头(front)。队头是队列中最新添加的元素。

####2.2 队列的操作队列支持以下几个基本操作:

* **enqueue(x)**:将元素 x 添加到队尾。
* **dequeue()**:移除队首元素,并返回该元素的值。
* **peekFront()**:返回队首元素的值,但不移除它。
* **isEmpty()**:检查队列是否为空。

####2.3 队列的实现我们可以使用链表来实现队列。每个结点都包含一个元素和一个指向下一个结点的指针。

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, value):
 node = Node(value)
 if self.isEmpty():
 self.front = self.rear = node else:
 self.rear.next = node self.rear = node def dequeue(self):
 if self.isEmpty():
 raise IndexError("Queue is empty")
 value = self.front.value self.front = self.front.next if self.front is None:
 self.rear = None return value def peekFront(self):
 if self.isEmpty():
 raise IndexError("Queue is empty")
 return self.front.value def isEmpty(self):
 return self.front is None


###3. 树树是一种特殊的数据结构,它由一组结点组成,每个结点都有一个值和零到多个子结点。

####3.1 树的定义树可以用链表或数组来实现。每个结点都包含一个值和一个指向子结点的指针。

####3.2 树的操作树支持以下几个基本操作:

* **insert(value)**:将元素 value 添加到树中。
* **search(value)**:查找树中是否存在元素 value。
* **delete(value)**:从树中移除元素 value。
* **preorder()**:输出树的前序遍历结果。
* **inorder()**:输出树的中序遍历结果。
* **postorder()**:输出树的后序遍历结果。

####3.3 树的实现我们可以使用链表来实现树。每个结点都包含一个值和一个指向子结点的指针。

class Node:
 def __init__(self, value):
 self.value = value self.left = None self.right = Noneclass Tree:
 def __init__(self):
 self.root = None def insert(self, value):
 node = Node(value)
 if self.isEmpty():
 self.root = node else:
 self._insert(node, self.root)

 def _insert(self, node, root):
 if root.value < node.value:
 if root.right is None:
 root.right = node else:
 self._insert(node, root.right)
 elif root.value > node.value:
 if root.left is None:
 root.left = node else:
 self._insert(node, root.left)

 def search(self, value):
 return self._search(value, self.root)

 def _search(self, value, root):
 if root is None or root.value == value:
 return True elif root.value < value:
 return self._search(value, root.right)
 else:
 return self._search(value, root.left)

 def delete(self, value):
 self.root = self._delete(value, self.root)

 def _delete(self, value, root):
 if root is None or root.value == value:
 return root elif root.value < value:
 root.right = self._delete(value, root.right)
 else:
 root.left = self._delete(value, root.left)
 return root def preorder(self):
 self._preorder(self.root)

 def _preorder(self, root):
 if root is not None:
 print(root.value, end=" ")
 self._preorder(root.left)
 self._preorder(root.right)

 def inorder(self):
 self._inorder(self.root)

 def _inorder(self, root):
 if root is not None:
 self._inorder(root.left)
 print(root.value, end=" ")
 self._inorder(root.right)

 def postorder(self):
 self._postorder(self.root)

 def _postorder(self, root):
 if root is not None:
 self._postorder(root.left)
 self._postorder(root.right)
 print(root.value, end=" ")

 def isEmpty(self):
 return self.root is None


###4. 图图是一种特殊的数据结构,它由一组结点和边组成,每个结点都有一个值,边连接两个结点。

####4.1 图的定义图可以用链表或数组来实现。每个结点都包含一个值和一个指向邻居结点的指针。

####4.2 图的操作图支持以下几个基本操作:

* **insert(value)**:将元素 value 添加到图中。
* **search(value)**:查找图中是否存在元素 value。
* **delete(value)**:从图中移除元素 value。
* **preorder()**:输出图的前序遍历结果。
* **inorder()**:输出图的中序遍历结果。
* **postorder()**:输出图的后序遍历结果。

####4.3 图的实现我们可以使用链表来实现图。每个结点都包含一个值和一个指向邻居结点的指针。

class Node:
 def __init__(self, value):
 self.value = value self.neighbors = []

class Graph:
 def __init__(self):
 self.nodes = {}

 def insert(self, value):
 node = Node(value)
 self.nodes[value] = node def search(self, value):
 return value in self.nodes def delete(self, value):
 if value in self.nodes:
 del self.nodes[value]

 def preorder(self):
 for node in self.nodes.values():
 print(node.value, end=" ")
 for neighbor in node.neighbors:
 print(neighbor.value, end=" ")
 print()

 def inorder(self):
 for node in self.nodes.values():
 for neighbor in node.neighbors:
 print(neighbor.value, end=" ")
 print(node.value, end=" ")

 def postorder(self):
 for node in self.nodes.values():
 for neighbor in node

相关标签:算法数据结构
其他信息

其他资源

Top