数据结构

C语言指针的概念

萝らか妹 提交于 2020-03-23 09:15:51
在计算机中,所有的数据都是存放在存储器中的。一般把存储器中的一个字节称为一个内存单元,不同的数据类型所占用的内存单元数不等,如整型量占2个单元,字符量占1个单元等,在前面已有详细的介绍。为了正确地访问这些内存单元,必须为每个内存单元编上号。根据一个内存单元的编号即可准确地找到该内存单元。 内存单元的编号也叫做地址。既然根据内存单元的编号或地址就可以找到所需的内存单元,所以通常也把这个地址称为指针。 内存单元的指针和内存单元的内容是两个不同的概念。 可以用一个通俗的例子来说明它们之间的关系。我们到银行去存取款时,银行工作人员将根据我们的帐号去找我们的存款单, 找到之后在存单上写入存款、取款的金额。在这里,帐号就是存单的指针, 存款数是存单的内容。 对于一个内存单元来说,单元的地址即为指针,其中存放的数据才是该单元的内容。 在C语言中,允许用一个变量来存放指针,这种变量称为 指针变量 。因此,一个指针变量的值就是某个内存单元的地址或称为某内存单元的指针。 图中,设有字符变量C,其内容为“K”(ASCII码为十进制数 75),C占用了011A号单元(地址用十六进数表示)。设有指针变量P,内容为011A,这种情况我们称为 P指向变量C ,或说 P是指向变量C的指针 。 严格地说,一个指针是一个地址,是一个常量。而一个指针变量却可以被赋予不同的指针值,是变量。但常把指针变量简称为指针

Java基础--常用API--集合类相关API

£可爱£侵袭症+ 提交于 2020-03-23 06:07:00
一、泛型   1、泛型的本质是将类型参数化,即将数据类型作为参数。     2、泛型可以在编译期进行检查,其所有的强制转换是隐式且自动的,提高了代码的安全性。      3、泛型可以用在类(泛型类)、接口(泛型接口)、方法(泛型方法)的创建。       4、泛型的类型参数只能为引用类型,不能为基本类型。 二、常用集合类 1、体系分类:   (1)Collection体系: Set、List、Queue。     Set:元素无序且不可重复。HashSet,TreeSet。     List:元素有序且可重复。LinkedList,ArrayList。     Queue:队列,先进先出。Deque。   (2)Map体系:HashMap、TreeMap。 2、分类如下 3、集合与数组的区别 三、Collection集合 1、相关方法: 2、迭代器   (1)使用Iterator接口,不能直接new,使用集合的方法去调用。即Iterator it = c.iterator();     (2) java.util.Iterator; 其使用流程为问,取,删(不必须)。      (3)方法:     boolean hasNext();问操作,查询当前集合是否还有元素。     Object next();取操作,取出集合元素。     Iterator remove() ;删操作

Pandas基础

