C语言公共基础知识讲解
- 格式:doc
- 大小:308.00 KB
- 文档页数:16
公共基础知识总结第一章数据结构与算法1.1算法1.2数据结构的基本基本概念(1)数据集合中各数据元素之间所固有的逻辑关系,即数据的逻辑结构;(2)在对数据进行处理时,各数据元素在计算机中的存储关系,即数据的存储结构;线性结构条件:(1)有且只有一个根结点;(2)每一个结点最多有一个前件,也最多有一个后件。
非线性结构:不满足线性结构条件的数据结构。
1. 3线性表及其顺序存储结构线性表是由一组数据元素构成,数据元素的位置只取决于自己的序号,元素之间的相对位置是线性的。
线性表的顺序存储结构具有以下两个基本特点:(1)线性表中所有元素的所占的存储空间是连续的;(2)线性表中各数据元素在存储空间中是按逻辑顺序依次存放的。
1. 4栈和队列栈是限定在一端进行插入与删除的线性表。
1、先进后出FILO;1、支持子程序调用;2、具有记忆功能;3、可以不用顺序存放数据;4、只能够在top首部进行操作,bottom是绝对不动的;5、栈的存放数据的个数为num = (bottom - top ) +1 ;队列是指允许在一端(队尾)进入插入,而在另一端(队头)进行删除的线性表。
1、R ear指针指向队尾,front指针指向队头。
3、先进先出FIFO,或者是后进后出LILO2、循环队列里面的个数计算方法:A、rear > front 的时候,num = rear - front ;B、rear < front 的时候,num = rear + n —front ;1. 5线性链表在链式存储结构中,存储数据结构的存储空间可以不连续,各数据结点的存储顺序与数据元素之间的逻辑关系可以不一致,而数据元素之间的逻辑关系是由指针域来确定的。
链式存储方式即可用于表示线性结构,也可用于表示非线性结构。
1. 6树与二叉树在树结构中,一个结点所拥有的后件的个数称为该结点的度,所有结点中最大的度称为树的度。
树的最大层次称为树的深度。
二叉树的特点:(1)非空二叉树只有一个根结点;(2)每一个结点最多有两棵子树,且分别称为该结点的左子树与右子树。
第一部分公共基础部分知识归纳数据结构与算法算法———是一组严谨地定义运算顺序的规则算法的基本要素———一是对数据对象的运算和操作,二是算法的控制结构算法设计基本方法———列举法、归纳法、递推、递归、减半递推算法的复杂度---包括时间复杂度和空间复杂度时间复杂度——-执行算法所需的计算工作量空间复杂度-—-执行算法所需的内存空间数据结构———相互有关联的数据元素的集合。
如春、夏、秋、冬;18、11、35、23、16.。
;父亲、儿子、女儿等都是数据元素。
前件-——数据元素之间的关系,如父亲是儿子和女儿的前件后件-——如儿子是父亲的后件结构-——指数据元素之间的前后件关系数据的逻辑结构-是指反映数据元素之间逻辑关系,而与它们在计算机中的存储位置无关数据的存储结构(物理结构)--—数据的逻辑结构在计算机存储空间中的存放形式,数据元素在计算机存储空间的位置关系可能与逻辑关系不同。
根据数据结构中各数据元素之间前后件关系的复杂程度,可将数据结构分两类———线性结构与非线性结构线性结构(线性表)———满足下列两个条件(1)有且只有一个根结点(2)每一个结点最多有一个前件和后件。
则称该数据结构为线性结构,否则为非线性结构。
线性表是最简单、最常用的一种数据结构,其数据元素之间的相对位置是线性的,其存储方式为顺序存储的,如数组栈———是限定在一端进行插入与删除的线性表,一端封闭,另一端开口,其操作原则是“先进后出”,栈的运算有入栈、退栈、读栈顶元素队列——-是指在一端进行插入(称为队尾)而在另一端进行删除(称为队头)的线性表,其操作规则是“先进先出",其运算有入队和退队.树—--是一种简单的非线性结构,而且是层次结构,是倒立的大树,有根结点、父结点、子结点、叶子结点.根结点在第一层,一个结点所拥有的后件的个数称为该结点的度,所有结点中最大的度称为树的度,树的最大层次称为树的深度。
二叉树-—-(1)非空二叉树只有一个根结点(2)每一个结点最多有两棵子树(左子树和右子树),其存储结构为链式。
C语言公共基础知识部分整合1.在最坏情况下,冒泡排序和简单插入排序、快速排序的比较次数均为n(n-1)/2.2.影响模块之间耦合的主要因素有两个:一是模块之间的连接形式,二是模块接口的复杂性。
接口复杂的模块,耦合程度高。
耦合程度弱的模块,内聚程度高.3.数据库概念设计中由分散到集中的设计方法是:视图集成设计.4.结构化分析方法中,数据字典(是结构化分析方法的核心)的作用是:描述系统中所用到的全部数据和文件的有关信息.5.投影、选择、连接是从二维表的列的方向来进行运算的。
6.数据处理的最小单位是:数据项.若干数据项组合成数据元素.7.进行字符数组赋值时注意给字符串赋值时要加上串接标志。
8.程序流程图中带有箭头的线段表示的是:控制流.矩形表示加工、菱形表示逻辑条件。
9.结构化程序设计的原则有:自顶向上、逐步求精、模块化、限制使用goto语句.10.软件设计中应遵循的原则是:高内聚低耦合.(划分模块独立性就是要求模块间的联系不紧密,故需要高内聚、低耦合)11.算法(特征:可行性、确定性、有穷性、有足够的情报)的有穷性是指:算法程序的运行时间是有限的.(能在有限个步骤后终止)12.将E-R图转化成关系数据模型的过程属于逻辑设计阶段实体以及实体间的联系都是用关系表示的,关系模型中数据的逻辑结构是一张二维表。
13.C语言的注释可以出现在程序的任何位置,一行可以写多个语句,不用语句之间用逗号隔开,程序可以放在多个文件中。
14.两个计算公式:二叉树第i(i>1)层上至多有2^(i-1)个结点,循环队列:队列元素数为|rear-front|15.在软件开发阶段,包括系统设计(概要设计)、详细设计、实现和测试。
16.白盒测试法的原则:至少执行一次模块中每一独立模块。
每一循环都在边界条件下执行一次。
所有判断的每一分支至少执行一次。
黑盒测试:执行边界条件下的所有接口。
17.软件是一种逻辑实体,不是自然界的有形物体。
第一章数据结构与算法1.算法的基本特征:可行性,确定性,有穷性,拥有足够的情报。
2.算法的有穷性是指算法程序的运行时间是有限的。
3.算法的时间复杂度:执行算法所需要的计算工作量(基本运算次数)。
算法的空间复杂度:这个算法所需要的内存空间。
两者之间没有必然直接的联系4.程序执行的效率与数据的存储结构、数据的逻辑结构、程序的控制结构、所处理的数据量等有关。
5.线性结构的两大条件:有且只有一个根节点;每一个结点最多只有一个前件,也最多有一个后件。
6.线性表的顺序存储结构具备如下两个基本特征:(1)线性表中的所有元素所占的存储空间是连续的;(2)线性表中各数据元素在存储空间中是按逻辑顺序依次存放的。
7.栈是先进后出的线性表。
8.队列是先进先出的线性表。
9.栈和队列都是线性结构。
10.栈顶元素总是后被插入的元素,从而也是最先被删除的元素;栈底元素总是最先被插入的元素,从而也是最后才能被删除的元素。
11.循环队列中元素的个数是由队头指针和队尾指针共同决定。
12.树是简单的非线性结构,所以二叉树作为树的一种也是一种非线性结构。
13.循环队列中的元素个数随队头指针与队尾指针的变化而动态变化。
14.由于入队时尾指针向前追赶头指针,出队时头指针向前追赶尾指针,故队空和队满时,头尾指针均相等。
15.在栈中,栈底指针不变,栈中元素随栈顶指针的变化而动态变化。
16.循环队列是队列的一种顺序存储结构。
17.循环链表和双向链表都是线性结构。
18.线性链表中数据的插入和删除都不需要移动表中的元素,只需改变结点的指针域即可。
19.线性链表中的各数据结点的存储空间可以不连续,各数据元素的存储顺序与逻辑顺序可以不一致。
20.链式存储结构既可以针对线性结构也可以针对非线性结构。
21.顺序存储结构的存储一定是连续的,链式存储结构的存储空间不一定是连续的。
22.线性表(线性结构)的链式存储结构所需要的存储空间一般要多于顺序存储结构。
23.栈支持子程序调用。
第一周int定义整型变量所有字母都要先定义再使用。
算法:描述完成任务的步骤序列。
算法的三个基本结构:顺序、分支、循环。
算法的表示:自然语言、程序流图、N-S图程序流图中判定框用菱形,开始结束用圆角矩形,赋值用矩形。
main:主函数,后面一定是英文输入法下的()int:定义“整形变量”printf:输出语句scanf:输入语句%:占位符一个占位符就是占据一个字符的位置,格式化输出时显示为个空格.具体用法如下:%a,%A读入一个浮点值(仅C99有效)%c读入一个字符%d读入十进制整数%i读入十进制,八进制,十六进制整数%o读入八进制整数%x,%X读入十六进制整数%s读入一个字符串,遇空格、制表符或换行符结束。
%f, %F, %e, %E, %g, %G用來输入实数,可以用小数形式或指数形式输入。
%P读入一个指针%u读入一个无符号十进制整数%n至此己读入值的等价字符数%[]扫描字符集合%%读%符号(c此内容来自baidu)&:“取地址”运算符:这个运算发可以这样理解,比如说&a的含义就是a在内存中的地址。
因为&运算符能够取出一个变量在内存中的地址,所以叫做取地址运算符。
输入语句scanf ("%d %d", &a, &b); 输出语句printf c);输出内容由“”引出注意一个;就是一个语句,每句话后都要有分号,不能丢。
括号是英文的,一个程序主要由顺序分支循环3种结构构成{ }不能忘,限制变量作用范围进入CodeBlocks之后新建一个项目,在project选项中选择控制台应用程序Console application 1S彳亍编写。
输入语句scanf和输出语句printf中的"f ”指的是format格式。
程序编写完成后点击Build ---- Build and run或F9进行运行,并可点击Vie ---- log看到编程日志,检查错误。
c语言公共基础知识c语言公共基础知识c语言是一门计算机语言,有很多不同的分类,让我们看看c语言公共基础知识有哪些吧!一、基本数据结构与算法1. 算法的基本概念;算法复杂度的概念和意义(时间复杂度与空间复杂度)。
2. 数据结构的定义;数据的逻辑结构与存储结构;数据结构的图形表示;线性结构与非线性结构的概念。
3. 线性表的定义;线性表的顺序存储结构及其插入与删除运算。
4. 栈和队列的定义;栈和队列的顺序存储结构及其基本运算。
5. 线性单链表、双向链表与循环链表的结构及其基本运算。
6. 树的基本概念;二叉树的定义及其存储结构;二叉树的前序、中序和后序遍历。
7. 顺序查找与二分法查找算法;基本排序算法(交换类排序,选择类排序,插入类排序)。
二、程序设计基础1. 程序设计方法与风格。
2. 结构化程序设计。
3. 面向对象的`程序设计方法,对象,方法,属性及继承与多态性。
三、软件工程基础1. 软件工程基本概念,软件生命周戎概念,软件工具与软件开发环境。
2. 结构化分析方法,数据流图,数据字典,软件需求规格说明书。
3. 结构化设计方法,总体设计与详细设计。
4. 软件测试的方法,白盒测试与黑盒测试,测试用例设计,软件测试的实施,单元测试、集成测试和系统测试。
5. 程序的调试,静态调试与动态调试。
四、数据库设计基础1. 数据库的基本概念:数据库,数据库管理系统,数据库系统。
2. 数据模型,实体联系模型及E-R图,从E-R图导出关系数据模型。
3. 关系代数运算,包括集合运算及选择、投影、连接运算,数据库规范化理论。
4. 数据库设计方法和步骤:需求分析、概念设计、逻辑设计和物理设计的相关策略。
【c语言公共基础知识】。
C语言基础必须掌握的知识点C语言是一种通用的高级计算机编程语言,是学习其他编程语言的基础。
掌握C语言基础知识对于提升编程水平和解决实际问题非常重要。
本文将介绍C语言基础必须掌握的知识点。
1.基本语法:了解C语言的基本语法,包括标识符、关键字、注释、数据类型、变量、常量、运算符、表达式、语句、循环和条件语句等。
2.数据类型:掌握C语言中的基本数据类型,包括整型、浮点型、字符型和指针等。
了解它们的存储大小和范围,以及它们之间的转换。
3. 输入输出:了解C语言中的输入输出函数,包括scanf和printf 等。
掌握格式化输入输出的用法,以及如何进行输入和输出的格式控制。
4.数组:了解数组的概念和用法,包括一维数组和多维数组。
掌握数组的声明、初始化、访问和遍历等操作,以及数组和指针之间的关系。
5. 字符串:了解C语言中的字符串类型和常用的字符串处理函数,包括strlen、strcpy、strcat和strcmp等。
掌握字符串的输入和输出方法,以及字符串的常见操作。
6.函数:了解函数的概念和用法,包括函数的声明、定义、调用和返回值等。
掌握函数的参数传递方式,包括值传递和引用传递。
了解递归函数的原理和应用。
7.结构体:了解结构体的概念和用法,包括结构体的定义、访问和操作等。
掌握结构体数组和指针的使用,以及结构体和函数之间的关系。
8.文件操作:了解C语言中的文件操作函数,包括文件的打开、关闭、读取和写入等。
掌握文本文件和二进制文件的读写方法,以及文件指针的使用。
9. 动态内存管理:了解动态内存分配的原理和方法,包括malloc、calloc和realloc等函数的使用。
掌握内存的申请、释放和管理,防止内存泄漏和内存溢出。
10.指针:掌握指针的概念和用法,包括指针的声明、初始化、访问和操作等。
了解指针和数组、指针和函数之间的关系,以及指针的高级应用,如指向指针的指针和指针的运算。
11. 预处理器:了解C语言中的预处理器指令和宏定义,包括#include、#define和#ifdef等。
C语⾔各章节知识点总结第⼀部分“C语⾔基础知识”知识点1、C程序的基本结构C程序是由函数构成的。
每个程序由⼀个或多个函数组成,其中必须有且仅有⼀个主函数main( )。
main函数是⼀个可执⾏C语⾔程序的⼊⼝和正常出⼝,⽽不论其在整个程序中书写的位置如何。
在C语⾔中,⼤⼩写字母是有区别的。
(例如习惯使⽤⼩写字母定义变量,⽤⼤写字母定义常量)。
C程序的注释有两种⽅法,⼀种是⾏注释,使⽤“//”;另外⼀种是块注释,使⽤“/* */”,注意“/*”与“*/”不能嵌套使⽤。
C语⾔书写较为灵活,但是提倡采⽤缩进格式进⾏程序书写,以体现语句之间的层次感。
C程序每条语句以“分号”作为结束标志。
以下⼏种情况不得使⽤分号:(1)所定义的函数名称后不得使⽤分号;(2) if…else…语句是⼀个整体,中间不能使⽤分号将其分隔开;(3)预编译命令后不能使⽤分号。
2、C程序开发步骤C语⾔在计算机上的开发过程主要由以下四个步骤组成:第⼀步:编辑。
⽣成后缀名为“.c”的源⽂件第⼆步:编译。
⽣成后缀名为“.obj”的⽬标⽂件第三步:连接。
⽣成后缀名为“.exe”的可执⾏⽂件第四步:运⾏。
3、VC++6.0开发⼯具的使⽤按下功能键Ctrl+F7编译程序;按下功能键F7连接程序;按下功能键Ctrl+F5运⾏程序;若程序在编译和连接过程中有语法错误,则按下功能键F4定位错误所在⾏并根据错误提⽰信息改正错误(原则是先解决error,再解决warning)。
4、C语⾔中标识符的命名规则标识符由字母、数字、下划线组成;规定第⼀个字符必须为字母或下划线。
标识符定义的变量名、函数名、常量名等最好做到“见名知义”;⼤⼩写代表不同含义;不能使⽤关键字;最好不要与C语⾔的库函数同名。
5、C语⾔的数据类型C语⾔的数据类型由基本类型和复杂类型构成。
其中基本数据类型包括字符型(char)、整型(int,short,long)、实型(float,double);复杂数据类型包括指针类型、数组、结构体、联合体。
第一章数据结构与算法1.1 算法1.1.1算法:是指解题方案的准确而完整的描述。
规定了解决某类问题所需的操作语句以及执行顺序使其能通过有限的指令语句,在一定时间内解决问题算法不等于程序,也不等计算机方法,程序的编制不可能优于算法的设计。
算法的基本特征:是一组严谨地定义运算顺序的规则,每一个规则都是有效的,是明确的,此顺序将在有限的次数下终止。
1.算法特征包括:(1)可行性;(2)确定性,算法中每一步骤都必须有明确定义,不允许有模棱两可的解释,不允许有多义性;(3)有穷性,算法必须能在有限的时间内做完,即能在执行有限的步骤后终止,包括合理的执行时间的含义;(4)拥有足够的情报。
2.算法的基本要素:一是对数据对象的运算和操作;二是算法的控制结构通常,计算机可以以执行的基本操作是以指令的形式描述的。
一个计算机系统能执行的所有指令的集合,称为计算机系统的指令系统。
(1)计算机系统中的基本运算和操作包括:算术运算+ - * /逻辑运算not and or关系运算< > ! =数据传输赋值输入与输出(2)算法的控制结构:顺序结构、选择结构、循环结构。
3.算法基本设计方法:列举法(列举所有解决方案)归纳法(特殊→一般)递推(已知→未知)递归(逐层分解)减半递推“减半”是指将问题的规模减半,而问题的性质不为,所谓“递推”是指重复“减半”的过程回溯法找出一个解决问题的线索,然后沿着这个线索逐步多次“探、试”1.1.2算法复杂度算法时间复杂度和算法空间复杂度(一个算法所要付出的代价)是衡理算法好坏的。
1.算法时间复杂度算法时间复杂度是指执行算法所需要的计算工作量。
(既算法的运算次数)含义:算法执行过程中所需要的基本运算次数影响计算工作量的主要因素:一、基本运算次数二、问题与规模2.算法空间复杂度是指执行这个算法所需要的内存空间。
一个算法所用的内存空间包括:1、算法程序所占的空间2、输入的初始数据所占的存储空间3、算法执行过程中的额外空间1.2 数据结构的基本基本概念数据:在计算机科学中指所有能输入到计算机中的并被计算机程序处理的符号的总称数据元素:数据的基本单位,在计算机程序中通常作为一个整体进行考虑和处理。
数据结构:是相互之间存在一种或多种特定关系的数据元素的集合数据结构研究的三个方面:(1)数据集合中各数据元素之间所固有的逻辑关系,即数据的逻辑结构;(2)在对数据进行处理时,各数据元素在计算机中的存储关系,即数据的存储结构;(3)对各种数据结构进行的运算。
数据结构是指相互有关联的数据元素的集合。
即:一般来说,人们不会同时处理特征完全不同且互相之间没有任何关系的各类数据元素,对于具有不同特征的数据元素总是分别进行处理。
1.数据的逻辑结构包含:(1)表示数据元素的信息;(2)表示各数据元素之间的前后件关系。
其中数据元素之间的前后件关系是指它们的逻辑关系,与它们在计算机中的存储位置无关。
2.数据的存储结构:P12一个数据结构中的各数据元素在计算机存储空间中的位置关系与逻辑关系有可能不同数据的存储结构指数据的逻辑结构在计算机存储空间中的存放形式。
由于数据元素在计算机存储空间中的位置关系可能与逻辑关系不同,因此,为了表示存放在计算机存储空间中的各元素之间的逻辑关系(即前后件关系),在数据存储结构中,不仅要存储各数据元素的信息,还需要存放各数据元素之间的前后件关系的信息。
逻辑结构与物理结构的关系A.一种逻辑结构可以用不同的物理结构来实现B..逻辑结构决定了算法的设计C.物理结构决定了算法的实现1.2.2 数据结构的图形表示:1.2.3 线性结构与非线性结构如果一个非空的数据结构满足下列两个条件有且只有一个根结点每一个结点最多有一个前件,也最多有一个后件则称该数据结构为线性结构,线性结构也称为线性表特别需要说明的是,在一个线性结构中插入或删除任何一个结点后还应是线性结构。
如果一个数据结构不是线性结构,则称为非线性结构。
数据的存储结构有顺序、链接、索引等。
对于同一个逻辑结构来说,采用不同的存储结构,其数据处理的效率是不同的。
线性结构条件:(1)有且只有一个根结点;(2)每一个结点最多有一个前件,也最多有一个后件。
非线性结构:不满足线性结构条件的数据结春夏秋冬父亲儿子女儿DC AB构。
1.3 线性表及其顺序存储结构线性表由一组数据元素构成,数据元素的位置只取决于自己的序号,元素之间的相对位置是线性的。
在复杂线性表中,由若干项数据元素组成的数据元素称为记录,而由多个记录构成的线性表又称为文件。
1.3.1非空线性表的结构特征:P16(1)且只有一个根结点a1,它无前件;(2)有且只有一个终端结点an,它无后件;(3)除根结点与终端结点外,其他所有结点有且只有一个前件,也有且只有一个后件。
结点个数n称为线性表的长度,当n=0时,称为空表。
1.3.2线性表的顺序存储结构具有以下两个基本特点:(1)线性表中所有元素的所占的存储空间是连续的;(2)线性表中各数据元素在存储空间中是按逻辑顺序依次存放的。
ai的存储地址为:ADR(ai)=ADR(a1)+(i-1)k,,ADR(a1)为第一个元素的地址,k代表每个元素占的字节数。
由此可以看出,在线性表的顺序结构中,其前后件两个元素在存储空间中是紧邻的,且前件元素一定存储在后件元素的前面。
在程序设计语言中,通常定义一个一维数组来表示线性表的顺序存储空间。
顺序表的运算:插入、删除。
(详见17--18页)画图来理解1.4 栈和队列1.4.1栈及其基本运算1.什么是栈栈是限定在一端进行插入与删除的线性表,允许插入与删除的一端称为栈顶,不允许插入与删除的另一端称为栈底。
栈按照“先进后出”(FILO)或“后进先出”(LIFO)组织数据,栈具有记忆作用。
用top 表示栈顶位置,用bottom表示栈底。
2.栈的顺序存储与栈的基本运算:(1)插入元素称为入栈运算;(2)删除元素称为退栈运算;(3)读栈顶元素是将栈顶元素赋给一个指定的变量,此时指针无变化。
1.4.2队列及其基本运算1.什么是队列队列是指允许在一端(队尾)进入插入,而在另一端(队头)进行删除的线性表。
Rear 指针指向队尾,front指针指向队头。
队列是“先进先出”(FIFO)或“后进后出”(LILO)的线性表。
2.循环队列运算包括(1)入队运算:从队尾插入一个元素;(2)退队运算:从队头删除一个元素。
循环队列:s=0表示队列空,s=1且front=rear 表示队列满1.5 线性链表p24对于大的线性表或者变动频繁的线性表不宜用顺序存储,应该用链式存储。
在链式存储结构中的每一个结点对应于一个存储单元,这种存储单元称为存储结点,简称结点。
结点由两部分组成:(1)用于存储数据元素值,称为数据域;(2)用于存放指针,称为指针域,用于指向前一个或后一个结点。
链式存储方式的特点:☆在链式存储结构中,存储数据结构的存储空间可以不连续,☆各数据结点的存储顺序与数据元素之间的逻辑关系可以不一致,而数据元素之间的逻辑关系是由指针域来确定的。
☆链式存储方式即可用于表示线性结构,也可用于表示非线性结构。
1.线性链表为了适应线性表的存储结构,计算机存储空间被划分为一个一个小块,每一个小块占若干字节,通常称这些小块为存储结点。
存储结点=数据域(数据元素本身)+指针域(数据元素之间的前后逻辑关系)在线性链表中,用一个专门的指针HEAD指向线性链表中的第一个数据元素的结点(即存放线性表中第一个数据元素的存储结点的序号)称为头指针,头指针:在线性链表中,头指针(HEAD)很关键,不得丢失。
最后一个结点的指针域:线性链表的最一个结点的指针域为空(用NULL或0来表示)空表的定义:当HEAD=NULL(或0)称为空表。
单链表的缺点:只能找到后不能找到前件。
2.双向链表为了克服单链表的缺点,把每个结点修改为由三部分组双向链表克服了单向链表的只能找到后件不能找到前件的缺陷。
如果是两指针:左指针(Llink)指向前件结点,右指针(Rlink)指向后件结点。
2.带链的栈在实际应用中,带链的栈可以用来收集计算机存储空间中所有空闲的存储结点。
这种带链的栈称为可利用栈当计算机系统需要存储结点时,退栈。
当计算机系统释放存储结点时,入栈3.循环链表单链表的运算必须对于空表和对第一个结点的处理必须单独考虑,为了克服这个缺点,提出了循环链表的概念。
循环链表与单链表的主要区别:第一,在循环链表中增加了表头结点,其数据域为任意或根据需要来设置,指针域为指向线性表的第一个元素的结点。
第二,循环链表中的最后一个结点的指针不为空,而是指向表头的结点。
1.6 树与二叉树p311.6.1树的基本概念树是一种简单的非线性结构,所有元素之间具有明显的层次特性。
在树结构中,每一个结点只有一个前件,称为父结点,没有前件的结点只有一个,称为树的根结点,简称树的根。
每一个结点可以有多个后件,称为该结点的子结点。
没有后件的结点称为叶子结点。
在树结构中,一个结点所拥有的后件的个数称为该结点的度,所有结点中最大的度称为树的度。
树的最大层次称为树的深度。
二叉树的特点:(1)非空二叉树只有一个根结点;(2)每一个结点最多有两棵子树,且分别称为该结点的左子树与右子树。
二叉树的基本性质:(1)在二叉树的第k层上,最多有2k-1(k≥1)个结点;左指针数据元素右指针(2)深度为m的二叉树最多有2m-1个结点;(3)度为0的结点(即叶子结点)总是比度为2的结点多一个;(4)具有n个结点的二叉树,其深度至少为[log2n]+1,其中[log2n]表示取log2n的整数部分;(5)具有n个结点的完全二叉树的深度为[log2n]+1;(6)设完全二叉树共有n个结点。
如果从根结点开始,按层序(每一层从左到右)用自然数1,2,….n给结点进行编号(k=1,2….n),有以下结论:①若k=1,则该结点为根结点,它没有父结点;若k>1,则该结点的父结点编号为INT(k/2);②若2k≤n,则编号为k的结点的左子结点编号为2k;否则该结点无左子结点(也无右子结点);③若2k+1≤n,则编号为k的结点的右子结点编号为2k+1;否则该结点无右子结点。
满二叉树是指除最后一层外,每一层上的所有结点有两个子结点,则k层上有2k-1个结点深度为m的满二叉树有2m-1个结点。
完全二叉树是指除最后一层外,每一层上的结点数均达到最大值,在最后一层上只缺少右边的若干结点。
二叉树存储结构采用链式存储结构,对于满二叉树与完全二叉树可以按层序进行顺序存储。
二叉树的遍历:(1)前序遍历(DLR),首先访问根结点,然后遍历左子树,最后遍历右子树;(2)中序遍历(LDR),首先遍历左子树,然后访问根结点,最后遍历右子树;(3)后序遍历(LRD)首先遍历左子树,然后访问遍历右子树,最后访问根结点。