数据结构代码学习笔记(持续更新中)
code_1:冒泡排序
1 def bubble_sort(alist):2 """冒泡排序"""3 n = len(alist)4 for j in range(n-1):5 for i in range(0,n-1-j):6 if alist[i] > alist[i+1]:7 alist[i], alist[i+1] = alist[i+1], alist[i]8 print(alist)9 return alist 10 11 12 if __name__ == "__main__": 13 list_01 = [1,4,2,7,3,9,6,5,8,0] 14 print(list_01) 15 print(bubble_sort(list_01))
View Code
code_2:链表逆序(插入法)
1 #-*- coding:utf-8 -*-2 # username:MR3 # 使用插入法实现链表的逆序4 #主要思路是:从链表的第二个节点开始,把遍历到的节点插入到头节点的后面,直到遍历结束5 6 class LNode:7 """定义节点类"""8 def __init__(self, x):9 self.data = x 10 self.next = None 11 12 def Reverse(head): # head 表示头节点 13 # 判断链表是否为空 14 if head == None or head.next == None : 15 return 16 17 cur = None # 初始化当前节点 18 next = None # 初始化后继节点 19 cur = head.next.next # 设置第二个节点是当前节点 20 head.next.next = None #设置链表的第一个节点为尾节点 21 22 #把遍历到的节点插入到头节点的后面 23 while cur is not None: 24 next = cur.next #定义临时变量存储当前n节点的链接区地址 25 cur.next = head.next #把n节点的链接区指向新的地址,即第一个节点 26 head.next = cur #把头节点的链接区指向n节点,此时第n个节点已经被放到的第一个节点的位置 27 cur = next #定义新的cur位置,即n+1个节点 28 29 if __name__ == "__main__": 30 i = 1 31 #链表头节点 32 head = LNode(i) #定义头节点,数据区为i,链接区为None 33 head.next = None 34 tmp = None 35 cur = head #将头节点设置为当前节点 36 #构造单链表 37 while i<8: 38 tmp = LNode(i) #定义一个tmp节点 39 tmp.next = None #节点的链接区为空 40 cur.next = tmp #将当前节点的链接区指向tmp节点 41 cur = tmp #将tmp节点设置为当前节点,即游标向后移动一位 42 i += 1 43 print("逆序前的链表为:") 44 cur = head.next #重新设置第一个节点为当前节点 45 while cur!=None: 46 print(cur.data, end=" ") 47 cur = cur.next 48 print("\n逆序后的链表为:") 49 Reverse(head) #逆序链表 50 cur = head.next #重新设置第一个节点为当前节点 51 while cur!=None: 52 print(cur.data, end=" ") 53 cur = cur.next
View Code
code_3 : 从无序的链表中删除重复项
1 #-*- coding:utf-8 -*-2 # username:MR3 # 给定一个无序的链表,去掉其中的重复项4 5 6 # 定义节点类7 class LNode:8 def __init__(self, x):9 self.data = x10 self.next = None11 12 13 # 方法一:递归法14 # 主要思路:对于节点cur,首先递归地删除以cur.next为首的子链表中重复的节点,然后以cur.next为首的子链表中找到与cur有相同数据域的节点并删除15 def removeDupRecursion(head):16 if head.next == None:17 return head18 19 pointer = None20 cur = head21 22 # 对以head.next为首的子链表删除重复的节点23 head.next = removeDupRecursion(head.next)24 pointer = head.next25 26 # 找出以head.next为首的子链表中与head节点相同的节点并删除27 while pointer is not None:28 if head.data == pointer.data:29 cur.next = pointer.next30 pointer = cur.next31 else:32 pointer = pointer.next33 cur = cur.next34 return head35 36 """对带头节点的单链表删除重复的节点37 输入参数: head:链表头节点"""38 def removeDup_1(head):39 if (head is None):40 return41 head.next = removeDupRecursion(head.next)42 43 44 # 方法二:顺序删除45 """ 主要思路:通过双重循环直接在链表上进行删除操作。外层循环用一个指针从第一个节点开始遍历整个链表,然后内层循环用另一个指针遍历其余节点,46 将与外层循环遍历的指针所指节点的数据域相同的节点删除。47 """48 def removeDup_2(head):49 if head==None or head.next==None:50 return51 52 outerCur = head.next # 用于外层循环,指向链表的第一个节点53 innerCur = None # 用于内层循环,用来遍历outerCur后面的节点54 innerPre = None # innerCur的前驱节点55 56 while outerCur != None:57 innerCur = outerCur.next58 innerPre = outerCur59 while innerCur != None:60 # 找到重复的节点并删除61 if outerCur.data == innerCur.data:62 innerPre.next = innerCur.next63 innerCur = innerCur.next64 else:65 innerPre = innerCur66 innerCur = innerCur.next67 outerCur = outerCur.next68 69 70 71 72 if __name__ == "__main__":73 i = 174 head = LNode(i)75 head.next = None76 tmp = None77 cur = head78 while i<7:79 tmp = LNode(i)80 if i%2==0:81 tmp.data = i+182 elif i%3==0:83 tmp.data = i-284 else:85 tmp.data = i86 tmp.next = None87 cur.next = tmp88 cur = tmp89 i += 190 print("逆序前的链表为:")91 cur = head.next # 重新设置第一个节点为当前节点92 while cur != None:93 print(cur.data, end=" ")94 cur = cur.next95 print("\n删除重复节点后的链表为:")96 removeDup_1(head) # 逆序链表97 # removeDup_2(head) # 逆序链表98 cur = head.next # 重新设置第一个节点为当前节点99 while cur != None: 100 print(cur.data, end=" ") 101 cur = cur.next
View Code
code_4:用有序的列表模拟一个栈
1 #-*- coding:utf-8 -*-2 # username:MR3 4 class MyStack:5 """利用有序列表模拟栈"""6 # 定义一个空的栈7 def __init__(self):8 self.items = []9 # 判断栈是否为空 10 def isEmpty(self): 11 return len(self.items)==0 12 # 返回栈的大小 13 def size(self): 14 return len(self.items) 15 # 返回栈顶元素,把列表最后一个元素作为栈顶元素,这里只是返回,不删除 16 def top(self): 17 if not self.isEmpty(): 18 return self.items[len(self.items)-1] 19 else: 20 return None 21 # 弹栈,弹出列表中最后一个元素 22 def pop(self): 23 if len(self.items)>0: 24 return self.items.pop() 25 else: 26 print("栈已经为空") 27 return None 28 # 压栈,在列表的最后加入一个元素 29 def push(self,item): 30 self.items.append(item) 31 32 if __name__ == "__main__": 33 s = MyStack() 34 s.push(4) 35 s.push(5) 36 print("栈顶元素为:%s" % str(s.top())) 37 print("栈的大小为:%s" % str(s.size())) 38 s.pop() 39 print("弹栈成功") 40 s.pop()
View Code
code_5:用链表模拟一个栈
1 #-*- coding:utf-8 -*- 2 # username:MR 3 4 class LNode: 5 def __init__(self,x): 6 self.data = x 7 self.next = None 8 9 class MyStack: 10 def __init__(self): 11 # pHead = LNode() 12 self.data = None 13 self.next = None 14 # 判断stack是否为空,如果为空返回true,否则返回false 15 def empty(self): 16 if self.next == None: 17 return True 18 else: 19 return False 20 # 获取栈中的元素个数 21 def size(self): 22 size = 0 23 p = self.next 24 while p != None: 25 p = p.next 26 size += 1 27 return size 28 # 入栈:把e放到栈顶 29 def push(self,e): 30 p = LNode(e) 31 # p.data = e 32 p.next = self.next 33 self.next = p 34 # 出栈,同时返回该元素 35 def pop(self): 36 tmp = self.next 37 if tmp != None: 38 self.next = tmp.next 39 return tmp.data 40 # 取得栈顶元素 41 def top(self): 42 if self.next != None: 43 return self.next.data 44 print("栈已空") 45 return None 46 47 if __name__ == "__main__": 48 stack = MyStack() 49 stack.push(1) 50 stack.push(3) 51 print("栈顶元素为:%s" % str(stack.top())) 52 print("栈大小为:%s" % str(stack.size())) 53 stack.pop() 54 print("出栈成功") 55 stack.pop()
View Code
code_6:用数组实现一个队列
#-*- coding:utf-8 -*- # username:MR"""队列:先入先出 用front记录首元素的位置,用rear记录尾元素后一个位置, 入列时只要将待入列的元素放入数组下标为rear的位置,同时将rear+1, 出列时只需要将front+1即可 """class MyQueue:def __init__(self):self.arr = []self.front = 0self.rear = 0# 判断队列是否为空def isEmpty(self):return self.front==self.rear# 返回队列的大小def size(self):return self.rear-self.front# 返回队列的首元素def getFront(self):if self.isEmpty():return Nonereturn self.arr[self.front]# 返回队列的尾元素def getBack(self):if self.isEmpty():return Nonereturn self.arr[self.rear-1]# 删除队列头元素(出列)def deQueue(self):if self.rear>self.front:self.front+=1else:print("队列已经为空")# 把新元素加入到队列尾部(入列)def enQueue(self, item):self.arr.append(item)self.rear+=1if __name__ == "__main__":queue = MyQueue()queue.enQueue(1)queue.enQueue(2)print("队列头元素为: %s" % str(queue.getFront()))print("队列尾元素为: %s" % str(queue.getBack()))print("队列的大小为: %s" % str(queue.size()))
View Code
code_7:翻转栈
#-*- coding:utf-8 -*- # username:MR# 先定义一个栈 class Stack:def __init__(self):self.items = []# 判断栈是否为空def empty(self):return len(self.items)==0# 返回栈的大小def size(self):return len(self.items)# 返回栈顶元素,把列表最后一个元素作为栈顶元素,这里只是返回,不删除def peek(self):if not self.empty():return self.items[len(self.items)-1]else:return None# 弹栈,弹出列表中最后一个元素def pop(self):if len(self.items)>0:return self.items.pop()else:print("栈已经为空")return None# 压栈,在列表的最后加入一个元素def push(self,item):self.items.append(item)""" 方法功能:把栈底元素移动到栈顶 参数:s栈的引用 """ def moveBottomToTop(s):if s.empty():returntop1 = s.peek()s.pop() # 弹出栈顶元素if not s.empty():# 递归处理不包含栈顶元素的子栈 moveBottomToTop(s)top2=s.peek()s.pop()# 交换栈顶元素与子栈栈顶元素 s.push(top1)s.push(top2)else:s.push(top1)def reverse_stack(s):if s.empty():return# 把栈底元素移动到栈顶 moveBottomToTop(s)top=s.peek()s.pop()# 递归处理子栈 reverse_stack(s)s.push(top)if __name__ == "__main__":s=Stack()s.push(5)s.push(4)s.push(3)s.push(2)s.push(1)reverse_stack(s)print("翻转后出栈顺序为:")while not s.empty():print(s.peek())s.pop()
View Code
code_8:栈排序
1 #-*- coding:utf-8 -*- 2 # username:MR 3 4 # 先定义一个栈 5 class Stack: 6 def __init__(self): 7 self.items = [] 8 # 判断栈是否为空 9 def empty(self): 10 return len(self.items)==0 11 # 返回栈的大小 12 def size(self): 13 return len(self.items) 14 # 返回栈顶元素,把列表最后一个元素作为栈顶元素,这里只是返回,不删除 15 def peek(self): 16 if not self.empty(): 17 return self.items[len(self.items)-1] 18 else: 19 return None 20 # 弹栈,弹出列表中最后一个元素 21 def pop(self): 22 if len(self.items)>0: 23 return self.items.pop() 24 else: 25 print("栈已经为空") 26 return None 27 # 压栈,在列表的最后加入一个元素 28 def push(self,item): 29 self.items.append(item) 30 31 def moveBottomToTop(s): 32 if s.empty(): 33 return 34 top1=s.peek() 35 s.pop() 36 if not s.empty(): 37 moveBottomToTop(s) 38 top2=s.peek() 39 if top1>top2: 40 s.pop() 41 s.push(top1) 42 s.push(top2) 43 return 44 s.push(top1) 45 46 def sortStack(s): 47 if s.empty(): 48 return 49 # 把栈底元素移动到栈顶 50 moveBottomToTop(s) 51 top=s.peek() 52 s.pop() 53 # 递归处理子栈 54 sortStack(s) 55 s.push(top) 56 57 if __name__ == "__main__": 58 s=Stack() 59 s.push(1) 60 s.push(4) 61 s.push(3) 62 sortStack(s) 63 print("排序后出栈顺序为:") 64 while not s.empty(): 65 print(s.peek(),end=" ") 66 s.pop()
View Code
code_9:二叉树的实现与遍历
转载于:https://www.cnblogs.com/muouran0120/p/11228035.html
数据结构代码学习笔记(持续更新中)相关推荐
- JS逆向学习笔记 - 持续更新中
JS逆向学习笔记 寻找深圳爬虫工作,微信:cjh-18888 文章目录 JS逆向学习笔记 一. JS Hook 1. JS HOOK 原理和作用 原理:替换原来的方法. (好像写了句废话) 作用: 可 ...
- typescript-----javascript的超集,typescript学习笔记持续更新中......
Typescript,冲! Typescript 不是一门全新的语言,Typescript是 JavaScript 的超集,它对 JavaScript进行了一些规范和补充.使代码更加严谨. 一个特别好 ...
- 专升本 计算机 公共课学习笔记(持续更新中...)
计算机公共课学习笔记 第一章 计算机基础知识(30分) 1.计算机概述 计算机(Computer)的起源与发展 计算机(Computer)也称"电脑",是一种具有计算功能.记忆功能 ...
- Docker快速入门学习笔记-持续更新中
Docker安装 #1.卸载旧的版本 yum remove docker \ docker-client \ docker-client-latest \ docker-common \ docker ...
- Java学习笔记(持续更新中)
文章目录 项目实战 mall项目(SpringBoot项目) 1. 添加Swagger-UI配置,修改MyBatis Generator注释的生成规则 2. redis基础配置 3. SpringSe ...
- 重拾CCNA,学习笔记持续更新ing......(4)
重拾CCNA,学习笔记持续更新ing......(4) 路由器作用功能的经典解说(笑)(非原创) 假设你的名字叫小不点,你住在一个大院子里,你的邻居有很多小伙伴,在门口传达室还有个看大门的李大爷,李大 ...
- SpringCloud学习笔记,课程源自黑马程序员,笔记持续更新中...
@SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式: 学习内容 1.服务拆分-服务远程调用: 2.搭建eureka服务: 2.1.eureka服务注册-client 2 ...
- Admin.NET管理系统(vue3等前后端分离)学习笔记--持续更新
我的学习笔记 - 9iAdmin.NET 欢迎学习交流 (一)前端笔记 1.1 关于.env的设置 1.2 关于路由模式问题 1.3 关于 vue.config.ts 1.4 关于 打包(pnpm r ...
- [Hadoop] Hadoop学习历程 [持续更新中…]
1. Hadoop FS Shell Hadoop之所以可以实现分布式计算,主要的原因之一是因为其背后的分布式文件系统(HDFS).所以,对于Hadoop的文件操作需要有一套全新的shell指令来完成 ...
- opencv-python学习笔记【更新中】
opencv-python 基于明日科技的<Python OpenCV从入门到实践>的学习笔记 import cv2 1 图像处理的基本操作 (1)读取图像 image = cv2.imr ...
最新文章
- 如何将通达信的预警股票发送到微信
- Linux系统调用的运行过程【转】
- 究竟是什么在影响着我?
- ITK:可视化静态稀疏Shi 2D水平设置图层
- Qt中QtTableWidget的使用
- nginx log记录请求响应日志及日志分割
- python教程视频哪个好-Python 基础视频教程那个好?
- webpack(三)使用 babel-loader 转换 ES6代码
- 汉王考勤管理软件mysql数据库配置_求汉王考勤软件数据库表结构
- freyja 可能会加入分库、分表功能
- CIR 工业自动化雷达
- leetcode 506. Relative Ranks(python)
- 什么是迁移学习?什么时候使用迁移学习?
- BUUCTF-Misc-No.4
- redis 失效时间单位是秒还是毫秒_redis键过期时间的应用
- 管理学定律十:罗森塔尔效应与虚假同感偏差
- usb gadget printer驱动分析
- 基恩士PLC--控制案例程序
- js 解决页面切换时,定时器setInterval会变得很慢,有时候不执行的问题
- 物联网终端数据传输安全_如何应对物联网的两个最大挑战:数据和安全
热门文章
- 拓端tecdat|R语言用线性回归模型预测空气质量臭氧数据
- 拓端tecdat|R语言大数据分析纽约市的311万条投诉统计可视化与时间序列分析
- 拓端tecdat|Python基于粒子群优化的投资组合优化研究
- unity 加载关卡_Unity手游实战:从0开始SLG——本地化篇(四)提取本地化元素
- 基于socketio 写一个聊天室
- springBoot笔记2
- 软件工程 第五章 详细设计
- 深度学习(十五)基于级联卷积神经网络的人脸特征点定位-CVPR 2013
- python实现给定一个列表,输出由各个位置除了自身元素外所有元素乘积组成的列表
- mysql 命令查看sql文件大小_用SQL命令查看Mysql数据库大小