![](https://img-blog.csdnimg.cn/20190918140145169.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
数据结构
~
6978
这个作者很懒,什么都没留下…
展开
-
AVL树 插入的四种情况 更新balance factor || 暑假学习最后一课
class AVLNode(BiTreeNode): def __init__(self,data): BiTreeNode.__init__(self,data) self.bf = 0 #balance factor 平衡因子,记录左右子树高度差class AVLTree(BST): def __init__(self,li = None): BST.__init__(self,li)def rotate_left(self,p,c): s2 = c.lchild #c的.原创 2021-08-22 17:20:07 · 345 阅读 · 2 评论 -
搜索二叉树 介绍 遍历 插入 查找 删除(三种情况)
class BiTreeNode: def __init__(self,data): self.data = data self.lchild = None self.rchild = None self.parent = None def __repr__(self): return self.dataclass BST: def __init__(self,li = None): self.root = None if li: for val in li: .原创 2021-08-19 17:19:38 · 67 阅读 · 0 评论 -
构建二叉树 二叉树遍历
from collections import dequeclass BiTreeNode: def __init__(self,data): self.data = data self.lchild = None self.rchild = None def __repr__(self): return self.dataa = BiTreeNode('A')b = BiTreeNode('B')c = BiTreeNode('C')d = BiTreeNode('D').原创 2021-08-19 09:40:04 · 70 阅读 · 0 评论 -
哈希表 创建应用
class Linklist: class Node: def __init__(self,item): self.item = item self.next = None class LinklistIterator: def __init__(self,node): self.node = node def __next__(self): if self.node: cur_node = self.node self.node ...原创 2021-08-18 09:40:04 · 67 阅读 · 0 评论 -
链表 双链表 链表与顺序表(列表)
class Node: def __init__(self,item): self.item = item self.next = None# a = Node(1)# b = Node(2)# c = Node(3)# a.next = b# b.next = c## print(a.next.item)## li = [1,2,3,4,5]# li[2]def create_linklist_head(li):#头插法,倒序插入 head = Node(li[...原创 2021-08-17 07:44:40 · 143 阅读 · 0 评论 -
队列 队列内置函数 用栈解决迷宫问题(深度优先搜索) 用列表解决(广度优先)
class Queue: def __init__(self,size=100): self.queue = [0 for _ in range(size)] self.size = size self.rear = 0#队尾指针 进队 self.front = 0 #队首指针,出队 def push(self,element):#1 2 3 -> - 1 2 3] if not self.is_filled(): self.rear = (self.rear+1).原创 2021-08-13 16:30:46 · 146 阅读 · 0 评论 -
数据结构 列表 栈 栈的应用
————————————————————#封装一个栈类class Stack: def __init__(self): self.stack = [] def push(self , element):#进栈 self.stack.append(element) def pop(self):#出栈 return self.stack.pop() def get_pop(self): if len(self.stack)>0: return self.stack...原创 2021-08-11 16:30:02 · 54 阅读 · 0 评论 -
2021-08-10
#1.给两个字符串s和t,判断t是否为s的重新排列后组成的单词#如 s = ‘anagram’, t= ‘nagaram’,return true ;# s = ‘rat’,t = ‘car’,return falsedef sort1(s,t): sj = list(s) ti = list(t) sj.sort() ti.sort() return sj == tidef isAnagram(self, s, t): """ ...原创 2021-08-10 11:15:57 · 131 阅读 · 0 评论 -
数据结构 基数排序
排序原理:类似于多条件排序(如先按工资高低排序,在按年龄排序,在工资顺序决定的条件下,用年龄大小来决定最后排序),给定所排数,个位当做第一个条件,十位第二个…首先判断所排序数中最大数有多少位(如max_num = 10000,有5位),其中,输出位数的代码可以好好看一下从个位的数开始分类,把每一个排序数分到0->10中对应的桶,排好后按桶的顺序输出,还原到列表li中,此时,所有排序数在个位数上是已经排好顺序再对十位的数进行分桶操作...循环到最大数的位数,输出,所得即排序完成的列表原创 2021-08-04 10:53:11 · 106 阅读 · 0 评论 -
数据结构 希尔排序 计数排序 堆排序
def insert_sort_gap(li,gap): for i in range(gap,len(li)): tmp = li[i] j = i - gap while j >= 0 and li[j] > tmp: li[j+gap] = li[j] j -= gap li[j+gap] = tmpdef shell_sort(li): d = len(li.原创 2021-08-04 09:34:52 · 84 阅读 · 0 评论 -
数据结构 快速排序 堆排序(好难
#快速排序复杂度计算# 16# 8 8# 4 4 4 4# 2 2 2 2 2 2 2 2# 1 ....# 每一次都减半 每一层都是n的复杂度,一共有log16 =.4层# 所以是 O(nlogn快速排序from cal_time import *from bubble_sort import *import randomimport copydef partition(li,lef.原创 2021-07-29 16:31:13 · 155 阅读 · 0 评论 -
数据结构 时间空间复杂度 汉诺塔递归问题 查找算法
时间复杂度——小结1.时间复杂度使用来估计算法运行时间的一个单位2.时间复杂度高的算法比低的算法慢3.常见时间复杂度(按效率排序)O(1)< O(logn)< O(n)< O(nlogn)< O(n方)< O(n三方)#如何快速判断算法复杂度# 1.确定问题规模n# 2.循环减半过程——logn# 3.K层关于n的循环——n的k方# 4.复杂情况:根据算法执行过程具体判断‘’’/时间比空间重要/——空间换时间空间复杂度:用来评估算法内存占用大小的式子‘原创 2021-07-27 11:51:15 · 656 阅读 · 0 评论 -
数据结构 归并排序 NB三人组总结
def merge(li,low,mid,high): i = low j = mid + 1 ltmp = [] while i<= mid and j <= high:#只要两边都有数 if li[i]<li[j]: ltmp.append(li[i]) i+=1 else: ltmp.append(li[j]) ...原创 2021-07-31 11:29:28 · 72 阅读 · 0 评论 -
数据结构 常见排序算法 LOWB三人组 冒泡 选择 插入
‘’’常见排序算法:1.low B 三人组 : 冒泡、选择、插入def bubble(li): for i in range(len(li)-1): flag = False for j in range(len(i)-i-1) if li[j]>li[j+1]: li[j],li[j+1] = li[j+!],li[j] flag = True原创 2021-07-28 12:04:54 · 823 阅读 · 0 评论