数据结构

数据结构(1)——排序

百般思念 提交于 2020-03-11 12:45:49
数据结构(1)——排序 冒泡排序 从左到右扫描数据,选择 最大 的数据,放在右边。 要点:比较相邻的两个数,如果左边的数大于右边的数就进行 交换 。交换次数很多。 # include <iostream> using namespace std ; void BubbleSort ( int list [ ] , int n ) ; int main ( ) { int a [ ] = { 2 , 4 , 6 , 8 , 0 , 1 , 3 , 5 , 7 , 9 } ; BubbleSort ( a , 10 ) ; for ( int k = 0 ; k < 10 ; k ++ ) cout << a [ k ] << " " ; return 0 ; } void BubbleSort ( int list [ ] , int n ) { for ( int i = 0 ; i < n - 1 ; i ++ ) { for ( int j = 0 ; j < n - i - 1 ; j ++ ) { if ( list [ j ] > list [ j + 1 ] ) std :: swap ( list [ j ] , list [ j + 1 ] ) ; } } } 选择排序 从当前未排序的整数中找一个 最小 的整数,将它放在已排序的整数列表的最后 要点:选择排序选最小的

数据结构(2)——查找

Deadly 提交于 2020-03-11 12:22:29
数据结构(2)——查找 顺序查找与折半查找(二分查找) 没有排序的数据:只能循序查找(速度慢) 排序后的数据:二分查找 顺序查找 # include <iostream> using namespace std ; int SequentialSearch ( int * a , const int n , const int x ) ; int main ( ) { int m [ ] = { 2 , 4 , 6 , 8 , 0 , 1 , 3 , 5 , 7 , 9 } ; int result ; int num = 7 ; result = SequentialSearch ( m , 10 , num ) ; if ( result == - 1 ) cout << "未找到!" << endl ; else cout << "在m[" << result << "]里找到" << num << endl ; return 0 ; } int SequentialSearch ( int * a , const int n , const int x ) { int i ; for ( i = 0 ; i < n - 1 ; i ++ ) { if ( a [ i ] == x ) return i ; } if ( i == n ) return - 1 ; //

【数据结构与算法之美】二叉树基础(上):什么样的二叉树适合用数组来存储?

心已入冬 提交于 2020-03-11 03:22:47
一、树 1.树的常用概念 根节点、叶子节点、父节点、子节点、兄弟节点,还有节点的高度、深度以及层数,树的高度。 2.概念解释 节点:树中的每个元素称为节点 父子关系:相邻两节点的连线,称为父子关系 根节点:没有父节点的节点 叶子节点:没有子节点的节点 父节点:指向子节点的节点 子节点:被父节点指向的节点 兄弟节点:具有相同父节点的多个节点称为兄弟节点关系 节点的高度:节点到叶子节点的最长路径所包含的边数 节点的深度:根节点到节点的路径所包含的边数 节点的层数:节点的深度+1(根节点的层数是1) 树的高度:等于根节点的高度 二、二叉树 1.概念 ①什么是二叉树? 每个节点最多只有2个子节点的树,这两个节点分别是左子节点和右子节点。 ②什么是满二叉树? 有一种二叉树,除了叶子节点外,每个节点都有左右两个子节点,这种二叉树叫做满二叉树。 ③什么是完全二叉树? 叶子节点都在最底下两层,最后一层的叶子节点都靠左排列,并且除了最后一层,其他层的节点个数都要达到最大,这种二叉树叫作完全二叉树 2.完全二叉树的存储 ①链式存储 每个节点由3个字段,其中一个存储数据,另外两个是指向左右子节点的指针。我们只要拎住根节点,就可以通过左右子节点的指针,把整棵树都串起来。这种存储方式比较常用,大部分二叉树代码都是通过这种方式实现的。 ②顺序存储 用数组来存储,对于完全二叉树,如果节点X存储在数组中的下标为i

数据结构之单链表

