数据结构思想

程序的好坏一般来说有2个标准,一个是时间复杂度,一个是空间复杂度时间复杂度说的是程序运行的时间空间复杂度说的是程序的内存占用的多少。

而数据结构就是为了解决时间复杂度的,或者说一个好的数据结构(算法)可以节省程序运行的时间。

线性结构

顾名思义,线性表是一条线的。首先要稍稍提一下,数据结构的存储只有数组(Array)链表(Linklist)2种方式来实现。任何的数据结构都会涉及到创建,插入,删除这几个操作

所以线性表同样的,可以由数组和链表来实现。其中线性表又分为2种形式一种叫堆栈(Stack),一种叫队列(Queue)

堆栈

堆栈的特点是先进后出,后进先出。它的实现就是普通的数组和单向链表。

队列

队列的特点是先进先出,后进后出。就像排队一样。实现方法也是普通的数组和单向链表。只是思路变换了,不是什么大难题。

接下来才是我想特别写的树(tree)

树的开始,我们来先说说二分查找https://baike.baidu.com/item/二分查找/10628618?fr=aladdin(我相信百度会比我说的好的)

二分查找的前提条件是这一堆数据必须是顺序存储,升序降序都可以,但是必须要顺序。然后每次都拿中间项与查找项比较。

二分查找的优势在于,它100%能排除到一半的数据,所以相比于堆栈和队列的查找方式会快很多。 那么通过二分查找来引出我们的

树,

通过二分查找你有没有发现,不管查找了多少次,查找的方向是左还是右,都是按照一定的规律进行的。我们来画一个图就看看

 

 我们查找2和5就一定会在第2次找到,我们要找1,4,6就一定会在第3次找到。也就是说在二分查找中,某个数据被查找的次数是固定的。而这样一个图是不是很像一个树呢?其实这就是树。

树的概念

每一个元素都称为结点(node)(后面改了,下面的节点全部当成结点对待O(∩_∩)O)

树和子树

根:根是一个相对概念,比如对2节点5节点来说他们的根就是3节点1节点的根就是2节点4节点6节点的根是5节点

边:就是上面的蓝色箭头。一个拥有N个节点的树有N-1条边。 

结点的层次:根结点的层次为1,其余结点的层次为父结点层次+1 。

子树:子树同样也是一棵树,所以他们也拥有自己的根。每个子树是互不相交的,如果子树之间相交则不能称之为树。除了根节点以外,每个节点只有一个父节点。

节点的度:一个节点的子树个数。

树的度:一棵树中最大的节点的度作为树的度。例如上面,3节点的度是2。2节点的度是1。5节点的度是2 。所以这棵树的度是2 

叶节点:度为0的节点。用人话来说就是层次最低的节点。->1,4,6这几个就是叶节点。 

父子节点:这是一个相对概念,需要注意的是父子关系只存在于相邻的上下层次间。比如3是5的父节点,而不是4or6的父节点。

兄弟节点:在同一层次的节点称为兄弟节点。

路径和路径的长度:就是某一个节点沿着层层父节点往上走的轨迹。经过的箭头就是该路径的长度。

祖先节点:与父子节点类似,沿着一条向上的路径,该路径上所以的节点都是出发点的祖先节点。

子孙节点:沿着一条向下的路径,该路径所以的节点都是出发点的子孙节点。

树的深度:树的所有结点中最大的层次。

二叉树:

简单来说,一个node里含有数据域和指针域(含有1个FirstChild指针和1个NextSibling指针)

二叉树的种类

无序树,有序树,完全二叉树,满二叉树。

完全二叉树:

除了叶结点外,其余结点的指针域都不是NULL;

满二叉树:

是从完全二叉树衍生的一种树,满二叉树只能缺少叶结点。

发布了42 篇原创文章 · 获赞 23 · 访问量 2334

猜你喜欢

转载自blog.csdn.net/qq_40710190/article/details/102984365
今日推荐