![](https://img-blog.csdnimg.cn/e926ad1e50c04de7b5fadf3ae324b115.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
python数据结构
使用python实现的数据结构与算法
吴天德少侠
这个作者很懒,什么都没留下…
展开
-
【不用递归,自定义栈实现DFS走迷宫】
前言这是一道遇到过的面试题,当时我用队列实现BFS写的,我知道这种走迷宫的题目一般都是选递归形式的DFS,但是我内心喜欢BFS,觉得稳扎稳打的BFS更优雅。今天突发奇想,用栈实现了一下DFS。代码# 突发奇想,想用栈写一个走迷宫的dfsclass Solution: def find_path(self,maze:list,start_point:list,end_point:list): ans_path = [] if start_point ==原创 2022-04-16 16:17:58 · 388 阅读 · 0 评论 -
python实现最大堆与堆排序
class MaxHeap: heap = [] @staticmethod def insertNum(num): """ 插入元素 """ MaxHeap.heap.append(num) MaxHeap.shift_up() @staticmethod def shift_up(): """ 第一个元素放在索引为0的位置上 """ current_id = len(MaxHeap.原创 2021-09-08 20:04:27 · 191 阅读 · 0 评论 -
python使用accumulate计算前缀和
from itertools import accumulatel = [1,2,3,4]ls = list(accumulate(l))print(ls)原创 2021-08-30 10:22:24 · 741 阅读 · 0 评论 -
python大整数的加法运算
用数组存2个数组,对应位相加,存储进位#!/usr/bin/env python# -*- coding: utf-8 -*-# @Time : 2021/7/19 14:36# @Author : wutiandeclass Solution(): def maxNUmAdd(self,str1:str,str2:str)->list: length = max(len(str1),len(str2)) str1,str2 = f"%0{l原创 2021-07-19 15:55:16 · 1377 阅读 · 0 评论 -
python分解质因数
if __name__ == '__main__': n = int(input('Please input a integer: ')) num = n # 使用num变量保留输入的原始数值 m = [] while n != 1: # n==1时,已分解到最后一个质因数 for i in range(2, int(n + 1)): if n % i == 0: m.append(str(i)) .原创 2021-07-16 11:31:49 · 288 阅读 · 0 评论 -
python输出第m个到第n个素数
比如:2是第1个素数,5是第3个素数,如果m=3,n = 7,你就得输出5, 7, 11, 13, 17#!/usr/bin/env python# -*- coding: utf-8 -*-# @Time : 2021/7/15 15:33# @Author : wutiande"""输出第m到第n个素数"""def isPrime(n): if n<=1: return False import math sqr = int(math.s.原创 2021-07-15 15:43:54 · 2843 阅读 · 0 评论 -
python判断一个数是不是素数以及打印素数表
当n<10^5时的解法:#!/usr/bin/env python# -*- coding: utf-8 -*-# @Time : 2021/7/15 14:27# @Author : wutiandedef isPrime(n)->bool: if n<=1: return False import math sqr = (int)(math.sqrt(1.0*n)) for i in range(2,sqr+1):原创 2021-07-15 15:42:01 · 158 阅读 · 0 评论 -
python实现分数的加减乘除
#!/usr/bin/env python# -*- coding: utf-8 -*-# @Time : 2021/7/15 13:43# @Author : wutiandedef gcd(a,b): if b==0: return a else: return gcd(b,a%b)def lcm(a,b): d = gcd(a,b) return a//d*bclass Fraction: def __ini.原创 2021-07-15 14:22:13 · 2420 阅读 · 2 评论 -
python求最大公约数和最小公倍数
#!/usr/bin/env python# -*- coding: utf-8 -*-# @Time : 2021/7/15 13:30# @Author : wutiandedef gcd(a,b): if b==0: return a else: return gcd(b,a%b)if __name__ == '__main__': a = int(input("input a:")) b = int(input("in.原创 2021-07-15 13:33:30 · 145 阅读 · 0 评论 -
python演示达到数字黑洞的过程
#!/usr/bin/env python# -*- coding: utf-8 -*-# @Time : 2021/7/15 10:47# @Author : wutiandedef toArray(num): """数字转数组""" numstr = "%04d" % (num) nums = [] for item in numstr: nums.append(item) return numsdef toNumber(nu.原创 2021-07-15 11:26:36 · 247 阅读 · 0 评论 -
python选择排序及其变体
import randomdef randPartition(A:list,left:int,right:int)->int: """随机选取主元,返回分隔点""" p = random.randint(left+1,right) print('p:',p) A[left],A[p] = A[p],A[left] temp = A[left] while left<right: while left<right and .原创 2021-07-15 09:18:34 · 111 阅读 · 0 评论 -
python快速排序
#!/usr/bin/env python# -*- coding: utf-8 -*-# @Time : 2021/7/14 14:43# @Author : wutiandeimport randomdef partition(A:list,left:int,right:int)->int: """根据主元对区间进行划分""" temp = A[left] # 主元 while left<right: while left<ri.原创 2021-07-14 15:24:26 · 62 阅读 · 0 评论 -
python快速幂
#!/usr/bin/env python# -*- coding: utf-8 -*-# @Time : 2021/7/14 13:52# @Author : wutiandedef binaryPow(a,b,m): if b==0: return 1 if (b%2==1): return a*binaryPow(a,b-1,m)%m else: mul = binaryPow(a,b//2,m) re.原创 2021-07-14 14:06:25 · 85 阅读 · 0 评论 -
python和c/c++递归实现全排列
c++实现:#include<cstdio>const int maxn = 11;// p为当前排列,hashTable记录整数x是否已经在p中int n, P[maxn], hashTable[maxn] = { false };// 当前处理排列的第index号位void generateP(int index) { if (index == n + 1) { // 递归边界 for (int i = 1; i <= n; i++) { printf(.原创 2021-06-25 17:29:49 · 88 阅读 · 0 评论 -
c/c++ 查询M中的数是否在N中出现过
#include<cstdio>const int maxn = 100010;bool hashTable[maxn] = { false };int main() { int n, m, x; scanf_s("%d %d", &n, &m); for (int i = 0; i < n; i++) { scanf_s("%d", &x); hashTable[x] = true; //数字x出现过 } for (int i = 0.原创 2021-06-25 16:23:21 · 223 阅读 · 0 评论 -
python链表反转
例如:1,2,3,4,5 ==> 5,4,3,2,1# Definition for singly-linked list.class ListNode: def __init__(self, val=0, next=None): self.val = val self.next = nextclass Solution: def reverseList(self, head: ListNode) -> ListNode: .原创 2021-06-25 11:55:01 · 96 阅读 · 0 评论 -
python打开转盘锁
class Solution(object): def openLock(self,deadends,target): numbers = [("0000",0)] setnumbers = set() setnumbers.add("0000") # print(numbers[0][0][0]) while len(numbers)>0: numberFather = numbers..原创 2021-06-25 09:36:23 · 209 阅读 · 0 评论 -
python挖掘机技术那家强
题目描述:为了统计技术最强的学校输入:第一行输入参赛学校个数N接下来N行以空格输入:学校编号 得分输出:以空格隔开输出得分最高的学校及得分。示例:输入:31 23 41 3输出:1 5代码num = int(input())scores = [0 for _ in range(100001)]for i in range(num): b, g = input().split(' ') bi = int(b) gi = i原创 2021-06-22 17:04:50 · 111 阅读 · 0 评论 -
python背包问题
一、01背包01背包不可重复,外层循环遍历nums,内参循环遍历targets,逆序:如:将一堆石头分成2堆,qiu原创 2021-06-08 16:09:06 · 279 阅读 · 0 评论 -
01背包问题
一、限定重量,求最大价值class Solution: """ 目标函数:价值最大 限制条件:背包重量 """ def bigValue(self)->(int,list): fruit = {'李子':[4,4500],'苹果':[5,5700],'橘子':[2,2250],'草莓':[1,1100],'甜瓜':[6,6700]} capacity = 8 # 背包限制条件 values = list(fr原创 2021-06-01 16:35:19 · 193 阅读 · 0 评论 -
python实现LRU算法
from collections import dequeclass Node: def __init__(self,key,val): self.key = key self.val = valclass LRUCache(object): def __init__(self,capacity): """ LRU缓存置换算法 :param capacity: """ .原创 2021-05-31 16:25:55 · 595 阅读 · 0 评论 -
Python+dijstra算法
一、图二、代码# 创建图graph = {}graph["start"] = {}graph["start"]["a"] = 1graph["start"]["b"] = 2# print(graph["start"].keys())graph["a"] = {}graph["a"]["end"] = 5graph["a"]["c"] = 2graph["b"] = {}graph["b"]["c"] = 3graph["c"] = {}graph["c"]["原创 2021-05-21 08:45:06 · 124 阅读 · 0 评论 -
python A星寻路算法
def a_star_search(start,end): # 待访问的格子 open_list = [] # 已访问的格子 close_list = [] # 把起点加入open_list open_list.append(start) """主循环,每一轮检查一个当前方格节点""" while len(open_list) > 0: # 在open_list中查找F值最小的节点作为当前方格节点 cu..原创 2021-05-13 17:18:25 · 1566 阅读 · 3 评论 -
python二叉堆的建立、上浮与下沉
def up_adjust(array=[]): """ 二叉堆的尾节点上浮操作,最小堆 :param array:原数组 :return: """ child_index = len(array) - 1 parent_index = (child_index - 1) // 2 """temp保存插入的叶子节点值,用于最后的赋值""" temp = array[child_index] while child_index .原创 2021-05-11 09:40:02 · 292 阅读 · 0 评论 -
python层序遍历二叉树
前序构建一棵这样的二叉树,层序遍历它from queue import Queuedef level_order_traversal(node): queue = Queue() queue.put(node) while not queue.empty(): """出队并打印""" node = queue.get() print(node.data) """左右子节点入队""" if n原创 2021-05-11 08:47:17 · 447 阅读 · 0 评论 -
python不递归前序遍历二叉树
class TreeNode: def __init__(self,data): self.data = data self.left = None self.right = Nonedef create_binary_tree(input_list=[]): """前序构建二叉树""" if input_list is None or len(input_list)==0: # 首先判断是不是None以及是不是空 .原创 2021-05-11 08:22:30 · 154 阅读 · 0 评论 -
python树的链表实现
兄弟萌,话不多说,show me the code!class BinaryTree: def __init__(self,rootObj): self.key = rootObj self.leftChild = None self.rightChild = None def insertLeft(self,newNode): if self.leftChild == None: self.le原创 2021-04-26 08:26:49 · 343 阅读 · 0 评论 -
python树的嵌套列表实现
兄弟萌,话不多说,show me the code!def BinaryTree(r): return [r,[],[]]def insertLeft(root,newBranch): t = root.pop(1) if len(t)>1: root.insert(1,[newBranch,t,[]]) else: root.insert(1,[newBranch,[],[]]) return rootdef in原创 2021-04-26 08:26:11 · 130 阅读 · 0 评论 -
各种排序算法效率概览
其中,最后一个排序是python内置的对可迭代对象的sort方法。原创 2021-04-19 16:14:18 · 92 阅读 · 0 评论 -
python实现快速排序
兄弟萌,话不多说,show me the code!def qsort_rec(lst,l,r): if l>=r: return # 分段无记录或者只有一个记录 i = l j = r pivot = lst[i] # lst[i]是初始空位 while i<j: # 找pivot的最终位置 while i<j and lst[j] >= pivot: j -=1 # 用j向左扫描原创 2021-04-19 10:49:00 · 97 阅读 · 0 评论 -
python平衡二叉排序树
话不多说,兄弟萌,show me the code!from chapter8.btSearch import DictBinTreefrom chapter8.Assoc import Assocclass BinTNode: """树节点类""" def __init__(self,dat,left=None,right=None): self.data = dat self.left = left self.right = r原创 2021-04-15 09:53:45 · 190 阅读 · 0 评论 -
python二叉排序树与最佳二叉排序树
兄弟萌,话不多说,show me the code!from chapter8.Assoc import Assocfrom stack_queue.code import SStackdef btSearch(btree,key): """二叉排序树的检索算法""" bt = btree while bt != None: entry = bt.data if key < entry.key: bt = b.原创 2021-04-14 10:33:41 · 266 阅读 · 1 评论 -
python二叉排序树的检索算法
兄弟萌,话不多说,show me the code!def btSearch(btree,key): """二叉排序树的检索算法""" bt = btree while bt != None: entry = bt.data if key < entry.key: bt = bt.left elif key > entry.key: bt = bt.right原创 2021-04-14 09:07:26 · 97 阅读 · 0 评论 -
python图的邻接表表示
兄弟萌,话不多说,show me the code!"""图的邻接表表示"""class GraphNode(object): """节点类""" def __init__(self,_elem=None): self._elem = _elem # 数据域 self._next = None # 指针域class Graph(object): """图类""" def __init__(self): """初始原创 2021-04-12 14:46:01 · 1040 阅读 · 0 评论 -
python拓扑排序与关键路径
def toposort(graph): vnum = graph.vertex_num() indegree, toposeq = [0]*vnum, [] zerov = -1 for vi in range(vnum): """建立初始的入度表""" for v,w in graph.out_edges(vi): indegree[v] +=1 for vi in range(vnum): .原创 2021-04-12 11:45:54 · 320 阅读 · 0 评论 -
python实现dijkstra和floyd算法
from math import inffrom binary_tree.PrioQueue import PrioQueuedef dijkstra_shortest_paths(graph,v0): vnum = graph.vertex_num() assert 0 <= v0 < vnum # 第几个节点 paths = [None]*vnum count = 0 cands = PrioQueue([(0,v0,v0)]) # (p,.原创 2021-04-12 11:02:05 · 254 阅读 · 0 评论 -
python二分查找
兄弟萌,话不多说,show me the code!import timedef binarySearch(alist,item): """二分查找""" first = 0 last = len(alist) - 1 found = False while first<=last and not found: midpoint = (first+last)//2 if alist[midpoint] == item原创 2021-04-12 08:12:19 · 66 阅读 · 0 评论 -
python递归解决博物馆大盗问题
兄弟萌,话不多说,show me the code!# 初始化记忆表格m# key是(宝物组合,最大重量),value是最大价值m = {}def thief(tr,w): if tr==set() or w==0: # turple是key的要求 m[(tuple(tr),w),w] = 0 return 0 elif (tuple(tr),w) in m: return m[(tuple(tr),w)] else:原创 2021-04-11 14:01:19 · 264 阅读 · 0 评论 -
python递归解决找零钱问题
兄弟萌,话不多说,show me the code!import timedef recDC(coinValueList,change,knownResults): """递归解法找零兑换""" minCoins = change if change in coinValueList:# 递归结束基本条件 knownResults[change] = 1 # 记录最优解 return 1 elif knownResults[chan原创 2021-04-11 13:59:54 · 513 阅读 · 0 评论 -
python递归解决汉诺塔问题
兄弟萌,话不多说,show me the code!def moveTower(height,fromPole,withPole,toPole): if height >= 1: moveTower(height-1,fromPole,toPole,withPole) moveDisk(height,fromPole,toPole) moveTower(height-1,withPole,fromPole,toPole)def move原创 2021-04-09 07:55:46 · 113 阅读 · 0 评论