当前位置: 首页 > news >正文

python进阶_Day8

思维导图:

1.链表与顺序表(续):

2.排序:

作业:(有条件的也可以选择下载资源,资源里的代码会有详细的注释,但是代码相同。)

1.链表:

# 单向链表
# 链表单个结点(single node)的实现:前驱(predecessor)后继(successor)
from itertools import countclass SingleNode(object):"""单向结点"""def __init__(self, item, next=None):self.item = itemself.next = next# 链表两边对象(SingleLinkList)单链路列表的实现
class SingleLinkList(object):"""单项链表"""def __init__(self, node=None):self.head = nodeself.tail = Nonedef is_empty(self):"""链表是否为空"""if self.head is None:return Trueelse:return Falsedef length(self):"""链表长度"""cur = self.headcount = 0while cur is not None:count += 1cur = cur.nextreturn countdef travel(self):"""遍历整个链表"""cur = self.headprint('链表中的元素:', end=' ')while cur is not None:print(cur.item, end=' ')cur = cur.nextif cur is None:print()breakdef add(self, item):"""链表头部添加元素"""node = SingleNode(item)node.next = self.headself.head = nodedef append(self, item):"""链表尾部添加元素"""if self.head is None:self.head = SingleNode(item)returnelse:cur = self.headwhile cur.next is not None:cur = cur.nextcur.next = SingleNode(item)returndef insert(self, pos, item):"""指定位置添加元素"""if pos == 0:self.add(item)returnelif pos >= self.length():self.append(item)returnelif 0 <= pos <= self.length():cur = self.headcount = 0while count < pos - 1:count += 1cur = cur.nextnode = SingleNode(item)node.next = cur.nextcur.next = nodedef remove(self, item):"""删除节点"""if self.head is None:print('链表为空')returncur = self.headpre = Noneif cur.item == item:self.head = cur.nextreturnelse:while cur is not None:if cur.item == item:pre.next = cur.nextreturnelse:pre = curcur = cur.nextprint('未找到')def search(self, item):"""查找节点是否存在"""cur = self.headwhile cur is not None:if cur.item == item:return Truecur = cur.nextreturn Falsedef test1(data):"""测试链表实例化"""mynode = SingleNode(data)print('mynode--->', mynode)linklist = SingleLinkList(mynode)print('linklist--->', linklist)print(mynode.item)print(linklist.head)print(linklist.head.item)print(linklist.head.next)def test2(data):"""测试列表判空,长度,遍历"""# 实例化结点和链表对象mynode = SingleNode(data)linklist = SingleLinkList(mynode)# linklist = SingleLinkList()# 判空print(linklist.is_empty())print('链表长度为:', linklist.length())linklist.travel()def test3(data):"""插入节点"""# mynode = SingleNodse(data)# linklist = SingleLinkList(mynode)linklist = SingleLinkList()linklist.add(12)linklist.add(34)linklist.add(56)linklist.travel()linklist.append(98)linklist.append(76)linklist.append(54)linklist.travel()linklist.insert(2, 11)linklist.travel()linklist.remove(34)linklist.travel()print(linklist.search(34))print(linklist.search(11))if __name__ == '__main__':test1(1)test2(2)test3(3)

2.排序

(1)冒泡排序

from itertools import countdef bubble_sort(mylist):n = len(mylist)for i in range(n-1):for j in range(0, n-i-1):if mylist[j] > mylist[j+1]:mylist[j], mylist[j+1] = mylist[j+1], mylist[j]def bubble_sort2(mylist):n = len(mylist)count = 0for i in range(n-1):for j in range(0, n-i-1):if mylist[j] > mylist[j+1]:mylist[j], mylist[j+1] = mylist[j+1], mylist[j]count += 1if count == 0:breakif __name__ == '__main__':mylist = [12,9,67,4,32,65,34]bubble_sort(mylist)print(mylist)

(2)选择排序

def selectionsort1(list1):mylist = list1.copy()for i in range(len(mylist)-1):min_index = ifor j in range(i+1,len(mylist)):if mylist[j] < mylist[min_index]:min_index = jif min_index != i:mylist[i], mylist[min_index] = mylist[min_index], mylist[i]return mylistdef selectionsort2(list2):mylist = list2.copy()for i in range(len(mylist)):max_index = ifor j in range(i+1,len(mylist)):if mylist[j] > mylist[max_index]:max_index = jif max_index != i:mylist[i], mylist[max_index] = mylist[max_index], mylist[i]return mylistif __name__ == '__main__':mylist = [12,543,8,9,4,1,0]print(selectionsort1(mylist))print(selectionsort2(mylist))

(3)插入排序

def insertion_sort(list1):mylist = list1[:]for i in range(1, len(mylist)-1):for j in range(i,0,-1):if mylist[j]<mylist[j-1]:mylist[j],mylist[j-1]=mylist[j-1],mylist[j]return mylist
if __name__ == '__main__':mylist = [12,4,32,67,92,32,1,2,5]print(insertion_sort(mylist))

(4)快速排序

def quicksort(mylist,start,end):if start>end:returnleft = startright = endmid = mylist[start]while left < right:while mylist[right] >= mid and left < right:right -= 1mylist[left] = mylist[right]while mylist[left] <=mid and left < right:left += 1mylist[right] = mylist[left]mylist[right] = midquicksort(mylist,right+1,end)quicksort(mylist,start,left-1)
if __name__ == '__main__':mylist = [12,35,98,4,5,2,8,6,10,3,8,0,2,4,6,8,100]quicksort(mylist,0,len(mylist)-1)print(mylist)

http://www.dtcms.com/a/481621.html

相关文章:

  • 在React中如何应用函数式编程?
  • selenium的css定位方式有哪些
  • RabbitMq快速入门程序
  • Qt模型控件:QTreeView应用
  • selenium常用的等待有哪些?
  • 基于51单片机水位监测控制自动抽水—LCD1602
  • 电脑系统做的好的几个网站wordpress主题很卡
  • 数据结构和算法篇-环形缓冲区
  • iOS 26 性能分析深度指南 包含帧率、渲染、资源瓶颈与 KeyMob 协助策略
  • vs网站建设弹出窗口代码c网页视频下载神器哪种最好
  • Chrome性能优化秘籍
  • 【ProtoBuffer】protobuffer的安装与使用
  • Jmeter+badboy环境搭建
  • ARM 总线技术 —— AMBA 入门
  • 【实战演练】基于VTK的散点凹包计算实战:从代码逻辑到实现思路
  • Flink 状态设计理念(附源码)
  • 23种设计模式——备忘录模式(Memento Pattern)
  • 【LeetCode】73. 矩阵置零
  • 网站开发教材男通网站哪个好用
  • 《3D草原场景技术拆解:植被物理碰撞与多系统协同的6个实战方案》
  • 软件测试—BUG篇
  • OpenAI系列模型介绍、API使用
  • 做网站的可以信吗深圳商城网站建设
  • 关于使用docker部署srs服务器的相关指令
  • 基于M序列编码的水下微弱目标检测方法
  • Ubuntu SSH 免密码登陆
  • vue前端面试题——记录一次面试当中遇到的题(8)
  • FastbuildAI后端WebModule模块注册分析
  • 南昌网站排名网站站群建设方案
  • day9 cpp:运算符重载