利用Python函数实现常见的算法和数据结构
发布时间:2023-06-01 05:04:48
Python 是一种功能强大的编程语言,也是一个广泛使用的工具,在这篇文章中,我们将介绍一些常见的算法和数据结构,以及用 Python 写的实现。下面是一些值得注意的算法和数据结构。
1.栈
栈是一种线性数据结构,它遵循先进后出(LIFO)的规则。Python 中可以使用列表来实现栈,append() 函数用于将元素推入栈中,pop() 函数用于将元素弹出。
stack = []
stack.append('a')
stack.append('b')
stack.append('c')
print('Initial stack')
print(stack)
print('
Elements popped from the stack:')
print(stack.pop())
print(stack.pop())
print(stack.pop())
print('
Stack after the pop operation:')
print(stack)
2.队列
队列也是一种线性数据结构,它遵循先进先出(FIFO)的规则。Python 中可以使用 collections 模块中的 deque 实现队列,append() 函数用于将元素添加到队列的末尾,popleft()函数用于弹出队列的 个元素。
from collections import deque
queue = deque(['Eric', 'John', 'Michael'])
queue.append('Terry')
queue.append('Graham')
print('Initial queue')
print(queue)
print('
Elements dequeued from the queue')
print(queue.popleft())
print(queue.popleft())
print(queue)
print('
Elements remained in the queue')
print(queue)
3.链表
链表是一种基本数据结构,它是由一系列节点组成的。Python 中可以使用类实现节点和链表。节点包含数据和指向下一个节点的指针,而链表由一个头节点组成,它指向 个节点。链表数据结构的一些基本操作包括插入,删除和搜索。
# Define the Node class
class Node:
def __init__(self, data):
self.data = data
self.next = None
# Define the LinkedList class
class LinkedList:
def __init__(self):
self.head = None
# Insert a new node
def insert(self, data):
new_node = Node(data)
new_node.next = self.head
self.head = new_node
# Delete a node
def delete(self, data):
current_node = self.head
previous_node = None
while current_node is not None:
if current_node.data == data:
if previous_node is None:
self.head = current_node.next
else:
previous_node.next = current_node.next
return True
previous_node = current_node
current_node = current_node.next
return False
# Search for a node
def search(self, data):
current_node = self.head
while current_node is not None:
if current_node.data == data:
return True
current_node = current_node.next
return False
4.二叉树
二叉树是一种重要的数据结构,它由一个具有不超过两个子节点的节点组成。Python 中可以使用类实现节点和二叉树。树的遍历有三种方式:前序遍历,中序遍历和后序遍历。
# Define the TreeNode class
class TreeNode:
def __init__(self, value):
self.value = value
self.left = None
self.right = None
# Define the BinaryTree class
class BinaryTree:
def __init__(self, root):
self.root = TreeNode(root)
# Print the tree using In-order Traversal
def inorderTraversal(self, node):
if node is not None:
self.inorderTraversal(node.left)
print(node.value)
self.inorderTraversal(node.right)
# Print the tree using Pre-order Traversal
def preorderTraversal(self, node):
if node is not None:
print(node.value)
self.preorderTraversal(node.left)
self.preorderTraversal(node.right)
# Print the tree using Post-order Traversal
def postorderTraversal(self, node):
if node is not None:
self.postorderTraversal(node.left)
self.postorderTraversal(node.right)
print(node.value)
5.排序算法
排序算法是计算机科学的一个基本分支。Python 中提供了各种排序算法的实现。其中,冒泡排序、选择排序、插入排序和归并排序是最常见的算法。
冒泡排序的实现:
def bubbleSort(arr):
n = len(arr)
# Traverse through all array elements
for i in range(n):
# Last i elements are already in place
for j in range(0, n-i-1):
# Traverse the array from 0 to n-i-1
# Swap if the element found is greater
# than the next element
if arr[j] > arr[j+1] :
arr[j], arr[j+1] = arr[j+1], arr[j]
选择排序的实现:
def selectionSort(arr):
n = len(arr)
# Traverse through all array elements
for i in range(n):
# Find the minimum element in remaining
# unsorted array
min_idx = i
for j in range(i+1, n):
if arr[min_idx] > arr[j]:
min_idx = j
# Swap the found minimum element with
# the first element
arr[i], arr[min_idx] = arr[min_idx], arr[i]
插入排序的实现:
def insertionSort(arr):
n = len(arr)
# Traverse through 1 to len(arr)
for i in range(1, n):
key = arr[i]
# Move elements of arr[0..i-1], that are
# greater than key, to one position ahead
# of their current position
j = i-1
while j >=0 and key < arr[j] :
arr[j+1] = arr[j]
j -= 1
arr[j+1] = key
归并排序的实现:
def mergeSort(arr):
if len(arr) >1:
mid = len(arr)//2 #Finding the mid of the array
L = arr[:mid] # Dividing the array elements
R = arr[mid:] # into 2 halves
mergeSort(L) # Sorting the first half
mergeSort(R) # Sorting the second half
i = j = k = 0
# Copy data to temp arrays L[] and R[]
while i < len(L) and j < len(R):
if L[i] < R[j]:
arr[k] = L[i]
i += 1
else:
arr[k] = R[j]
j += 1
k += 1
# Checking if any element was left
while i < len(L):
arr[k] = L[i]
i += 1
k += 1
while j < len(R):
arr[k] = R[j]
j += 1
k += 1
本文只是对常见算法和数据结构的介绍,希望能够对大家提供一些帮助,如果您想更详细地了解这些内容,那么可以通过学习相关的书籍和教程来深入了解。
