欢迎访问宙启技术站
智能推送

利用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

本文只是对常见算法和数据结构的介绍,希望能够对大家提供一些帮助,如果您想更详细地了解这些内容,那么可以通过学习相关的书籍和教程来深入了解。