![](https://img-blog.csdnimg.cn/20201014180756926.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构
R戎
这个作者很懒,什么都没留下…
展开
-
算法第一天
1、围棋棋盘由横纵19*19条线组成,这些线共组成多少个正方形?思路:边长为1的正方形是18^2,边长为2的正方形横向有17个纵向有17个 所以是17^2,依次类推累加即可。涉及到动态规划,在后面补充。2、足球比赛一个小组有8支球队进行单循环比赛,胜者积3分,平则双方同积1分,负则不计分。规定积分最高的4支球队出线,则出线至少需要多少分,未出线最多可能有多少分?思路:有8支球队1 2 3...原创 2018-12-15 21:34:26 · 170 阅读 · 0 评论 -
红黑树的特点
红黑树的特点:(1)每个节点或者是黑色,或者是红色。(2)根节点是黑色。(3)每个叶子节点(NIL)是黑色。 [注意:这里叶子节点,是指为空(NIL或NULL)的叶子节点!](4)如果一个节点是红色的,则它的子节点必须是黑色的。(5)从一个节点到该节点的子孙节点的所有路径上包含相同数目的黑节点。...原创 2019-03-12 20:51:11 · 1296 阅读 · 0 评论 -
各类排序算法对比及python代码实现
一、冒泡排序按照从小到大排序每次比较两个数的大小,把大的数放后面,第一次比较完之后,最大的数会放在最后。然后比较下一轮。def bubble_sort(alist): """冒泡排序""" n = len(alist) for j in range(n-1): #判断是否要交换位置 count =原创 2019-03-07 21:50:36 · 409 阅读 · 0 评论 -
动态规划问题及例题代码实现
动态规划Dynamic Programming1.动态规划理论1.1动态规划基本思想注意:斐波那契递归求解的时间复杂度为O(2n)。子问题不独立适合动态规划算法设计。分治:将原问题划分为互不相交的子问题,递归求解子问题,再将它们的解组合起来。动态规划:子问题重叠的情况,不同的子问题具有公共的子子问题利用动态规划需要满足:问题中的状态满足最优性原理。 =》最优子结构...原创 2019-03-10 11:34:39 · 1032 阅读 · 0 评论 -
如何由二叉树序列推出二叉树
由序列推出树:先序:根–》左–》右中序:左–》根–》右后序:左–》右–》根先序遍历,中序遍历,后序遍历,三种遍历中只要给出2种遍历就可以推出树,但是这2种遍历中一定要包含中序遍历才行。只要给出先序就可以判断出所有根,通过各段首元素查看根,第一个元素肯定是整棵树的根。只要给出后序就可以判断出所有根,通过各段末元素查看根,最后一个元素肯定是整棵树的根。...原创 2019-03-09 22:11:01 · 452 阅读 · 0 评论 -
二叉树及代码实现
二叉树的基本概念二叉树是每个节点最多有两个子树的树结构。通常子树被称作“左子树”(left subtree)和“右子树”(right subtree)二叉树的性质(特性)性质1: 在二叉树的第i层上至多有2^(i-1)个结点(i>0)性质2: 深度为k的二叉树至多有2^k - 1个结点(k>0)性质3: 对于任意一棵二叉树,如果其叶结点数为N0,而度数为2的结点总数为N2,...原创 2019-03-09 21:51:39 · 1057 阅读 · 0 评论 -
树的基本概念及结论
树与树算法树的概念树(英语:tree)是一种抽象数据类型(ADT)或是实作这种抽象数据类型的数据结构,用来模拟具有树状结构性质的数据集合。它是由n(n>=1)个有限节点组成一个具有层次关系的集合。把它叫做“树”是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。它具有以下的特点:每个节点有零个或多个子节点;没有父节点的节点称为根节点;每一个非根节点有且只有一个父节点;...原创 2019-03-09 20:16:47 · 355 阅读 · 0 评论 -
栈和队列及双端队列
栈栈只允许在一端进行操作,所以是后进先出即LIFO可以用顺序表实现,也可以用链表实现以下为用顺序表实现的代码# coding:utf-8class Stack(object): """栈""" def __init__(self): self.__list = [] def push(self, item): """添加一个新...原创 2019-03-04 15:45:31 · 326 阅读 · 0 评论 -
搜索-二分查找
二分查找又称折半查找,优点是比较次数少,查找速度快,平均性能好;其缺点是要求待查表为有序表,且插入删除困难。因此,折半查找方法适用于不经常变动而查找频繁的有序列表。首先,假设表中元素是按升序排列,将表中间位置记录的关键字与查找关键字比较,如果两者相等,则查找成功;否则利用中间位置记录将表分成前、后两个子表,如果中间位置记录的关键字大于查找关键字,则进一步查找前一子表,否则进一步查找后一子表。重复以...原创 2019-03-09 16:27:22 · 293 阅读 · 0 评论 -
链表笔记及代码实现
链表的组成 有数据区和链接区单链表单向链表也叫单链表,是链表中最简单的一种形式,它的每个节点包含两个域,一个信息域(元素域)和一个链接域。这个链接指向链表中的下一个节点,而最后一个节点的链接域则指向一个空值。第一个节点叫头结点,最后一个节点叫尾节点。#!/usr/bin/env python# -*- coding: utf-8 -*-__author__ = 'Rjy'# 先...原创 2019-03-03 22:16:09 · 180 阅读 · 0 评论 -
链表和数组
链表链表中的元素可存储在内存中的任何地方,链表的每个元素都存储了下一个元素的地址,从而使一系列随机的地址串联在一起。存在的问题是需要读取链表的最后一个元素时,不能直接读取,因为不知道它所处的地址。需要读取所有的元素时链表的效率很高。数组数组知道每个元素的地址,需要随机读取元素时,数组的效率很高,元素靠在一起,当新插入元素时需要重新分配内存。数组的元素编号从0开始,元素的位置称为索引。运行...原创 2019-01-04 21:17:17 · 909 阅读 · 0 评论 -
python 实现堆排序
1、概念堆排序是利用 堆进行排序的堆是一种完全二叉树堆有两种类型: 大根堆 小根堆两种类型的概念如下:大根堆:每个结点的值都大于或等于左右孩子结点小根堆:每个结点的值都小于或等于左右孩子结点完全二叉树完全二叉树 是 一种除了最后一层之外的其他每一层都被完全填充,并且所有结点都保持向左对齐的树,向左对齐指的是:下面这样的树不是完全二叉树:如果给上面的大...原创 2019-07-09 22:45:46 · 284 阅读 · 0 评论