关于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
猜你喜欢
- 还是一个关于checkbox的一个普通的效果,就是根据你勾选的checkbox,列出你选择了哪些值演示代码:<!DOCTYPE htm
- 虽然我们一直使用书籍搜索的示例表单,并将起改进的很完美,但是这还是相当的简陋: 只包含一个字段,q。这简单的例子,我们不需要使用Django
- django model的json字段的编码器不能有效编码诸如uuid,datetime等数据类型,当直接存储此类型的对象到json字段中为
- 最近在学习python的内容,在导入requsets库的时候遇到了问题。import requests查了一下资料是requests库需要安
- (一)单一独立的参数如果命令行输入的参数都是各自单一独立的,直接用个循环把所有参数逐一读出来就行了。sys模块里面直接用args = sys
- 最近一个小项目需要一个星级评分的效果,所以去淘宝偷了一个,但是还得加载YUI很不爽,还是自己动手写一个吧~HTML: <!-
- Python用input输入列表的方法使用input输入数据时,使用逗号隔开列表的每一项,再使用ast.literal_eval()方法转成
- 如果你的Mysql数据库安装在centos7的系统上,并且你的操作系统启用了防火墙。应用要访问mysql数据库,你有2个解决方案。方案一:停
- 本文旨在挖掘表格在艺术创意方面的一些功能效果。运行代码框<script language="JavaScript"
- 本文实例讲述了原生javascript运动函数的封装。分享给大家供大家参考,具体如下://封装匀速运动//参数:// 1、dom对象// 2
- 本文实例讲述了Go语言导出内容到Excel的方法。分享给大家供大家参考。具体实现方法如下:package main &
- Python3 正则表达式正则表达式是一个特殊的字符序列,它能帮助你方便的检查一个字符串是否与某种模式匹配。本文主要阐述re包中的主要函数。
- Django Model的外键自关联在django的model定义中,有时需要某个Field引用当前定义的Model,比如一个部门(Depa
- 以前工作的时候由于Oracle8i数据库经常出现用户过多的错误,由于数据量大,经常出现ORA:12500错误,但主要原因是访问过多而引起的,
- MySQL 临时表在我们需要保存一些临时数据时是非常有用的。临时表只在当前连接可见,当关闭连接时,Mysql会自动删除表并释放所有空间。临时
- 一、 图片转视频任务需求背景在标注数据的过程中,需要【反复】浏览大量图片(万张以上的数量级),确认图片中的目标类别以及室内户型布局。但是,在
- 本文实例讲述了python中enumerate函数用法。分享给大家供大家参考。具体分析如下:今日发现一个新函数 enumerate 。一般情
- 本文总结一下,拖拽所延伸出来的一些效果,供大家参考,具体内容如下1.实现拖拉图片时,带框的效果。即当鼠标拖动某一个图片或物体时,其原有位置扔
- 1 引言这段时间在研究美团爬虫,用的是scrapy-redis分布式爬虫框架,奈何scrapy-redis与scrapy框架不同,默认只发送
- <table> <tr> &nb