![6a497046a9c35f9c0b1f352787466b6f.png](https://i-blog.csdnimg.cn/blog_migrate/4b84d5596378cb6ae26a8d3b1ab5aa1b.jpeg)
写在前面:
比较杂,比较乱,自己喜欢就好。
用的软件:CodeBlocks、DevC++。(用的C++语言)
CodeBlocks中的注释快捷键:
![4e20f5e979a3d8f97d929bf0daed8962.png](https://i-blog.csdnimg.cn/blog_migrate/5cfeab6b3706205bb70b6b3badcf7bd0.png)
CodeBlock 更改注释颜色:
![baa6cd954259be0f0ad9902165dd7ac6.png](https://i-blog.csdnimg.cn/blog_migrate/c92b1e1f9161db491acac02aa24bf092.jpeg)
C语言编程实例:
C语言编程实例c.biancheng.netADT:抽象数据类型,包含:数据对象、数据关系、基本操作。
(1)C语言中函数参数传递的三种方式
C语言中函数参数传递的三种方式_魏波-CSDN博客_函数参数传递blog.csdn.net![b3a6d00975944f44297bee972b5a8faa.png](https://i-blog.csdnimg.cn/blog_migrate/555d5dfd679ddbe7b78759532d81947e.png)
![24e10b31f4145cc97f2e07b294676745.png](https://i-blog.csdnimg.cn/blog_migrate/57553177719b92137d2810d547f9b764.jpeg)
![7c38324333af498a6221998b070310f9.png](https://i-blog.csdnimg.cn/blog_migrate/940a2b522196dc10ffccb12ee555649d.jpeg)
(2)cin的用法及清空输入缓冲区问题
cin的用法及清空输入缓冲区问题_zhao708981169的专栏-CSDN博客_cin清空缓冲区blog.csdn.net![166a9adbcd4f2a807bc4b22416434198.png](https://i-blog.csdnimg.cn/blog_migrate/4a2e70322b8f6b5e64829b23fddca394.png)
(3)Fibonacci(斐波拉契)数列
斐波那契数列编程C语言_时光若止的博客~Dale-CSDN博客_斐波那契数列c语言blog.csdn.net![a45622f3c2e07610710d4e735e7eb98b.png](https://i-blog.csdnimg.cn/blog_migrate/fe9d4530f592d1e4e9fd02852ee17833.jpeg)
![e40d07b9d4be8f5f3cbb83c5b67f2114.png](https://i-blog.csdnimg.cn/blog_migrate/70454ef5696313e599059df2db014cbd.png)
![83c435fff7e70c7b5a4f585a13a0fe77.png](https://i-blog.csdnimg.cn/blog_migrate/fa6023d43f3085997f8ab0dd68e8ec31.png)
(4)求数组的长度、申请空间
int len = sizeof(arr) / sizeof(arr[0]);
int *base = ( int * )malloc( sizeof(int) * 长度);
int *newbase = ( int * )realloc( sizeof(int) * 新长度);
(5)时间复杂度记录
***链表的插入、删除:O(n) P30页
![b7f3d9598b74eaebcb5e2e44d191196c.png](https://i-blog.csdnimg.cn/blog_migrate/49f1c07da8b30193d0a897b9726de15c.jpeg)
矩阵的转置:简单方法:O(nu*tu) 快速转置:O(nu+tu)
(6)八皇后问题-递归问题( 共有92种方法 )P57-栈
在国际象棋棋盘上(8*8)放置八个皇后,使得任意两个皇后之间不能在同一行,同一列,也不能位于同于对角线上。问共有多少种不同的方法,并且指出各种不同的放法。
![c70b254a3c30eae20adf4fba64464b3e.png](https://i-blog.csdnimg.cn/blog_migrate/9585d8df0348ead9885e8da44fb0008a.jpeg)
学习八皇后视频:
懒猫老师-C语言-递归函数-八皇后问题(搜索,回溯)_哔哩哔哩 (゜-゜)つロ 干杯~-bilibiliwww.bilibili.com![918b4ceefd413ef247bf4a5e92ce7b41.png](https://i-blog.csdnimg.cn/blog_migrate/2b765f48ca47f14f7ae4621cad7e95bc.jpeg)
(7)Hanoi汉洛塔(c语言实现)-递归问题 P57-栈
a、b、c三座塔,将n个从小到大(自上而下)的圆盘从a移动到c,移动期间小圆盘必须在大圆盘上面,问移动步骤。
汉诺塔(c语言实现)_xiaofeilong321的专栏-CSDN博客_汉诺塔c语言blog.csdn.net![062f5b0e02e60d53429f88bcc7327be1.png](https://i-blog.csdnimg.cn/blog_migrate/977b3c1d49302532f68aeaa460ffc673.png)
在线Hanoi小游戏:
汉诺塔小游戏www.hannuota.cn学习Hanoi视频:
懒猫老师-C语言-汉诺塔问题详解(hanoi)_哔哩哔哩 (゜-゜)つロ 干杯~-bilibiliwww.bilibili.com![f44d08e213c7147055f5ec06bdccce40.png](https://i-blog.csdnimg.cn/blog_migrate/6797830cc6604b6e7b6353652797046d.jpeg)
![51ed17ca5ddbe375dd8235482f0096d1.gif](https://i-blog.csdnimg.cn/blog_migrate/f6695434d76be26cf0a3804ab8def55a.gif)
![2ab68298a363e1c5e393d44e8dfa97a4.png](https://i-blog.csdnimg.cn/blog_migrate/6bf0391603c0f8fdb1c3c63704e087b7.jpeg)
![3137510a001aa228e5e205f50621f67a.png](https://i-blog.csdnimg.cn/blog_migrate/75a2f0ce9d27b074c01aba2dc3bec79d.png)
![018f512a5829da7d9193166994438b38.png](https://i-blog.csdnimg.cn/blog_migrate/b120b6726995e2e307d09b25fa70e020.png)
(8)栈(Last In First Out):LIFO先进后出
队列(First In First Out):FIFO先进先出(使用场景:层次遍历、树的广度优先搜索)
(9)【C++】数组讲解之字符数组和字符串
【C++】数组讲解之字符数组和字符串mp.weixin.qq.com![9a8f9fbffcf5e9d530135eb81ad037df.png](https://i-blog.csdnimg.cn/blog_migrate/42bac5838d711976c8859cf161331c31.png)
![3ecbbc0709a5300824b016c1445847a8.png](https://i-blog.csdnimg.cn/blog_migrate/26abd3391443e6b48d2198d45553f6f6.jpeg)
真题训练1:
![b987191299e112fc79e9151c258efc8a.png](https://i-blog.csdnimg.cn/blog_migrate/4d3a2d3fb96ec3df0407fb68fc80b8f3.jpeg)
![a347ab3be32bfe5764d557f6e20c0f06.png](https://i-blog.csdnimg.cn/blog_migrate/3f11194fe1b4c21f52d0699f88066f5f.png)
![e357ffbe0f1268354ce2de04dc43ebc9.png](https://i-blog.csdnimg.cn/blog_migrate/5cfb32dcd93518ccf93cb8e72e8df8a5.png)
第1章:绪论
1.数据结构(data structure)是相互之间存在一种或多种特定关系的数据元素的集合。(P5)
![e878a109c1a3ebaca22da93b878609a4.png](https://i-blog.csdnimg.cn/blog_migrate/e812c2e8ba75d3840231099b8d222496.jpeg)
2.抽象数据类型(Abstract Data Type,简称ADT)是指一个数学模型以及在该模型上的一组操作。(P7)
3.ADT的重要特征:数据抽象、数据封装。(P8)
![e5e37bbe5fcf887a6af900cfe98002da.png](https://i-blog.csdnimg.cn/blog_migrate/34f9b40eb0719f72ec6b697c8d09faf3.jpeg)
4.书中伪代码的提前约定(部分)P10
![3ca315c6d2428206f9c05590f7e63e7f.png](https://i-blog.csdnimg.cn/blog_migrate/18d660d1656a55e90b84b098df46e481.jpeg)
逻辑运算约定:【短路现象】
与运算&&:对于A&&B,当A值为0时,不再对B求值。
或运算||:对于A||B,当A的值为非0时,不再对B求值。
5.三元组(Triplet)的基本操作实现 (P12)
![94a3a34a456a77f5ff701df0a86752fa.png](https://i-blog.csdnimg.cn/blog_migrate/c3cf75fc2d3be1e47aaf1a98ce2e3d0d.png)
![d086611267402df7f57bb59fa986084f.png](https://i-blog.csdnimg.cn/blog_migrate/4e38d5341e2fcaec1bb5109ca59ee51d.png)
![dc91d157307abe56ece5f276579f6a63.png](https://i-blog.csdnimg.cn/blog_migrate/49e445000c739186e8ced2eda397a947.png)
6.算法的5个重要特性 (P13)
有穷性、确定性、可行性、输入、输出。
算法设计的要求:
正确性、可行性、健壮性、效率与低存储量需求。
7.时间复杂度、空间复杂度
时间复杂度和空间复杂度mp.weixin.qq.com![4680e466bdf37382f33cc2960a3c82ed.png](https://i-blog.csdnimg.cn/blog_migrate/60669c59976d38748bf880f64ba62a74.png)
第2章:线性表
1.线性表的定义 P18
![4db240c30510e635aabcf12a6c8da39d.png](https://i-blog.csdnimg.cn/blog_migrate/e0066b17ae1db19dbd201374e297c6e5.jpeg)
![0f6d953426e2e1b3116546227e0e5cb2.png](https://i-blog.csdnimg.cn/blog_migrate/3d1d4a104564629f54ce5850f4ee8edb.jpeg)
2.集合A∪B (P20)
![2359deaacdeafbbe95c174679c2fe657.png](https://i-blog.csdnimg.cn/blog_migrate/9f6300db134a236fb04e57e09ea28430.png)
3.归并La和Lb得到的新表Lc,Lc的数据元素也是按照非递减排序
![6b2290faab8ce29cb93b0f0079803b05.png](https://i-blog.csdnimg.cn/blog_migrate/c7e5ad70a0ae5060c0e5eee1c7e99c8f.png)
4.线性表的顺序表示和实现
(1)顺序表特点(P21)
①线性表的顺序表示,指的是用一组地址连续的存储单元依次存储线性表的数据元素。
②以元素在计算机内的“物理位置地址”相邻来表示线性表中数据元素之间的逻辑关系。
③对于顺序表的所有元素可以进行顺序/随机访问。
Loc(ai) = Loc(a1) + (i-1)*L;
④删除、插入元素需要移动大量元素。
*****由于数组类型也具有随机存取的特点,因此通常用数组来描述数据结构中的顺序存储结构。*****由于线性表的长度可变,则在C语言中可用动态分配的一维数组。
![32ea2a72ff7e66723b74e4c65cc4360e.png](https://i-blog.csdnimg.cn/blog_migrate/43026f202334a9ef65a6a48f40d3d146.png)
(2)构造函数:
![710b653e1dc0547563c51286ff2c32cb.png](https://i-blog.csdnimg.cn/blog_migrate/a425bdf86e893635174fdd9b0e36bd45.png)
(3)插入元素:考虑内存空间、边界条件的情况,返回数组长度
realloc函数的用法:
![070523d959c38fb69b29ec83f1acc47c.png](https://i-blog.csdnimg.cn/blog_migrate/3e735b0f0a5e963d342465e871bbc560.png)
![b6f9f81a5360176806e1866e5dff5929.png](https://i-blog.csdnimg.cn/blog_migrate/1ed599f8b7009049b315e311574b8646.jpeg)
(4)删除元素:并返回所删除的元素值
![c6c4ddc9861e44940f5ca0cdbd55c716.png](https://i-blog.csdnimg.cn/blog_migrate/f9458f9a53e53bf6342f5960d93f530c.png)
(5)顺序查找:返回在表中的位置
![d3d8b2d5ffa7beea26c0e4547135238a.png](https://i-blog.csdnimg.cn/blog_migrate/f1a7df472f7359a242fae3a1e4275a22.png)
(6)折半查找:
![fab3ab8e718840e25db2b15b9613c153.png](https://i-blog.csdnimg.cn/blog_migrate/7f726d1c7281f4c34b3eb1f310ca4c73.png)
5.线性表的链式表示和实现
***顺序表比链式表存储密度更高。***
(1)链表特点(P27)
①用一组任意的存储单元存储线性表的数据元素(这组存储单元可以是连续的,也可以是不连续的)。
结点(node):包括两个域,其中存储数据元素信息的域称为数据域;存储直接后继位置的域称为指针域。
②数据元素之间的逻辑关系是由结点中的指针指示的。
③单链表是非随机存取的存储结构。
④删除、插入元素不需要移动大量元素。
![e8b4da7f830ce4311278b0912c9605d6.png](https://i-blog.csdnimg.cn/blog_migrate/af8c1e65ca9fd85687f0ede923a5bbed.png)
![8665c9a3eb9110799e0a68c63790d68a.png](https://i-blog.csdnimg.cn/blog_migrate/de45f939af12257b66cca4a70cd8beef.jpeg)
(2)构造函数(头插法、尾插法)
![ac414949401c8a2f6e41939fb9b23c57.png](https://i-blog.csdnimg.cn/blog_migrate/a6f7887a60de9477a4ad07a9431fc353.png)
![da0c57f2d81a8c11114ba113311899ff.png](https://i-blog.csdnimg.cn/blog_migrate/0a745b681f5a26e79c1ce7ff48ccea56.jpeg)
头插法:
![7925d1c4b4c8a26b9a3cb006c080998c.png](https://i-blog.csdnimg.cn/blog_migrate/e2f83db09fed3c26ba70cfcd605b0fcf.png)
![c198a64ed60d5b2e80e0f852467bdab7.png](https://i-blog.csdnimg.cn/blog_migrate/1dd884e18e1d0160d864f51c932e04ea.jpeg)
尾插法:
![826dca2aa91f6eb61c12f0036871769a.png](https://i-blog.csdnimg.cn/blog_migrate/010581a5f60f4319ed52127c86b257d0.jpeg)
(3)查找元素
![63935a00a8d4d58fb8041f1ae8aa86c3.png](https://i-blog.csdnimg.cn/blog_migrate/0f27517bf83f3fb78e0bc935c0e5f29f.png)
(4)插入元素
![6d48bdb967f33697fe6e0f008a876278.png](https://i-blog.csdnimg.cn/blog_migrate/a97e3a59f1e0546c6282cb5d8316f3f2.png)
(5)删除元素
![9378c66a45ee1576932229a44fa8d387.png](https://i-blog.csdnimg.cn/blog_migrate/d5e24d5d8bea1f24a19df6a189553dcc.png)
(6)归并两个单链表
![0120082828c4c09333d48e9200bae13b.png](https://i-blog.csdnimg.cn/blog_migrate/9bedccdfab3688aa3f378abf39ec3cb8.png)
6.循环链表、双向链表(P35)
循环链表(约瑟夫环)的建立及C语言实现:
循环链表(约瑟夫环)的建立及C语言实现c.biancheng.net![d37e3fce072c3cc04743c3c4af68f33e.png](https://i-blog.csdnimg.cn/blog_migrate/2bde9d4852690211973f3c8fadf0e1db.jpeg)
链表(单向、双向、单向循环、双向循环)学习过程总结:
链表(单向、双向、单向循环、双向循环)学习过程总结--有源代码、注释和示意图_菜鸟学C/C++-CSDN博客_单向循环链表blog.csdn.net![36f5dc99a98c89ad4eb1cd604da2f8f7.png](https://i-blog.csdnimg.cn/blog_migrate/e5dedf90d6f71b19c1a574ccf2f3c8a6.png)
第2章:栈和队列
栈和队列是两种重要的线性结构。从数据结构角度看,栈和队列也是线性表,其特殊性在于栈和队列的基本操作是线性表操作的子集,它们是操作受限的线性表。因此,可以称为限定性的数据结构。
1.栈的定义
![c45dad26ebb2586214fdece3bf6aef60.png](https://i-blog.csdnimg.cn/blog_migrate/07e5b72936dc15852e789cf993d8286a.jpeg)
![3afdc7ce20c866a58c0dfc6eda5b161f.png](https://i-blog.csdnimg.cn/blog_migrate/444c7588e1d4720fc9c776de2394bb01.jpeg)
2.顺序栈
![618792db7e2e89e33d70eb64fd1473c3.png](https://i-blog.csdnimg.cn/blog_migrate/f11432c6a1b7a709a8afbe1f7510d056.png)
![0f61a8f2eed25dfa1d201a0be90586e9.png](https://i-blog.csdnimg.cn/blog_migrate/27690c89d16d7d13e714bb05178ca3cc.jpeg)
![0340baf0699d948c3851f4e8f877ecdb.png](https://i-blog.csdnimg.cn/blog_migrate/920b276a078883aa45547a8ff8515080.png)
3.链式栈:
![7566aaab2b7500919fda3ca3a5b8ef54.png](https://i-blog.csdnimg.cn/blog_migrate/bb18073f6d8161191954b7f591520abc.png)
![8b272516074dd8b78e9ca7c222fbf242.png](https://i-blog.csdnimg.cn/blog_migrate/c5e4040d9f03801a83335942599020b0.png)
4.链式队列
FIFO:先进先出。允许插入的是队尾(rear),允许删除的是队头(front)。
有头结点,链式队列的判空条件是:头指针、尾指针均指向头结点。
![fa1d2fcc9cd37e94926dbb04b6a4defa.png](https://i-blog.csdnimg.cn/blog_migrate/ccc0888873ef36426b9112cabd89aad7.jpeg)
![ba1b1a8d662f877a998da3720bf2ba5d.png](https://i-blog.csdnimg.cn/blog_migrate/8386f30c26c05c79c0cd794cca92333b.png)
![63414a0e28ded844c08ae444a44b0588.png](https://i-blog.csdnimg.cn/blog_migrate/d489eac0bae100c56cfa1fac41e589a9.png)
![1ed45fa8b707f66735566a8805c87078.png](https://i-blog.csdnimg.cn/blog_migrate/55f13c3d117523028561df4cc45a3394.png)
![ff5b1f45e334467d7f8891d1c5174ba2.png](https://i-blog.csdnimg.cn/blog_migrate/949d68c9cfd291afc0549c7ceb6b4c4f.png)
5.循环队列-队列的顺序表示和实现
在C语言种不能用动态分配的以为数组来实现循环队列。
![a2939d99fd1d78a1d8bd0c0e6e89297c.png](https://i-blog.csdnimg.cn/blog_migrate/9452361f2b5d0392d565cf7b68f8e1fd.jpeg)
![c9c6caf9371dfd04bfd2e904ba5dd814.png](https://i-blog.csdnimg.cn/blog_migrate/d40c5794af707105bc604916bac0169b.jpeg)
![21dcc727c3d3298ddfe2bf5c3da31c36.png](https://i-blog.csdnimg.cn/blog_migrate/e32d87be54e3ff3c4ed63515e10a585c.png)
![9b4b928b4cf695815bed7cf1b4aa6639.png](https://i-blog.csdnimg.cn/blog_migrate/da6cb2bce72b43d44ea6e67729b19e56.png)
![b2ec186e23841a380a5e5b072f895106.png](https://i-blog.csdnimg.cn/blog_migrate/77ce0967a45ddad265e839e5099a4305.png)
第4章:串
![9975f59a06f3cdddfe99b7377292de8f.png](https://i-blog.csdnimg.cn/blog_migrate/59d6b7f5365168168e3cb9dc4c6d10d0.png)
![34c3a2ace6d312ef9f74ff93e71f12c4.png](https://i-blog.csdnimg.cn/blog_migrate/308968607ee073964b5ba7f8901ec5fc.jpeg)
![d35c145d4647cc8a3dae815b324f44d5.png](https://i-blog.csdnimg.cn/blog_migrate/96b06717cb2a156c1b079061d0f12630.jpeg)
定长顺序表示:
https://www.cnblogs.com/cpoint/p/3479557.htmlwww.cnblogs.com1.堆分配存储表示(动态分配内存)P75
![14a05608d9e0e61a8f2dc1646ebeea6c.png](https://i-blog.csdnimg.cn/blog_migrate/caa978e9dbb55b0cecde95d268af11e8.png)
![112e6382ba2bbc3c0dc0aa8588fd0ad0.png](https://i-blog.csdnimg.cn/blog_migrate/d6a2ee5bfa27ebbb5cabd8bf5cf48783.png)
![e03b9bb957cf795c179111abf3e5957b.png](https://i-blog.csdnimg.cn/blog_migrate/ecba3961c54320baf13d32422c6ba9b7.png)
![6d144c5c01006d9c475de8cbc6ea4841.png](https://i-blog.csdnimg.cn/blog_migrate/bbecd8802d3245102533a0e4e5f78df6.png)
***模式匹配Brute-Force算法(BF算法)
比较次数:(n-m+1)*m (轮数*每轮比较次数)
时间复杂度:O(n*m)
![7b20351ebb9b108326015a3bed7f8f3e.png](https://i-blog.csdnimg.cn/blog_migrate/096d235a969e2642553609c0ac054f55.png)
![8388b4e42dcb0e290ebb2a4e22ce87fc.png](https://i-blog.csdnimg.cn/blog_migrate/f09824ac9b1b3b63385eb903e06b5223.png)
![5e50062902c8ce1196aa9ba23605c92c.png](https://i-blog.csdnimg.cn/blog_migrate/731dc46cc8aaf4c6cc8a851879c13ea8.jpeg)
第5章:数组和广义表
1.数组的定义
(1)和线性表一样,所有的数据元素都必须是同一种数据类型。
(2)数组一旦被定义,他的维数和维界就不再改变。因此,除了结构的初始化和销毁之外,数组就只有存取元素和修改元素值的操作。是顺序存储结构、随机存储结构(存取数组中任意元素的时间相等)。
(3)二维数组是非线性结构。(有两个直接前驱和直接后继)
(4)二维数组也是顺序存储结构。(一片连续的一维数组存储空间)。
二维数组有两种存储方式:行优先顺序存储(低下标优先)、列优先顺序存储(高下标优先)。
2.矩阵的压缩存储
(1)矩阵都是非线性存储结构。
(2)压缩存储是指:对多个值相同的元分配一个存储空间;对零元不分配空间。
(3)假如相同的元或者零元素在矩阵中的分布有一定规律,则我们称此类矩阵为特殊矩阵;反之为稀疏矩阵(矩阵阶数很大,非零元个数<零元个数,且分布没有规律)。
*****特殊矩阵*****
对称矩阵、下(上)三角矩阵、对角矩阵
![5c54c34f4949415a47f43a89684b955c.png](https://i-blog.csdnimg.cn/blog_migrate/c6e4cc1ce8002bfc84683a6f65ab40b3.jpeg)
![d2ab22df7d25f10431d14a97eff47033.png](https://i-blog.csdnimg.cn/blog_migrate/7f05864ab30bf2bdeacb6b9b58b2d45b.jpeg)
![6d9e145fbcf33e58e0737e563b1d9ddd.png](https://i-blog.csdnimg.cn/blog_migrate/b13a97ef989221d30814e572a8dc59c9.jpeg)
*****稀疏矩阵*****创建、打印、转置矩阵
两个稀疏矩阵相乘的乘积不一定是稀疏矩阵。
![2fe05a0edb7615a2939b59f3bf650eee.png](https://i-blog.csdnimg.cn/blog_migrate/9f496c5fd77778d200d32b4b9ca7c113.jpeg)
![9aa334faacdc21ae6d2f6c1ec175aa8e.png](https://i-blog.csdnimg.cn/blog_migrate/4e2b18e2130004eeb7637ce07eb1c71e.jpeg)
![b3c3b2f70a5c22c1ab3a9739cf7f2931.png](https://i-blog.csdnimg.cn/blog_migrate/d9eea48f937475a4197107afe3e059bf.png)
![4ccdda799174922992ffcf44791199a6.png](https://i-blog.csdnimg.cn/blog_migrate/be6c94cbdea9137d9f136f7bd2cab724.png)
![3b94f39322690a132cee3d70ef4d5f34.png](https://i-blog.csdnimg.cn/blog_migrate/04c70a254d902cbdb888252d7c8c8705.png)
*****十字链表创建、打印稀疏矩阵*****
![678d5ba2f7516fe27ecb856c87ddf0a4.png](https://i-blog.csdnimg.cn/blog_migrate/039e286d51169afd2b9f43fe46c0453e.png)
![4f7159afcabfcfdbeb5fb4b8b51b0708.png](https://i-blog.csdnimg.cn/blog_migrate/673bd7dd3aa5d8a4139a72c0cf90c6b1.jpeg)
![b0e7deb5d518c4b32123803ff62adcb6.png](https://i-blog.csdnimg.cn/blog_migrate/7bdaaf5eab8dcadff97a32a1b141cc0f.jpeg)
![e9fa0ba2401e5106d96305bd817738b4.png](https://i-blog.csdnimg.cn/blog_migrate/a7da35ed4a8b70c83a4ba5e2dfd2323f.png)
3.广义表
![9afd938950aaf5fcf1430d1c4e3ef587.png](https://i-blog.csdnimg.cn/blog_migrate/6ad2125621d0b64a6f340548fa6fe80e.jpeg)
第6章:树和二叉树
(1)树结构的定义是一个递归的定义。
(2)树型结构是一类最重要的非线性数据结构。(遗传图谱等)
(3)树、森林、二叉树是3中不同的结构,谁都不是谁的特殊。
(4)树型结构中元素之间存在一对多的关系(多个分支)。
![9ce650e0a17cbc84c30d6f130895a7ee.png](https://i-blog.csdnimg.cn/blog_migrate/9f3940a4529d21da6fa4fd126a6467aa.jpeg)
![6a918af582409ee63ccfc23af6cef9f9.png](https://i-blog.csdnimg.cn/blog_migrate/2c46c8481cffc045be94017af0db6931.jpeg)
![fce33089554f92bcfaa878bf8b20e644.png](https://i-blog.csdnimg.cn/blog_migrate/11d4e79787757c529d291f6a5a51366e.jpeg)
森林(Forest)是m(m≥0)棵互不相交的树的集合。对树中每个结点而言,其子树的集合即为森林。由此,也可以森林和树相互递归的定义来描述树。
1.二叉树(重点)
二叉树(Binary Tree)是另一种树型结构,它的特点是每个结点至多只有两颗子树(即二叉树中不存在度大于2的结点),并且,二叉树的子树有左右之分,其次序是不能任意颠倒。
二叉树是有序树。
![9d9d76555edabe095a03908dad60739c.png](https://i-blog.csdnimg.cn/blog_migrate/b55248577df23ecc8c5d7aacc1619cad.jpeg)
二叉树的性质:
(1)在二叉树的第i层上至多有2^(i-1)个结点(i≥1)。
(2)深度为k的二叉树至多有2^k - 1个结点(k≥1)。
(3)对于任何一棵二叉树T,如果其终端结点数为n0,度为2的结点数为n2,v则n0=n2+1。
满二叉树和完全二叉树:
![49793e53ae38873fef2243c0340da65f.png](https://i-blog.csdnimg.cn/blog_migrate/11d90f7f5b38f1e4fb23307ce1cb2f20.jpeg)
![87758104227270ef1dea8de84125774a.png](https://i-blog.csdnimg.cn/blog_migrate/2c36cb47c1f6d34b67a44424e9fa04bf.jpeg)
完全二叉树的性质:
![9f4fc1cf41227c8ca67c945ae8a2cebf.png](https://i-blog.csdnimg.cn/blog_migrate/32a93030f6fbca794ae508c9575853bd.jpeg)
补充:
(2)……是结点2i。
(3)如果2i+1>n,则结点i无右孩子;否则其右孩子RCHILD(i)是结点2i+1。
2.二叉树的存储结构
顺序存储结构:
![cdae3080f2afec7f6e649560aa4ef6a3.png](https://i-blog.csdnimg.cn/blog_migrate/e47550de1bbd9d3b6fe0d7c26761dca0.jpeg)
链式存储结构:
![a1c5556753445987caf9f978cdd2e71b.png](https://i-blog.csdnimg.cn/blog_migrate/95ef6ddf05fc83f9bcd55df679468870.jpeg)
![ab6b0145419178589c07b7047edee558.png](https://i-blog.csdnimg.cn/blog_migrate/c006004c2a46736605ead5a75a858f0f.jpeg)
3.遍历二叉树何线索二叉树
![173ca62c92e27ae2562b6a85ed529521.png](https://i-blog.csdnimg.cn/blog_migrate/84aacec5641f35f41031b16ec8fe78b9.jpeg)