自作多情 提交于 2020-03-22 18:46:28
3 月,跳不动了?>>> Pandas简介 Pandas 是python的一个数据分析包,pandas是一款数据处理工具,集成了numpy以及matplotlib,拥有便捷的数据处理以及文件读取能力 Pandas 提供了三种数据对象,分别是 Series、 DataFrame 和 Panel。 其中 , Series 用于保存 一维类的数据, DataFrame 用于保存二维类的数据, Panel 用于保存三维类或者可变维度的数据。 在通常的数据分析中,我们经常使用 Series 和 DataFrame 这两种类型的数据,所以这两种类型 要重点介绍。 数据结构 系列(Series) 具有均匀数据的一维数组结构 一维数组,与Numpy中的一维array类似。二者与Python基本的数据结构List也很相近,其区别是:List中的元素可以是不同的数据类型,而Array和Series中则只允许存储相同的数据类型,这样可以更有效的使用内存,提高运算效率。 Time- Series:以时间为索引的Series。 数据帧(DataFrame)是一个具有异构数据的二维数组 DataFrame:DataFrame是⼀个二维的表格型数据结构,它含有⼀组有序的列,每列可以是不同的值类型(数值、字符串、布尔值等)。DataFrame既有⾏索引也有列索引,它可以被看做由Series组成的字典(共⽤同

第一章学习心得

三世轮回 提交于 2020-03-22 18:22:24
心得体会:第一周了解了数据结构的一些基本概念,抽象数据类型的表示和实现以及算法的空间复杂度和时间复杂度,同时也要根据实际情况选择合适的算法。 本学期的目标:认真及时完成作业,在学习方面更加自律 目前存在的苦难:感觉数据结构这门课程比较抽象,而且对代码要求更高了 下一阶段的目标:希望自己在家学习能够自律,多敲代码,有时间尽量把上个学期的学习内容复习一遍 来源: https://www.cnblogs.com/lsy-273700263/p/12547179.html

字典树(前缀树/后缀树)

你离开我真会死。 提交于 2020-03-22 18:15:14
用途 有人说是为了统计字频,可我觉得 HashMap 就可以完成。有人说比 HashMap 占用内存要小,但我感觉小也小不到哪里去。 有人说为了查询字符,还是那句话,HashSet 表示我也可以。 也许在 Hash 没有出来前,它也许在这些领域占有一席之地。目前,从数据结构来看,我认为它的作用也许在以下方面比较突出: 也被称为 前缀树,就是剔除相同的前缀操作,这里看不懂很正常,后面慢慢说 搜索提示,讲了下面结构你就理解了 结构 这就是字典树,我们沿着最左边走一遭,那就是 JOHNNY。 先来说下之前提到的第一个用途,前缀树。比如有两个字符串, JOHNNY 和 JOHN。可以发现两者拥有前缀,JOHN,这有什么作用呢?数据压缩的时候也许会用到,可以看这题。 820. 单词的压缩编码 接下来,说说第二个功能。比如你在搜索框中输入了 JO,那我根据字典树,我猜测你要找的也许是 JOHNNY 或者 JOE,然后我会给你提示。 定义数据结构 讲一个数据结构,主要就讲,如何去定义一个数据结构,然后涉及相关的操作,这里就是添加(搭建)、删除操作。 因为这也是一个树的结构,只不过这里不一定是二叉树,上面的图有点误导,我们如果要表示英文字符的话,那么从根节点出发,应该有26个字符可供选择。 class NodeTree{ // 用数组编号代替字符,会减小搜索查询时间复杂度 NodeTree[]

第一章学习心得

元气小坏坏 提交于 2020-03-22 18:06:27
心得体会:初步了解了数据结构与算法原理以及一些思想,算法的空间复杂度和时间复杂度,知道了要想弄清楚一个算法的实现,首先要知道这个算法的大致原理。 本学期的目标:认真完成作业,坚持上机操作,用实践检验代码。通过学习数据结构提高自己解决问题的效率。 目前存在的苦难:数据结构比较抽象,书本上各种概念比较复杂。 下一阶段的目标:多钻研书上的代码,深入了解算法思想原理以及抽象结构 来源: https://www.cnblogs.com/lionbot/p/12547357.html

java数据结构之递归算法

旧城冷巷雨未停 提交于 2020-03-22 15:11:59
概述 程序调用自身的编程技巧称为递归( recursion)。递归做为一种算法在程序设计语言中广泛应用。递归有直接递归和间接递归 •直接递归:函数在执行过程中调用本身。 •间接递归:函数在执行过程中调用其它函数再经过这些函数调用本身。 •表达方式: •递归算法有四个特性: (1)必须有可最终达到的终止条件,否则程序将陷入无穷循环; (2)子问题在规模上比原问题小,或更接近终止条件; (3)子问题可通过再次递归调用求解或因满足终止条件而直接求解; (4)子问题的解应能组合为整个问题的解。 下面将从以下几个典型的例子来讲解递归算法: 汉诺塔问题 如图,汉诺塔问题是指有三根杆子A,B,C。C杆上有若干碟子,把所有碟子从A杆上移到C杆上,每次只能移动一个碟子,大的碟子不能叠在小的碟子上面。求最少要移动多少次? 当n=1时: Move 1 from A to C 当n=2时: Move 1 from A to B Move 2 from A to C Move 1 from B to C 当n=3时: Move 1 from A to C Move 2 from A to B Move 1 from C to B Move 3 from A to C Move 1 from B to A Move 2 from B to C Move 1 from A to C 源代码 static

数据结构之线性表、栈、队列

删除回忆录丶 提交于 2020-03-22 15:04:03
线性表 一、定义 线性表是n个数据元素的有限序列。 二、线性表的顺序表示和实现 即用一组地址连续的储存单元依次存储线性表的数据元素。以元素在计算机内“物理位置相邻”来表示线性表中数据元素之间的逻辑关系。即是用我们熟悉的C/C++中的数组存储数据元素。只要确定了数据元素的起始位置,就可随机地访问数据元素。但是这种表示方法不便于插入和删除元素,每插入或删除一个元素,都要移动插入或删除位置之后的数据元素在连续储存单元中的位置,而且除了重新分配内存,否则在程序运行过程中不能动态地增加储存单元的数量。 三、线性表的链式表示和实现 即用一个链表来储存数据元素。这种储存结构的特点是用一组任意的存储单元存储线性表的数据元素(可连续可不连续),它包括两个域:数据域和指针域,指针域储存下一个或上一个元素的内存地址,从而使这些元素连成一个线性表。线性表有单链表、双向链表和循环链表。 双向链表的结点中有两个指针域,其一指向直接后继,另一指向直接前继,克服了单链表的单向性缺点。 循环链表是表中最后一个结点的指针域指向头结点,整个链表形成一个环。从表中任一结点出发均可找到表中其他结点。 线性表的链式表示非常方便插入或删除元素,而且效率比较高,因为元素并不是储存在物理位置相邻的存储单元中,插入或删除元素只对表中逻辑上相邻的两个(在两端时为一个)元素有影响,对其他元素无影响。而且可在程序运行过程中“无限制

数据结构之排序

試著忘記壹切 提交于 2020-03-22 06:37:29
这篇文章主要讨论常见的排序算法。   排序算法分为内部排序和外部排序两种,内部排序是指只利用内存来完成的排序,外部排序是指借助外部存储设备完成的排序。外部排序主要针对记录比较多、内存无法一次全部加载的情况。我们这里主要关注内部排序。   内部排序大致分为四类:1)插入排序;2)交换排序;3)选择排序;4)归并排序;5)基数排序。我们下面会分别进行描述。   首先,我们来确定排序的对象,这里我们假设排序的对象是随机生成的非重复整数数组,有下面的辅助方法: 整型数组辅助方法(生成和打印) 1 public static int[] createArray(int count, int max) 2 { 3 if (count < 1) return null; 4 int[] arrResult = new int[count]; 5 java.util.Random r = new java.util.Random(); 6 for(int i = 0; i < arrResult.length; i++) 7 { 8 int temp = 0; 9 while(true) 10 { 11 temp = r.nextInt(max); 12 int j = 0; 13 for (j = 0; j < i; j++) 14 { 15 if (arrResult[j] == temp)

数据结构--树形结构

狂风中的少年 提交于 2020-03-22 05:10:30
今天在博客上看到这样一段代码,感觉挺有意思,代码如下: 1 public class Edge { 2 //Name of origin town 3 public Node origin; 4 //Name of destination town 5 public Node destination; 6 //Route weight to destination 7 public int weight; 8 //next possible route 9 public Edge next; 10 //constructor 11 public Edge(Node origin, Node destination, int weight) { 12 this.origin = origin; 13 this.destination = destination; 14 this.weight = weight; 15 this.next = null; 16 } 17 18 public Edge next(Edge edge) { 19 this.next = edge; 20 return this; 21 } 22 } 23 24 graph.routeTable.put(a, new Edge(a, b, 5).next(new Edge(a, d, 5).next(new