随笔分类 -  数据结构基础

摘要:一. 递归 本质上,将原来的问题,转化为更小的同样的问题 举例:数组求和 Sum(arr[0... n-1]) = arr[0] + Sum(arr[1...n-1]) 第二部分为更小的同一个问题 Sum(arr[1...n-1]) = arr[1] + Sum(arr[2...n-1]) 第二部分 阅读全文
posted @ 2019-04-15 16:18 HarSong13 阅读(168) 评论(0) 推荐(0)
摘要:一.使用链表实现栈 增,删,查只对链表头进行操作,时间复杂度都为O(1) 链表头作为栈顶 LinkedListStack<E> implements Stack<E> 二.使用链表实现队列 从两端添加元素很容易 从tail端删除元素不容易 所以,从head端删除元素,从tail端插入元素 不使用虚拟 阅读全文
posted @ 2019-04-09 21:27 HarSong13 阅读(136) 评论(0) 推荐(0)
摘要:一.链表基础 动态数组、栈、队列底层都是依托静态数组实现的,靠resize来解决固定容量问题。 链表是真正的动态数据结构,是一种最简单的一种动态数据结构。 更深入的理解引用(或者指针)。 更深入的理解递归。 辅助成其他数据结构。 二.链表 LinkedList 数据存储在“节点”(Node)中 cl 阅读全文
posted @ 2019-04-08 20:27 HarSong13 阅读(308) 评论(0) 推荐(0)
摘要:一.队列 Queue 队列也是一种线性结构 相比数组,队列对应的操作是数组的子集 只能从一端(队尾)添加元素,只能从另一端(队首)取出元素。 (排队) 队列是一种先进先出的数据结构(先到先得)FIFO(First In First Out) 二.数组队列的实现(基于动态数组) Interface Q 阅读全文
posted @ 2019-04-07 19:57 HarSong13 阅读(277) 评论(0) 推荐(0)
摘要:一.栈 Stack 栈也是一种线性的数据结构 相比数组,栈相对应的操作是数组的子集。 只能从一端添加元素,也只能从一端取出元素。这一端成为栈顶。 1,2,3依次入栈得到的顺序为 3,2,1,栈顶为3,只能取出栈顶的元素3(出栈)。 栈是一种后进先出的数据结构 LIFO(Last In First O 阅读全文
posted @ 2019-04-07 16:22 HarSong13 阅读(166) 评论(0) 推荐(0)
摘要:一.简单的复杂度分析 O(1) O(n) O(logn) O(logn) O(n^2) 大O描述的是算法的运行事件和输入数据之间的关系 Eg: 数组求和 O(n),n为nums中的元素个数。算法和n呈线性关系。 忽略常数,实际时间T=c1*n+c2。 T = 2 *n +2 O(n) T = 200 阅读全文
posted @ 2019-04-05 21:10 HarSong13 阅读(237) 评论(0) 推荐(0)
摘要:一.数组基础 1.数组,即把数据码成一排存放。 数组优点:快速查询。 数组最好应用于“索引有语意”的情况,但并非所有有语意的索引都适用于数组,数组也可以处理“索引没有语意”的情况。 2.增、删、改、查,是研究数据结构的基本脉络。 设二次封装的数组的类Array<E>(类型为E,泛型),E[ ] da 阅读全文
posted @ 2019-04-04 21:01 HarSong13 阅读(263) 评论(0) 推荐(0)