数据结构

数据结构Day9

不想你离开。 提交于 2020-03-09 13:45:57
1、删除链表的倒数第N个节点 给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点。 示例: 给定一个链表: 1->2->3->4->5, 和 n = 2.当删除了倒数第二个节点后,链表变为 1->2->3->5. 说明: 给定的 n 保证是有效的。 进阶: 你能尝试使用一趟扫描实现吗? /** * Definition for singly-linked list. * struct ListNode { * int val; * struct ListNode *next; * }; */ struct ListNode * removeNthFromEnd ( struct ListNode * head , int n ) { struct ListNode * front = head , * temp = NULL ; //设置两个指针变量,一个指向第n个节点,另一个保持头节点, //之后一直做循环,直到second节点指向了最后一个节点时, //此时first节点就会指向倒数第n个节点,之后对该节点做删除操作即可。 struct ListNode * first = head , * second = head ; int ntemp = n ; while ( n ) { if ( second -> next != NULL ) { second =

C++从入门开始讲算法(1)

China☆狼群 提交于 2020-03-09 12:12:57
以下内容来自于洛谷网站 本文章仅是讲一个目录,细节会在之后的文章中出现 大家请拿起手中的纸和笔,认真做笔记! 文章目录 1.顺序结构 2.分支结构 3.循环结构 4.数组 5.字符串 6.函数与结构体 7.排序 8.高精度算法与模拟 9暴力枚举 10 递归递推 11.贪心 12.二分 13。搜索 14.线性表 15.二叉树 16.集合 17.图的基本应用 1.顺序结构 千里之行,始于足下。程序设计虽然花样繁多,但还是要从最简单的地方开始学习,由浅入深,直至掌握。毕竟任何复杂的工程代码都是由一行行简单的代码组成的。 我们编写计算机程序,将一个任务分解成一条一条的语句,计算机会按照顺序一条一条的执行这些语句,这就是顺序结构程序设计。 2.分支结构 人们在人生中需要做出许多选择,小到考虑晚上吃什么,大到决定高考志愿填报的学校。只有一次次选择后才能带来无限可能,我们要根据自己掌握的情况,做出最佳的选择。 程序的执行也不是一成不变的,往往会要求程序能够在不同的场合下有不同的动作。这时就需要在代码中使用条件语句来做出不同的选择。比如说,登录洛谷网时,网站后台会将你提交的用户名和密码在后台数据库中看看是否匹配,如果能够匹配就登陆成功,否则就登陆失败。这一章就来介绍如何让程序做出选择。 3.循环结构 虽然计算机可以在短时间批量处理成千上万条指令,但是不少问题中有许多规律性的重复操作

AUTOSAR-文档阅读

匆匆过客 提交于 2020-03-09 11:16:29
AUTOSAR所有软件规范文档(SWS)的目录结构都是一样的,如下: 特点及优点如下: a. 结构化程度高,所有文档结构一致,易于查找; b. 内容详实,包括所有API/数据结构的列表; c. 采用多种说明方法,如表格、UML图,易于理解。 1 Introduction and functional overview 第一章做简单的功能介绍。 5 Dependencies to other modules 第五章介绍该模块与其他模块之间的依赖关系 这里主要看与头文件结构,从中我们可以看到模块设计的头文件、代码文件,以及各文件之间的引用关系。 7 Functional specification 第7章对该模块功能做详细、正式的说明: 8 API specification 第8章介绍该模块所涉及的数据类型、API的定义规范。 8.1 Imported types 引用到的数据类型: 8.2 Type definitions 本模块定义的数据类型: 8.3 Function definitions 本模块定义的API接口,例如: 8.4 Call-back notifications 回调函数定义。 8.5 Scheduled functions 供SchM模块调用的函数定义: 8.6 Expected Interfaces 依赖其他模块的API接口。 9 Sequence

优秀的解释文章-----持续更新

China☆狼群 提交于 2020-03-09 10:11:49
1:Tomcat web.xml 中的listener、 filter、servlet 加载顺序及其详解 http://blog.csdn.net/zhangzeyuaaa/article/details/17192467 2: http、TCP/IP协议与socket之间的区别 http://www.cnblogs.com/iOS-mt/p/4264675.html 3: 反射实现 AOP 动态代理模式(Spring AOP 的实现 原理) http://www.blogjava.net/DoubleJ/archive/2008/03/04/183796.html 4: 数据结构全攻略--线性结构不攻自破(一) http://blog.csdn.net/zhang_xinxiu/article/details/11910167 5: java多态实现原理 http://blog.csdn.net/huangrunqing/article/details/51996424 6: 对象管理器(容器)——面向对象系统设计的选择 http://blog.csdn.net/zhangzeyuaaa/article/details/21172509 7:数据结构与算法中,树一般会应用在哪些方面? https://www.zhihu.com/question/20176446 8:

MySQL索引背后的数据结构及算法原理

夙愿已清 提交于 2020-03-09 10:02:21
摘要 本文以MySQL数据库为研究对象,讨论与数据库索引相关的一些话题。特别需要说明的是,MySQL支持诸多存储引擎,而各种存储引擎对索引的支持也各不相同,因此MySQL数据库支持多种索引类型,如BTree索引,哈希索引,全文索引等等。为了避免混乱,本文将只关注于BTree索引,因为这是平常使用MySQL时主要打交道的索引,至于哈希索引和全文索引本文暂不讨论。 文章主要内容分为三个部分。 第一部分主要从数据结构及算法理论层面讨论MySQL数据库索引的数理基础。 第二部分结合MySQL数据库中MyISAM和InnoDB数据存储引擎中索引的架构实现讨论聚集索引、非聚集索引及覆盖索引等话题。 第三部分根据上面的理论基础,讨论MySQL中高性能使用索引的策略。 摘要 数据结构及算法基础 索引的本质 B-Tree和B+Tree 为什么使用B-Tree(B+Tree) MySQL索引实现 MyISAM索引实现 InnoDB索引实现 索引使用策略及优化 示例数据库 最左前缀原理与相关优化 索引选择性与前缀索引 InnoDB的主键选择与插入优化 后记 参考文献 数据结构及算法基础 索引的本质 MySQL官方对索引的定义为: 索引(Index)是帮助MySQL高效获取数据的数据结构。 提取句子主干,就可以得到索引的本质:索引是数据结构。 我们知道,数据库查询是数据库的最主要功能之一

Java数据结构

别说谁变了你拦得住时间么 提交于 2020-03-09 09:31:26
记录刷PTA时用到的几种常用的类 Class LinkedList<E> LinkedList继承了Deque和List两个接口,是个很好用的双向链表。 常用操作 (继承自Deque,左边是对首节点操作,右边是对尾节点操作) 值得注意的是,add,remove,get这几个方法在遇到空间不足或列表为空的情况时抛出异常,而offer,poll,peek则返回null。 由于继承了List,还有 add (int index, E element), remove (int index) 这几个方法,可以在指定位置插入删除元素。 toArray()方法和toArray(T[] a)方法 toArray()方法是对列表内容的浅拷贝,装入新生成的一个数组中,如果链表中存入的是基本类型的数据,修改返回结果不会影响原链表,如果存入的是对象类型,则修改返回结果是不安全的。 toArray(T[] a)方法根据T返回一个指定类型的数组,T必须是链表元素类型的父类或本身,通常我们使用 String[] y = x.toArray(new String[0]); 传入一个空数组来使用这个方法。 详见 这篇博文 来源: CSDN 作者: AKaga 链接: https://blog.csdn.net/qq_19693145/article/details/104742309

数据结构之双向链表--C#版

安稳与你 提交于 2020-03-08 17:31:41
面试考察频率:⭐⭐⭐⭐ 什么是双向链表? 在单向链表的前提下,增加了前驱指针,可以跟轻松的访问一个节点的前驱与后继节点 双向链表优缺点? 优点:可以更便捷的访问一个节点的前驱与后继。 缺点:需要占用更多一些的内存。删除节点操作变得更加复杂。 如何来实现? 构建思路如下 当前节点的next指向下一个节点。当前节点的pre指向上一个节点如此循环。 (注:头节点的pre始终指向最后一个节点,为了方便遍历,具体的在后面会讲) 。基本的样子就入下图所示(绘制粗糙0.0) 基础结构表示: public class LinkedListNode { public LinkedListNode pre ; public LinkedListNode next ; public int val ; } 初始化: private void InitList ( int c , LinkedListNode node ) { node = new LinkedListNode ( ) ; node . pre = node ; node . next = null ; node . val = - 1 ; } 就是创建一个头节点,该节点不进行数据记录只是为了方便操作。初始只有一个节点时pre要指向自己。 尾插入: public void Add_Back ( LinkedListNode node ,

【数据结构】AVL树代码(Java版)

我是研究僧i 提交于 2020-03-08 14:57:52
AVL树 AVL树 BinaryTree.java BST.java AVLTree.java AVL树是在二叉搜索树的基础上学习的, 【数据结构】二叉搜索树 AVL树 AVL 树是晶早发明的自平衡二叉搜索树之— 平衡因子 (Balance Factor):某结点的左右子树的高度差 AVL树的特点 每个节点的平衡因子只可能是1、0、-1 (绝对值≤1,如果超过1,称之为“失衡") 每个节点的左右子树高度差不超过1 搜索、添加、删除 的时间复杂度是 o ( l o g n ) o(logn) o ( l o g n ) BinaryTree.java 在二叉搜索树的 BinaryTree.java 的基础上增加了 createNode() 方法,原因是 AVL树 拥有自己的节点(增加了height属性)。 /** * 二叉树 */ @SuppressWarnings ( "unchecked" ) public class BinaryTree < E > { protected int size ; // 元素数量 protected Node < E > root ; // 根节点 /** * 访问器接口 ——> 访问器抽象类 * 增强遍历接口 */ public static abstract class Visitor < E > { boolean stop ; //

堆和栈的区别

◇◆丶佛笑我妖孽 提交于 2020-03-08 14:32:43
做了这么长时间的开发、一直弄不清楚堆和栈的区别、其实也不算弄不清吧、只是每次都区分不了、 1.操作系统的堆和栈   堆-(操作系统):先进后出的序列、由程序员分配内存并释放、若程序员不释放、则程序结束时候由系统OS回收、           堆使用的是二级缓存、生命周期由虚拟机的垃圾回收算法来决定(并不是一旦成为孤儿对象就能被回收)、所以调用这些对象的速度要相对来得低一些   栈-(操作系统):先进先出的序列、由编译器自动分配和释放、用来存放函数的参数、和局部变量的值、           栈使用的是一级缓存、调用时处于存储空间中、调用完毕立即释放、 2数据结构中的堆和栈   堆-(数据结构):堆可以被看成是一棵树,如:堆排序   栈-(数据结构_:一种先进后出的数据结构 来源: https://www.cnblogs.com/keryang/p/4249408.html

栈与堆的区别

我们两清 提交于 2020-03-08 14:32:27
栈(操作系统):由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈 栈使用的是 一级缓存 , 他们通常都是被调用时处于存储空间中,调用完毕立即释放 堆(操作系统): 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收,分配方式倒是类似于链表。 堆则是存放在 二级缓存 中,生命周期由虚拟机的垃圾回收算法来决定(并不是一旦成为孤儿对象就能被回收)。所以调用这些对象的速度要相对来得低一些 堆(数据结构):堆可以被看成是一棵树,如:堆排序 栈(数据结构):一种后进先出的的数据结构 来源: https://www.cnblogs.com/carry-/p/6671770.html