![](https://img-blog.csdnimg.cn/20201014180756738.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构与算法
python_tty
努力成为python大牛
展开
-
Python 实现双链表,栈,队列
1.双链表class Node(object): def __init__(self, value=None): self._prev = None self.data = value self._next = None def __str__(self): return "Node(%s)"%self.data原创 2017-02-24 17:07:35 · 1393 阅读 · 0 评论 -
求二叉树的所有路径
二叉树的路径:从根结点到叶子结点15/ 20 6/ \ 8 10 40/ \ \ / 22 23 18 9 12思路:初始化2个列表,一个存储到达本节点之前的节点,另一个存储所有的路径# 构造一棵树class Node(object): """ 节点 """ def __i..原创 2019-02-15 11:53:11 · 1097 阅读 · 1 评论 -
背包算法
问题:有n件物品,每件物品的重量是Wi(i=1,2,…n),物品的价值是Pi(i=1,2,…n),背包能承受的最大重量的T,问如何放置物品,可以使背包中的物品的价值最大?想法:最原始的想法:先找到物品的所有组合,共有2n -1个,然后遍历所有的组合,判断物品的质量是否<=T,这种算法的时间复杂度是O(2n+1),空间复杂度是O(2n).不管是时间复杂度还是空间复杂度都比较高,这种算法的可...原创 2019-02-15 14:20:10 · 1939 阅读 · 0 评论 -
插入排序
插入排序相对比较简单,它是原址排序,平均时间复杂度为O(n2),最优时间复杂度为O(n),当数组是正序时达到最优的情况。逆序的时候,时间复杂度最坏,为O(n2)。思路:插入排序的基本想法就是把数组分为2部分,前一部分是排好序的,后面是待排序的。每一次从待排序的数组中拿出一个数,如果这个数大于已经排好序的数组的最后一个数,那么这个数就插入到排好序的数组的末尾,如果这个数小于排好序的数组的最后一数,...原创 2019-02-15 15:00:00 · 89 阅读 · 0 评论 -
leetcode2-两数相加
给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。您可以假设除了数字 0 之外,这两个数都不会以 0 开头。示例:输入:(2 -&gt; 4 -&gt; 3) + (5 -&gt; 6 -&gt; 4)输出:7 -&gt; 0 -&gt; ...原创 2019-02-15 18:16:02 · 145 阅读 · 0 评论 -
字符串全排列
求字符串‘abcd’的全排列思路:递归。1.固定a, 求bcd的全排列2.固定b,求cd的全排列3.固定c,求d的全排列4.固定b, 求acd的全排列5.同26.同3rest = []def CalcAllPermutation(alist, begin, to): if begin == to: rest.append(alist[:]) #...原创 2019-02-18 17:37:31 · 383 阅读 · 0 评论 -
数据结构(一) 线性表
(一)线性表的定义 线性结构的特点是:在数据元素的非空有限集中,(1) 存在唯一的一个被成为”第一个”的数据元素;(2)存在唯一的一个被成为”最后一个”的数据元素;(3)除了第一个之外,其他的元素均只有一个前驱,除了最后一个以外,其他的元素均只有一个后继线性表是最常用且最简单的一种数据结构,一个线性表是n个数据元素的有限序列。线性表中的数据元素可以是各种各样的,但是同一个线性表中的元素必定具...原创 2018-09-15 19:14:59 · 299 阅读 · 0 评论 -
堆
堆是一个数组,它可以看作一个完全二叉树,树中的节点满足:parent(i) >= left(2i), parent(i) >=right(2i+1)或者parent(i) <= left(2i), parent(i) <=right(2i+1), 前者被成为大顶堆,后者被称为小顶堆。维护堆的性质:假设A的左子树和右子树满足堆的性质,但是插入结点i之后,有可能会破坏堆的性...原创 2019-06-12 11:03:13 · 111 阅读 · 0 评论 -
堆排序
堆排序是原址排序,时间复杂度是0(nlgn).思路:先把待排序的数组A构建成一个堆,那么堆顶是数组中元素的最大值,A[0]和A[n]交换,剩余的n-1个元素继续构建成堆,然后A[0] 和A[n-1]交换,剩余的n-2个元素继续构建成堆,重复上述步骤,直到剩下1个元素结束。import randomdef max_heapify(alist, i, heap_size): lc = 2...原创 2019-06-12 14:06:03 · 107 阅读 · 0 评论