随笔分类 - 【0052】数据结构
摘要:序言 为什么要有图? 线性表局限于一个直接前驱和一个直接后继的关系 树也只能有一个直接前驱也就是父节点 当我们需要表示多对多的关系时,这里我们就用到了图 最短路径 图的表示方式 邻接矩阵需要为每个顶点都分配n个边的空间,其实有很多边都是不存在,会造成空间的一定损失. 邻接表的实现只关心存在的边,不关
阅读全文
摘要:序言 为什么需要树结构? 1.数组存储方式的分析 优点:通过下标方式访问元素,速度快。对于有序数组,还可使用二分查找提高检索速度。 缺点:如果要检索具体某个值,或者插入值(按一定顺序)会整体移动,效率较低。 2.链式存储方式的分析 优点:在一定程度上对数组存储方式有优化(比如:插入一个数值节点,只需
阅读全文
摘要:序言 堆解决问题? 栈解决问题? 栈 栈(stack)是一种遵循先入后出逻辑的线性数据结构。 1.基于链表的实现 使用链表实现栈时,我们可以将链表的头节点视为栈顶,尾节点视为栈底。 如图 5-2 所示,对于入栈操作,我们只需将元素插入链表头部,这种节点插入方法被称为“头插法”。而对于出栈操作,只需将
阅读全文
摘要:序言 线性表 顺序存储(数组:查询速度快) 链式存储(链表:增加删除速度快) 链表主要解决动态存储数据的问题. 链表增加新节点和删除节点方便,链表比普通查找(顺序引导查找)方便。 静态链表内存大小是规定了的,动态链表可以根据类型来申请不同的内存大小。 线性表的两种存储结构 1.顺序表(数组) 即线性
阅读全文
摘要:算法的特性 算法具有五个基本特性:输入、输出、有穷性、确定性、可行性。 算法设计的要求 正确性、可读性、健壮性、时间效率高和存储量低 算法时间复杂度 算法空间复杂度 结束语 算法的优劣直接决定了程序运行的效率
阅读全文
摘要:序言 1968年,数据结构作为一门独立的课程 程序设计=数据结构+算法 常用的八大数据结构:数组、栈、队列、链表、树、散列表、堆、图 1.数组 访问元素 我们发现数组首个元素的索引为 0 ,这似乎有些反直觉,因为从 1 开始计数会更自然。 但从地址计算公式的角度看,索引本质上是内存地址的偏移量。首个
阅读全文
摘要:序言 学习数据结构的必要性 1.首先我们做一个简单的测试,创建一个十万次的for循环,循环过程中判断当前i值是否在list集合中,如果不在,就将其加入到集合中去。通过结果我们可以看到一个如此简单的逻辑耗时竟然高达95634毫秒,将近100秒的时间。 Stopwatch sw = new Stopwa
阅读全文