关于Python的高级数据结构与算法

作者:SYBH. 时间:2023-12-22 00:29:40 

一、简介

在这篇文章中,我们将学习Python中的高级数据结构,如堆、栈、队列、链表等,并使用Python实现常见的算法,如排序、查找等。我们将从以下几个方面来展开本文的内容:

栈(Stack)

队列(Queue)

链表(Linked List)

堆(Heap)

排序算法(Sorting Algorithms)

查找算法(Searching Algorithms)

二、栈(Stack)

栈是一种后进先出(LIFO)的数据结构,只允许在栈顶进行插入和删除操作。在Python中,我们可以使用列表(list)实现栈。

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()

def peek(self):
       if not self.is_empty():
           return self.items[-1]

def is_empty(self):
       return len(self.items) == 0

def size(self):
       return len(self.items)

三、队列(Queue)

队列是一种先进先出(FIFO)的数据结构,只允许在队尾进行插入操作,而在队头进行删除操作。在Python中,我们可以使用collections模块中的deque类实现队列。

from collections import deque

class Queue:
   def __init__(self):
       self.items = deque()

def enqueue(self, item):
       self.items.append(item)

def dequeue(self):
       if not self.is_empty():
           return self.items.popleft()

def is_empty(self):
       return len(self.items) == 0

def size(self):
       return len(self.items)
           previous.next = current.next
   else:
       raise ValueError("Data not found in the list")

四、堆(Heap)

堆是一种特殊的完全二叉树,它的每个节点都大于等于(最大堆)或小于等于(最小堆)其子节点。在Python中,我们可以使用heapq库实现堆。

import heapq

class MaxHeap:
   def __init__(self):
       self.items = []

def push(self, item):
       heapq.heappush(self.items, -item)

def pop(self):
       return -heapq.heappop(self.items)

def peek(self):
       return -self.items[0]

def is_empty(self):
       return len(self.items) == 0

def size(self):
       return len(self.items)

五、排序算法(Sorting Algorithms)

1. 冒泡排序(Bubble Sort)

冒泡排序是一种简单的排序算法,通过重复遍历列表,比较相邻元素并交换不正确的顺序。


def bubble_sort(arr):
   n = len(arr)
   for i in range(n):
       for j in range(0, n - i - 1):
           if arr[j] > arr[j + 1]:
               arr[j], arr[j + 1] = arr[j + 1], arr[j]

2. 选择排序(Selection Sort)

选择排序是一种简单的排序算法,每次遍历列表找到最小(或最大)的元素,将其放到正确的位置。

def selection_sort(arr):
   n = len(arr)
   for i in range(n):
       min_index = i
       for j in range(i + 1, n):
           if arr[j] < arr[min_index]:
               min_index = j
       arr[i], arr[min_index] = arr[min_index], arr[i]

3. 插入排序(Insertion Sort)

插入排序是一种简单的排序算法,将未排序的元素逐个插入已排序的序列中。

def insertion_sort(arr):
   n = len(arr)
   for i in range(1, n):
       key = arr[i]
       j = i - 1
       while j >= 0 and arr[j] > key:
           arr[j + 1] = arr[j]
           j -= 1
       arr[j + 1] = key

六、查找算法(Searching Algorithms)

1. 顺序查找(Sequential Search)

顺序查找是一种简单的查找算法,通过遍历列表,逐个比较元素来查找目标值。

def sequential_search(arr, target):
   for i in range(len(arr)):
       if arr[i] == target:
           return i
   return -1

2. 二分查找(Binary Search)

二分查找是一种高效的查找算法,要求列表已排序。每次查找都将范围缩小一半,直到找到目标值。

def binary_search(arr, target):
   low, high = 0, len(arr) - 1
   while low <= high:
       mid = (low + high) // 2
       if arr[mid] == target:
           return mid
   elif arr[mid] < target:
       low = mid + 1
   else:
       high = mid - 1
return -1

小结

在本文中,我们学习了Python中的高级数据结构,如栈、队列、链表、堆,并实现了常见的排序和查找算法。掌握这些数据结构和算法将帮助我们在实际编程中解决各种问题,提高我们的编程技巧和水平。

在后续的文章中,我们将继续探讨更多的Python实战案例,如网络编程、数据分析、爬虫、机器学习等。希望这些文章能够对你的学习和实践带来帮助。

来源:https://blog.csdn.net/m0_68036862/article/details/129905352

标签:Python,高级,数据结构,算法
0
投稿

猜你喜欢

  • TensorFlow神经网络创建多层感知机MNIST数据集

    2022-03-29 20:09:19
  • Django MEDIA的配置及用法详解

    2022-12-12 01:35:41
  • django与小程序实现登录验证功能的示例代码

    2023-08-04 01:06:58
  • MySQL mysqladmin客户端的使用简介

    2024-01-26 00:33:29
  • 基于Python制作一键桌面整理工具

    2022-08-22 11:45:52
  • python使用openpyxl操作excel的方法步骤

    2022-09-30 20:59:24
  • 浅谈numpy 函数里面的axis参数的含义

    2023-06-04 11:23:35
  • Pytorch图像处理注意力机制解析及代码详解

    2023-10-05 03:23:03
  • 目前最全的浏览器/CSS选择器兼容性总结(包括Safari 4 beta)

    2009-02-26 15:26:00
  • mysql数据库删除重复数据只保留一条方法实例

    2024-01-28 06:17:49
  • OpenCV-Python 摄像头实时检测人脸代码实例

    2023-01-10 05:23:33
  • 正确的PHP匹配UTF-8中文的正则表达式

    2024-04-10 10:56:36
  • go mod 使用私有gitlab群组的解决方案

    2024-05-22 10:29:28
  • python画图中文不显示问题的解决方法

    2023-05-30 14:07:09
  • ADO.NET 连接数据库字符串小结(Oracle、SqlServer、Access、ODBC)

    2024-01-22 07:43:47
  • 解析SQL Server CDC配合Kafka Connect监听数据变化的问题

    2024-01-22 11:22:45
  • selenium+python自动化78-autoit参数化与批量上传功能的实现

    2023-11-02 01:24:57
  • 微信小程序实现留言板(Storage)

    2024-04-16 09:31:16
  • python库pydantic的简易入门教程

    2022-06-27 14:05:28
  • Entity Framework使用Code First模式管理数据库

    2024-01-28 04:40:43
  • asp之家 网络编程 m.aspxhome.com