- 博客(12)
- 收藏
- 关注
原创 数据结构总结
在读取稀双向链表是链表的一种,它和单向链表只的区别是双向链表比单向链表每个节点多一个头指针,这个指针指向前一个节点,也就是说,每个节点包含包含头指针、存储元素、尾指针,因此从这个节点可以同时访问到它前面和后面的节点。(6)孩子节点和双亲节点:节点子树的根称为该节点的孩子节点,该节点称为孩子节点的父节点(或双亲节点parent),比如上图中节点2为节点5的父节点,结点5为节点2的孩子节点。(7)兄弟节点:对于相同父节点的所有孩子节点来说,互为兄弟节点,比如上图中2、3、4互为兄弟节点,且6、7互为兄弟节点。
2023-06-29 20:07:50
85
1
原创 二叉树的遍历
深度优先遍历二叉树的算法又有分为三种:先序遍历(Pre-OrderTraversal),中序遍历(In-OrderTraversal)和后序遍历(Post- Order Traversal)。在计算机科学里,树的遍历指按照某种规则,不重复地访问树的所有节点的过程。不同的遍历方式,其访问节点的顺序是不一样的。这三种算法的区别就在于:在访问一棵树的时候,是先访问根节点,在「半截/中间」访问根节点,还是在最后访问根节点。因为树是图的一个子集,因此,树的遍历,也属于图遍历的子集。二叉树的深度优先遍历算法。
2023-06-06 19:30:20
78
原创 树和二叉树
若对满二叉树从根结点编号,自上而下,自左向右,那么对于编号为i的结点,若有双亲,则其双亲为i/2(向下取整),若有左孩子,则左孩子为2i,若有右孩子,则右孩子为2i+1。2、完全二叉树Q:设一个高度为h,有n个结点的二叉树,当且仅当每个结点都与高度为h的满二叉树中编号为1~n的结点一一对应时,称为完全二叉树。数中的某个结点最多只和上一层的一个结点有直接关系,根结点没有直接上层结点,所有在n个结点的书中有n-1条。1)祖先结点对应子孙结点:双亲结点对应孩子结点:具有相同双亲的结点称为兄弟结点。
2023-05-30 19:18:05
111
1
原创 树的14个基本概念
(6)孩子节点和双亲节点:节点子树的根称为该节点的孩子节点,该节点称为孩子节点的父节点(或双亲节点parent),比如上图中节点2为节点5的父节点,结点5为节点2的孩子节点。(7)兄弟节点:对于相同父节点的所有孩子节点来说,互为兄弟节点,比如上图中2、3、4互为兄弟节点,且6、7互为兄弟节点。(9)树的深度(depth):树所有节点的层次值的最大值,比如上图中树的层次值最大为3,即树的深度(或称为高度)为3。(13)子孙节点:当某一节点视为根节点时,其所有子树上的节点,都称为该节点的子孙节点。
2023-05-23 17:34:45
82
1
原创 数据结构双链表
双向链表是链表的一种,它和单向链表只的区别是双向链表比单向链表每个节点多一个头指针,这个指针指向前一个节点,也就是说,每个节点包含包含头指针、存储元素、尾指针,因此从这个节点可以同时访问到它前面和后面的节点。世界上没有完美的东西,有利就有弊,方便了数据操作的同时,牺牲的是所占的空间,因为每个节点要多出一个头指针,必然会多占用一定的内存空间,这也是空间换时间的一种方式。我们还是用类的方式来实现数据结构,跟单向链表所提供的方法类似,双向链表的特殊之处在于插入和移除元素时对于头指针的操作。
2023-05-05 19:21:55
36
原创 数据结构双链表
2.双链表的每一个节点给中既有指向下一个结点的指针,也有指向上一个结点的指针,可以快速的找到当前节点的前一个节点。1.头结点是为了操作的统一和方便而设立的,放在第一元素的结点之前,其数据域一般无意义(也可存放链表的长度)2.有了头结点,对在第一元素结点前插入结点和删除第一结点,其操作与其它结点的操作就统一了。1.头指针是指链表指向第一个结点的指针,若链表有头结点,则是指向头结点的指针。3.无论链表是否为空,头指针均不为空,头指针是链表的必要元素。2.头指针具有标识作用,所以常用头指针冠以链表的名。
2023-04-18 18:18:38
41
原创 数据结构算法
(4)拥有足够的情报:算法中各种运算总是要施加到各个运算对象上,而这些运算对象又可能具有某种初始状态,这就是算法执行的起点或依据。因此,一个算法执行的结果总是与输入的初始数据有关,不同的输入将会有不同的结果输出。算法时间复杂度是指执行算法所需要的计算工作量,可以用执行算法的过程中所需基本运算的执行次数来度量。并且在任何条件下,算法只有唯一的一条执行路径,即相同的输入只能得出相同的输出。综上所述,所谓算法,是一组严谨地定义运算顺序的规则,并且每一个规则都是有效的,且是明确的,此顺序将在有限的次数下终止。
2023-04-11 18:38:01
55
原创 线性结构的定义
存储元素是连续的链式存储的线性表称为链表,链表中的存储元素不一定是连续的,元素节点中存放数据元素以及相邻元素的地址信息。先读取稀疏数组的第一行,根据第一行的数据,创建原始的二维数组,比如上面的chessArr2=int[11][11]。在读取稀疏数组后几行的数据,并赋给原始的二维数组即可。遍历原始的二维数组,得到有效数据的个数sum。记录数组一共有几行几列,有多少个不同的值。将二维数组的有效数据数据存入到稀疏数组。个小规模的数组中,从而缩小程序的规模。稀疏数组转原始的二维数组的思路。
2023-04-03 11:03:44
241
原创 指针数组的概念
然后再与p前面的「*」结合,「*」表示此数组是指针类型,所以*p[5]表示p是一个指针数组,它有5个数组元素,每个元素值都是一个指针,指向char型变量。数组指针是一个指针,其指向的数据类型由一个数组构成(将数组作为一个数据类型看待);而指针数组的本质是一个数组,数组中的每一个元素用来保存一个指针变量。定义了具有5个元素的指针数组,每个数组元素可保存一个类型为char*的指针变量的值,也就是说,每个数组元素都是一个char*(字符)指针。一个数组的各元素值为指针类型数据时,这个数组称为指针数组。
2023-03-28 18:00:33
367
原创 指针和组数
2.如果想取a[2]中的数据,可以直接引用元素a[2],同时也可以使用间接取内容运算符(*),即*(a+2)实现,其中a+2表示数据30的地址,前面使用“为”,则表示取这个地扯里面的内容.2.如果想取a[2]中的数据,可以直接引用元素a[2],同时也可以使用间接取内容运算符(*),即*(a+2)实现,其中a+2表示数据30的地址,前面使用“为”,则表示取这个地扯里面的内容.1.如果*想标a[2]的地扯,除了之前的下标法&a[2],还可以用地址变偏移量的方法,使用a+2表示,其中2不是数值。
2023-03-14 15:54:44
63
原创 指针变量的赋值和引用
(2) 指针变量的赋值指针变量存放里面存放的是一个地址。所以可以借助取地址运算符(&)为指针赋值。例如: int m=10; Int *p; P=&m;其中:p=&m;语句将变量m的地址取出来赋给指针变量p,即指针p指向了变量m的地址。一定要保证指针的类型与所指变量类型的一致。但是,指针变量里面存放的是地址,所以不能将一个整数赋给指针变量。利用地址运算符(&)可以将一个变量的地址赋予指针变量,此外,指针本身也可以直接赋值,但指
2023-03-09 10:58:54
2387
原创 指针的应用
一、 地址和指针1、地址:内存是以字节(B)为单位的储存空间,每个字符都有一个编号,而这个编号称为内存地址。定义的变量都是存放在内存中的,当使用时,则通过内存的编号找到所定义的空间位置。整型数据占有四个储存2、指针通过地址间接的访问里面的数据,而指针则是存放地址的一种变量,指针的值是存储单元的地址,而不是一个一般的数值,通过这个地址同样对变量进行访问。(1) 定义:指针里面放的是地址,指针变量的类型要和它内存地址指向的变量类型一致。一般形式为:类型关键字 *指针变量名;例如:i
2023-02-27 11:57:46
127
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人