放肆的年华 提交于 2020-03-11 02:22:50
顺序表之链接表示 概念:链接表示是实现线性表的另一种经常使用的存储结构。这种存储结构 不要求 逻辑关系上相邻的两个元素在 物理位置上也相邻存储 ,而是通过增加指针来表示元素之间的逻辑关系和后继元素的位置。 1. 单链表表示 单链表中的每个结点包括两个域:数据域(info)——存放元素本身的信息; 指针域(link)——存放后续结点的存储位置。 最后一个元素没有后继,它的指针不指向任何结点,成为空指针。^ NULL 每个结点只有一个指针域的链表叫单链表,指向链表中第一个结点的指针称为该链表的头指针。 做以下定义: struct Node ; //单链表的结点类型; typedef struct Node * PNode ; //指向结点的指针类型; struct Node { //单链表结点结构 DataType info ; PNode link ; } ; typedef struct Node * LinkList 假设llist是某单链表的头指针 加一个头结点会使得对单链表中的第一个结点进行处理时方便很多,具体内容下面会有提及。 2.单链表上运算的实现 1.创建空链表 LinkList createNullList_link ( void ) { LinkList llist = ( LinkList ) malloc ( sizeof ( struct Node ) ) ;

数据结构与算法_1.稀疏数组和队列_2

