数据结构和算法
文章平均质量分 91
程序员小潘
Java开发工程师,现居杭州,CSDN博客专家,热衷于分享计算机编程相关知识,欢迎关注~
展开
-
【数据结构】图
在线性表中,元素间只有简单的前后关系,一个元素有且仅有一个直接前驱和一个直接后继。在树结构中,元素间有一对多的层级关系,一个元素最多只有一个双亲,但可以有多个孩子。相较于线性表和树,图结构显得要更加的复杂,它用来表示元素间的多对多关系。就像人际关系一样,张三可以有很多朋友,李四也可以有很多朋友,且张三的朋友也很可能是李四的朋友。如下就是一个典型的图结构。1. 数学知识回顾在了解图结构前,有必要先回顾一下高中的数学知识。1. ∈指「属于」,表示元素和集合的关系。假设集合A={a,b,c},则原创 2021-07-07 21:55:29 · 586 阅读 · 1 评论 -
【数据结构】树
树属于「非线性表」的一种,有别于线性表的一对一关系,树被用来定义数据元素间的一对多关系。现实里的树是树根朝下,枝叶朝上。而数据结构里的树,看起来像一棵倒挂的树,它是树根朝上,枝叶朝下的。现实生活里的很多事物都可以用树结构来表示,例如:人物关系、公司组织架构、文件系统等等。例如一个人,它只能有一个父亲,但是它可以有很多兄弟姐妹,也可能有很多孩子,这种结构就无法用简单的「线性表」去表示,但是用树就可以轻松实现。1. 树的定义树是n(n>=0)个结点的有限集,n=0时称为「空树」,在任原创 2021-06-29 19:31:24 · 1185 阅读 · 1 评论 -
【数据结构】散列表
【需求】设计一个容器,支持add操作,但是不允许添加重复的元素,如果元素重复则覆盖。支持contains操作,快速判断元素是否已存在。大家看到这个需求的时候,脑子里第一个想到的实现思路是什么?最简单的做法就是创建一个数组来存储元素,每次add时遍历一下数组,判断是否已存在。这么做确实可以实现需求,但是效率太低了,每次操作的时间复杂度都是O(n)。看我们如何用「散列表」这种数据结构来优化它。1. 散列表概述散列表(Hash table,也叫哈希表),是根据关键码值(Key value)而直原创 2021-06-29 19:30:33 · 340 阅读 · 1 评论 -
【数据结构】队列
队列(Queue)也是「线性表」的一种,它的特点是:先进先出,表的一端只能添加元素,另一端只能删除元素。添加元素叫作「入队」,删除元素叫作「出队」。入队一端叫作「队尾」,出队的一端叫作「队头」。队列就和生活中的排队一样,得分个先来后到,大家不能插队,永远是先到的人先办事,后到的人后办事。1. 队列的实现和栈一样,队列既可以用数组实现,也可以用链表实现。1.1 数组存储使用数组来实现队列比较麻烦,数组的一端用来生产,另一端用来消费,但是有几个问题需要解决:1、生产者到达数组末端,但原创 2021-06-29 19:29:21 · 288 阅读 · 1 评论 -
【数据结构】栈
栈(stack)又名堆栈,它是一种运算受限的线性表。限定仅在表尾进行插入和删除操作的线性表。这一端被称为栈顶,相对地,把另一端称为栈底。向一个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。栈也是「线性表」的一种,它的特点是:先进后出,后进先出,只允许在一端插入和删除元素。允许添加和删除元素的一端称作「栈顶」,另一端称作「栈底」。元素的添加操作被称作「入栈」,也叫「压.原创 2021-06-29 19:28:44 · 465 阅读 · 1 评论 -
【数据结构】链表
链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。链表由一系列结点(链表中每一个元素称为结点)组成,结点可以在运行时动态生成。每个结点包括两个部分:一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域。链表也是属于「线性表」的一种,它和数组最大的区别就是数据元素无需存储在一块连续的内存空间里。内存空间不连续了,那该如何判断元素之间的前后顺序呢?链表要求每个节点除了保存数据元素本身,还需要包含一个或多个额外的指针,来指向它关联的元素,元.原创 2021-06-29 19:28:01 · 663 阅读 · 1 评论 -
【数据结构】数组
数组(Array)是有序的元素序列。若将有限个类型相同的变量的集合命名,那么这个名称为数组名。组成数组的各个变量称为数组的分量,也称为数组的元素,有时也称为下标变量。用于区分数组的各个元素的数字编号称为下标。数组是在程序设计中,为了处理方便, 把具有相同类型的若干元素按有序的形式组织起来的一种形式。这些有序排列的同类数据元素的集合称为数组。数组(Array)是「线性表」的一种,它使用一块连续的内存空间来存放相同类型的元素。何为线性表?线性表中的元素具有线性结构,元素与元素之间有前后顺序。例如:.原创 2021-06-29 19:26:53 · 326 阅读 · 1 评论 -
数据结构和算法概述
1. 数据结构在计算机科学中,「数据结构」是计算机中存储、组织数据的方式。上面这句话是维基百科对数据结构的说明,再细一点。何为数据?数据是计算机可以识别且可以操作的对象,它是可以输入给计算机处理的符号集合。它可以是数字、文本,甚至可以是图片或视频等数据。何为结构?结构就是指数据的关系,例如「父亲和儿子」它俩构成了父子关系。在计算机中,数据并不是独立存在的,而是存在某种特定关系的元素集合。可以说,数据结构描述的是数据的组织方式。数据结构按照不同的维度,可以划分为两类:逻辑结构和物理结原创 2021-06-24 20:50:30 · 273 阅读 · 1 评论 -
时间与空间复杂度
在《数据结构和算法概述》中有说过,算法的设计要求其中有两点是:时间效率高、存储量低。判断一个算法的时间效率的高低可以看它的「时间复杂度」,存储量的高低可以看它的「空间复杂度」。1. 时间复杂度在计算机科学中,算法的时间复杂度(Time complexity)是一个函数,它定性描述该算法的运行时间。1.1 度量方法算法的时间复杂度该如何度量呢?有哪些法则可以参考,以此来判断算法的时间效率的高低。1.1.1 事后统计法判断一个算法时间效率的高低,可能最先想到的就是执行一遍,看看它消原创 2021-06-26 11:40:28 · 226 阅读 · 0 评论