孤街醉人 提交于 2020-03-11 01:54:18
1.2 队列 单链表 链表为有序列表,在内存中的存储如下: 链表是以节点的方式来存储,是链式存储。 每个节点包含:data 域和 next 域(指向下一个节点)。 链表的各个节点不一定是连续存储的。 链表分有头节点的链表和没有头节点的链表,根据实际的需求来确定。 代码实现 : /* 1. 第一种方法:添加节点时,直接添加到链表尾部 */ public class Demo01SingleLinkedList { public static void main ( String [ ] args ) { // 创建节点 HeroNode hero1 = new HeroNode ( 1 , "宋江" , "及时雨" ) ; HeroNode hero2 = new HeroNode ( 2 , "卢俊义" , "玉麒麟" ) ; HeroNode hero3 = new HeroNode ( 3 , "吴用" , "智多星" ) ; HeroNode hero4 = new HeroNode ( 4 , "林冲" , "豹子头" ) ; // 创建链表 SingleLinkedList singleLinkedList = new SingleLinkedList ( ) ; // 加入节点 singleLinkedList . add ( hero1 ) ;

数据结构——B树、B+树、B*树

余生长醉 提交于 2020-03-11 01:36:00
目录 (一)B树(B-树) 1、二叉搜索树 2、B树的基本概念 3、m阶B树的性质 4、B树和二叉树的操作比较 (二)B+树 1、B+树的基本概念 2、B+树的特征 3、B+的优势 (三)B*树 1、B*树的基本概念 2、B*树特点 (一)B树(B-树) 1、二叉搜索树   二叉搜索树有如下特点: 所有非叶子结点至多拥有两个孩子(Left和Right) 所有结点存储一个关键字 非叶子节点的左指针指向小于其关键字的子树,右指针指向大于其关键字的子树   二叉树的搜索,从根节点开始若查询的关键字与节点关键字相等则命中;否则若关键字比结点关键字小则进入左孩子;如果比结点关键字大,就进入右孩子;若左孩子或有孩子的指针为空,则报告未找到该关键字。 2、B树的基本概念   B树(一种多路搜索树,不一定是二叉)的出现是因为磁盘 IO ,IO操作的效率很低,在大量数据存储中(一般用于数据库索引,查找效率较高),查询时我们不能一下将所有数据都加载到内存中,只能逐一加载磁盘页,每个磁盘页对应树的结点。造成大量磁盘 IO 操作(最坏情况下为树的高度),平衡二叉树由于树的深度过大造成磁盘 IO读写频繁所耗费时间长,导致效率低 。       &   磁盘 IO 与预读 emsp; 磁盘读取以靠机械运动,分为寻道时间、旋转延迟、传输时间三个部分,这三个部分耗时相加为一次磁盘 IO 的时间,大概9ms

数据结构 学习记录 1

你离开我真会死。 提交于 2020-03-11 01:13:11
数据结构 学习记录 1 A 计算 1.什么是算法? 计算 = 信息的处理 借助某种工具,遵照一定的规则,以明确而机械的形式进行 计算模型 = 计算机 =信息处理工具 所谓算法,即在特定计算模型下,旨在解决特定问题的指令序列 输入:待处理的信息(问题) 输出:经处理的信息(答案) 正确性:的确可以解决指定的问题 确定性:任一算法都可以描述为基本操作组成的序列 可行性:每一基本操作都可以实现,且在常数时间内完成 有穷性:对于任何输入,经有穷次基本操作,都可得到输出 举个例子: 那么对于这个例子来说,输入就是直线L上的点p,输出就是经过p且垂直于L打的直线,在这个由绳子组成“计算模型”,运行了得到垂线这个算法 2.算法有穷性: 关于算法的有穷性上面已经介绍到了,现在举一个例子:Hailstone Sequence。 希尔顿序列问题是一个著名的数学问题,至今未证明其正确性,也没证明其错误性,即任何一个正整数N,如果是偶数的话就除以2,如果是奇数的话就乘以3再加上1,最后这个数都会变为1。其表达式如下: 通过递归发现,每次对n这个数字进行判断奇偶性,采用不同的计算公式。例:当n=5的时候,结果:Halistone(5)={5,16,8,4,2,1} 我们针对这个过程写出一个程序: 1int halistone(int n) { int length =0; while(n>1) { (n%2

数据结构

自闭症网瘾萝莉.ら 提交于 2020-03-10 22:16:20
数据结构学习 数据结构简介 线性结构 树 图 散列查找 排序 数据结构简介 维基百科:数据结构是计算机中存储、组织数据的方式。通常情况下,精心选择的数据结构可以带来最有效率的算法。 数据结构:涵盖(1)数据对象(2)其组织方式[逻辑存储、物理存储](3)操作集(4)实现操作的最高效算法 解决问题的效率与数据的组织方式有关,跟空间利用效率有关,也与算法的巧妙程度有关。 “数据结构”包括数据对象集以及它们在计算机中的组织方式,即它们的逻辑结构和物理存储结构,同时还包括与数据对象集相关联的操作集,以及实现这些操作的最高效的算法。抽象数据类型是用来描述数据结构的重要工具。 “算法”是解决问题步骤的有限集合,通常用某一种计算机语言进行伪码描述。我们用时间复杂度和空间复杂度来衡量算法的优劣,用渐进表示法分析算法复杂度的增长趋势。 线性结构 数据的组织方式:(1)逻辑结构:线性、树、图 (2)物理存储结构:数组、链表 线性表 :是由同一类型的数据元素构成的有序序列的线性结构 线性表:顺序存储实现;链式存储实现 广义表:是线性表的推广,元素不仅可以是单元素也可以是另一个广义表;多重链表:存在结点属于多个链的链表,指针域会有多个(双向链表不是多重链表)。 堆栈 :具有一定约束的线性表,插入和删除操作都作用在一个称为栈顶的端点位置。 队列 :具有一定操作约束的线性表,只能在一端插入,而在另一端删除。

Leetcode:690. 员工的重要性

岁酱吖の 提交于 2020-03-10 20:47:11
题目: 给定一个保存员工信息的数据结构,它包含了员工唯一的id,重要度 和 直系下属的id。 比如,员工1是员工2的领导,员工2是员工3的领导。他们相应的重要度为15, 10, 5。那么员工1的数据结构是[1, 15, [2]],员工2的数据结构是[2, 10, [3]],员工3的数据结构是[3, 5, []]。注意虽然员工3也是员工1的一个下属,但是由于并不是直系下属,因此没有体现在员工1的数据结构中。 现在输入一个公司的所有员工信息,以及单个员工id,返回这个员工和他所有下属的重要度之和。 示例 1: 输入: [[1, 5, [2, 3]], [2, 3, []], [3, 3, []]], 1 输出: 11 解释: 员工1自身的重要度是5,他有两个直系下属2和3,而且2和3的重要度均为3。因此员工1的总重要度是 5 + 3 + 3 = 11。 AC代码:广度优先算法 class Solution { public int getImportance(List<Employee> employees, int id) { int[] index = new int[2001]; Map<Integer,List<Integer>> map = new HashMap<>(); int[] importeances = new int[2001]; Queue<Integer>

机器学习模型数据结构:logistic regression, neural network, convolutional neural network

妖精的绣舞 提交于 2020-03-10 17:46:32
可以用两种方式来看神经网络,一种就是层的集合,也就是层组成的数组,另一种是神经元的集合,也就是神经元组成的Graph。 基于神经元的实现方式中,需要定义两个类 Neuron, Weight Neuron类的实例相当于是vertex,Weight组成的链表相当于是邻接表和逆邻接表。 基于层的实现方式中,每种层都对应一种层类,分别是 LogisticRegressionLayer, HiddenLayer, LeNetPoolingLayer 暂时还没有画卷积层的数据结构,这里先给出一个卷积操作的描述: 来源: https://www.cnblogs.com/xinchrome/p/4996187.html