二级C基础知识

算法的有穷性,是指算法必须在有限的时间内做完,
即算法必须能在执行有限个步骤后终止。
所谓算法是指解题方案的准确而完整的描述。
是一严谨地定义运算顺序的规则,
并且每一个规则都是有效的,都是明确的,
顺序将会在有限的次数下终止。
算法不等于程序,也不等于计算方法。
设计算法时不仅要考虑对数据对象的运算和操作,
还要考虑算法的控制结构。

算法空间复杂度,
是指执行这个算法所需要的内存空间,
这个内存空间包括算法程序所占的空间,
输入的初始数据所占的存储空间以及算法执行过程中所需要的额外空间。

算法的时间复杂度,
是指执行算法所需要的计算工作量。
算法的工作量可以用算法在执行过程中所需基本运算的执行次数来度量。
二叉树属于非线性结构。
栈是种特殊的线性表,
这种线性表只能在固定的一端进行插入和删除操作
队列可看作是插入在一端进行,删除在另一端进行的线性表。
数据的逻辑结构反映的是数据元素之间的逻辑关系,
与使用的计算机无关。
内聚是从功能角度来衡量模块的联系,它描述的是模
块内的功能联系。
内聚有如下种类,它们之间的内聚度由弱到强排列。

偶然内聚-模块中的代码无法定义其不同功能的调用。但它使
该模块能执行不同的功能,这种模块为巧合强度模块。

逻辑内聚一这种模块把几种相关的功能组合在一起,每次被调
用时,由传送给模块的参数来确定该模块应完成哪一种功能。
时间内聚——种模块顺序完成一类相关功能, 比如初始化模
块,它顺序地为变量置初值。

过程内聚一如果一个模块内的处理元素是相关的,而且必须以
特定次序执行,则称为过程内聚。

通信内聚一这种模块除了具有过程内聚的特点外,还有另外一
种关系,即它的所有功能都通过使用公用数据而发生关系。

顺序内聚一如果一个模块内各个处理元素和同一个功能密切相
关,
而且这些处理必须顺序执行,处理元素的输出数据作为下一个
处理元素的输入数据,则称为顺序内聚。

功能内聚——如果一个模块包括为完成某一具体任务所必需的所有成
分,或者说模块中所有成分结合起来是为了完成一个具体的任务,
此模块则为功能内聚模块。
在关系中凡能惟一标识元组的最小属性集称为该表的键
或码。二维表中可能有若干个键,它们称为该表的候选码或候选键。
从二维表的所有候选键中选取一个作为用户使用的键称为主键或主
码。
确认测试的任务是验证软件的功能和性能,以及其他特
性是否满足需求规格说明中确定的各种需求。
数据流图用于抽象描述一个软件的逻辑模型, 它由一些
特定的图符构成,包括4个方面,
即加工、数据流、存储文件、源和潭。
选择排序的基本思想是扫描整个线性表;从中选出最小
的元素,将它交换到表的最前面,然后对剩下的子表采用同样的方
法,直到子表为空。所以第一趟排序后,将选出最小的元素9放在第一
个位置,元素15则放在第二个位置。
关系的并运算是指,由结构相同的两个关系合并,形成
一个新的关系,其中包含两个关系中的所有元组。
数据库管理员(DataBaseAdministrator, DBA)是指对数
据库的规划、设计、维护、监视等的人员,其主要工作如下:

数据库设计。DBA的主要任务之一是数据库设计,具体地说是
进行数据模式的设计;

数据库维护。DBA必须对数据库中的数据安全性、完整性、并
发控制及系统恢复、数据定期转储等进行实施与维护; 

改善系统性能,提高系统效率。DBA必须随时监视数据库的运行状
态,不断调整内部结构,使系统保持最佳状态与效率。

每个C程序有且只有一个主函数(main),
且程序必须
从main( )函数开始执行,而且main()函数可以放在程序中的任意位置。
C语言的基本特点。C语言是一种高级编程语言,但并不是比其他语言高级;
 C语言源程序必须经过编译生成目
标文件才能被计算机识别执行; C语言出现比较晚,它既有优点也有.
缺点,而并不是具有其它一切语言的优点。
C语言规定每条语句和数据定义的最后必须有一个分
号,分号是C语句的必要组成部分。
复合语句也称为“语句块”,
其形式如下: {语句1;语句2; ..语向n:},即用一对大括号把若干语句
括起来构成一个语句组。一个复合语句在语法上视为一条语句,在一
对花括号内的语句数量不限。一个赋值表达式的最后加一个分号就成
为一条语句,即赋值语句。
空语句是只有一个分号的语句,它什么也
不做,程序设计中有时需要加一个空语句来表示存在一条语句,但随
意加分号会导致逻辑上的错误,
而且这种错误十分隐蔽, 编辑器也不会提示逻辑错误,需要慎用。
赋值表达式的一般形式是:
变量名=表达式。C语言规定,不能给变量表达式赋值。
逻辑运算符两侧的运算对象可以是任意合法的表达式。
逻辑表达式的运算结果或者为1 (“真”),或者为0(“假”)
函数调用时,函数返回值的类型既不由主调函数类型所决定,
也不由return语句中的表达式类型所决定,
更不是由系统临时决定,
而是由定义该函数时所指定的数值类型所决定。
对于已定义的数组a[M],数组元素的正确引用必须满足下标小于M且为正整数。
凡未指定存储类别的局部变量的隐含存储类型
都默认为自动类型。
编译预处理命令的特点有:
①为了区分一般的语句,预处理命令行都必须以#
开始,结尾不加分号;
②预处理命令可以放在程序中的任意位置;
③在程序中凡是以#
开始的语句都是预处理命令行。
结构体变量的成员引用方法有3种:
①结构体变量名成员名;
②指针变量名->成员名;(*指针变量名)成员名。
按逻辑位运算的特定作用主要有3点:
①用按位与运算将特定位清或保留特定位;
②用按位或运算将特定的位置设用为; 
用按位异或运算将某个变量的特定位翻转或交换两个变量的值。
打开文件函数fopen()的调用形式为:
 fp=fopen(文件名,文件使用方式)。 
 “文件使用方式”说明:
 方式“r”为以输入方式打开一个文本文件;
 方式“a+”为以读/写方式打开一个文本文件,保留文件中原有的数据;
 方式“w+”为以读/写方式建立一个新的文本文件;
 方式“r+”为以读/写方式打开一个文本文件。
线性表的存储通常要用两种存储结构:
顺序存储结构 和 链式存储结构。
软件需求分析阶段的工作,可以概括为四个方面:

需求获取、 需求分析、编写需求规格说明书和需求评审。

需求获取的目的是确定对目标系统的各方 面需求。涉及到的主要
任务是建立获取用户需求的方法框架,并支持和监控需求获取的过
程。

需求分析是对获取的需求进行分析和综合,最终给出系统的解决
方案和目标系统的逻辑模型。

编写需求规格 说明书作为需求分析的阶段成果,可以为用户、分
析人员和设计人员之间的交流提供方便,可以直接支持目标软件系统
的确认,又可以作为控制软件开发进程的依据。

需求评审是对需求分析阶段的工作进行复审,验证需求文档的-致
性、可行性、完整性和有效性。
程序设计应该简单易懂,语句结构应该简单直接,不应
该为提高效率而把语句复杂化。
结构化分析的常用工具有
数据流图、数据字典、判定树和判定表。
软件需求
是指用户对目标软件系统在功能、性能、设计
约束等方面的要求,是由用户提出的。
数据库一旦发生故障,需要及时进行故障恢复,并由数
据库管理员负责执行故障恢复。
数据模型描述的内容包含数据结构、数据操作和数据约
束。
C语言最基本的两个知识点:①每个C程序有且
只有一个主函数( main) ,
且程序必须从main()函数开始执行,但是
main()函数可以放在程序中的任意位置;

②在C程序中,要调用的函数
可以在主函数内声明也可以在主函数外声明
C语言规定,标识符是由字母、数字或下划线组成,并
且它的第一个字符必须是字母或者 下划线。‘
“#”、“.”不允许出现
在标识符中。
整型变量在输入语句加取地址符&
字符数组定义变量是字符数组的首地址
在输入语句中不用加取地址&
不同的编译系统或计算机系统对几类整型数所占用的字
节数有不同的规定。
long、 int和short类型数据占用内存大小是由选择
何种C编译系统决定的。
scanf()语句中用“空格”间隔不同的字符串,空格将被
全部忽略掉,所以用scanf()数不能输入空格;

getchar()函数用于输入字符,
其调用形式为: ch=getchar( ).getchar( )函数从终端读入一个
字符作为函数值,把读入的字符赋给变量ch。在输入时,空格、回车
符都将作为字符读入,而且只有在用户敲入Enter键时,读入才开始执
行。

gets()函数的调用形式为: gets(str_ _adr), 其中str_ adr是存放输入字
符串的起始地址,可以是字符数组名、字符数组元素的地址或字符指
针变量。gets函数用来从终端键盘读入字符串(包括空格符),直到
读入一个换行符为止。

getc()函数的调用形式为: ch=getc(pf)其中pf是
文件指针。函数的功能是从pf指定的文件中读入一个字符,并把它作
为函数值返回。
数据元素是由多个数据项组成,数据是能够被计算机识
别、存储和加工处理的信息载体,数据处理的最小单位是数据项。

读取二进制文件的函数调用形式为:
 fread(buffer,size,count,fp);
 其中buffer代表的是数据块的指针,
 对fread来说, 它是内存块的首地址,输入的数据存入此内存块中.
C语言允许用typedef说明一种新类型名,
说明新类型名的语句一般形式为: typedef 类型名标识符;
在此,“类型名 ”必须是在此语句之 前已有定义的类型标识符。 
“标识符”是一个用户定义标符,用作新的类型名。
typedef语句的作用仅仅是用“标识符”来代表已存在的“类型名”,
并未产生新的数据类型,原有类型名依然有效。
数据结构是
研究数据元素及其之间的相互关系和数据运算的一门学科,
它包含3个方面的内容,
即数据的逻辑结构、存储结构和数据的运算。
(1)前序遍历
先访问根结点,然后遍历左子树,最后遍历右子树;
并且在遍历左、右子树时,仍需先访问根结点,
然后遍历左子树,最后遍历右子树。


(2)中序遍历
先遍历左子树、然后访问根结点,最后遍历右子树;
并且,在遍历左、右子树时,仍然先遍历左子树,
然后访问根结点,最后遍历右子树。


(3)后序遍历
先遍历左子树、然后遍历右子树,最后访问根结点;
并且,在遍历左、右子树时,仍然先遍历左子树,
然后遍历右子树,最后访问根结点。

内模式又称物理模式,
它给出了数据库物理存储结构与物理存取方法,
如数据存储的文件结构、索引、集簇及
hash等存取方式与存取路径,
内模式的物理性主要体现在操作系统及文件级上,
它还未深入到设备级上(如磁盘及磁盘操作)
对象具有如下特征:

标识惟一性。 指对象是可区分的。

分类性。指可以将具有相同属性和操作的对象抽象成类。

多态性。指同一个操作可以是不同对象的行为。

数据库管理系统DBMS是数据库系统的核心。
DBMS是负责数据库的建立、使用和维护的软件。
DBMS建立在操作系统之上,实施对数据库的统一管理和控制。
用户使用的各种数据库命令以及应用程序的执行,
最终都必须通过DBMS。
另外,DBMS还承担着数据库的安全保护工作,
按照DBA所规定的要求,保证数据库的完整性和安全性。

开发软件所需高成本和产品的低质量之间有着尖锐的矛盾,
这种现象称做软件危机。

随着计算机软件规模的扩大,软件本身的复杂性不断增加,
研制周期显著变长,正确性难以保证,
软件开发费用上涨,生产效率急剧下降,
从而出现了入们难以控制软件发展的局面,
即所谓的“软件危机”

关系模型允许3类数据约束,它们是:

●实体完整性约束
该约束要求关系的主键中属性值不能为空值,
这是数据库完整性的最基本要求。

●参照完整性约束
该约束是关系之间相关联的基本约束,
它不允许关系引用不存在的元组:
即在关系中的外键要么是所关联关系中实际存在的元组,
要么就为空值。

●用户定义的完整性约束
用户定义的完整性就是针对某一具体关系数据库的约束条件,
它反映某一具体应用所涉及的数据必须满足的语义要求。

在关系表中,每一列称为一个属性,对应表中的一个字段;
           每一行称为一个元组,对应表中的一条记录。

在人工管理阶段,
数据无法共享,冗余度大,不独立,完全依赖程序;
在文件系统阶段,数据共享性差;
在数据库系统阶段,共享性好,独立性高。

C语言最基本的3个概念:
①C语言是区分大小写的,
q和Q是两个不同的变量;
②变量的实质就是在内存中占据一定的存储单元,
存储单元里存放的是该变量的值,
变量的值可以根据需要进行修改;
③整数在允许的范围内可以准确
的表示出来,但不可能表示无限度的实数。
正整数可用二进制、十进制、八进制和十六进制表示。

\是反斜线转义字符;
\t是水平跳格转义字符;
"\n是换行转义字符;
C语言中没有规定”088是转义字符。

C语言规定,标识符是由字母、数字或下划线组成,
并且它的第一个字符必须是字母或下划线,
关键字不能用作  用户标识符。

C源程序:
经过程序编译之后生成一个后缀为“.obj”的二进制文件 
(称为目标文件),然后
由称为 “连接程序”的软件包文件与C语言提供的各种库函数
连接起来生成一个后缀为“.exe”的可运行文件。

在这里插入图片描述


 n和e的x幂次方,
 要分别调用C语言的
 数学库函数double pow(n,x)double exp(x),
 因为这两个函数的返回值都为double,
 对两者的和计算绝对值,
 调用库函数double fabs(pow(nx)+exp()),
 求出和的绝对值,
 再调用开平方函数double sqrt
(fabs(pow(n,x)+exp())),这样计算出的结果就是题干中表达式的值。

软件开发阶段包括
需求分析、总体设计、详细设计、编码和测试五个阶段。
其中需求分析阶段常用的工具是
数据流图和数据字典。
二分法查找,也称拆半查找,是一种高效的查找方法。能使用二分法查找的
线性表必须满足用顺序存储结构和线性表是有序表两个条件。
“有序”是特指元素按非递减排列,即从小到大排列,但允许相邻元素相等。
下一节排序中,有序的含义也是如此。
对于长度为n的有序线性表,利用二分法查找元素X的过程如下:

步骤1:将X与线性表的中间项比较;
步骤2:如果X的值与中间项的值相等,则查找成功,结束查找;
步骤3:如果X小于中间项的值,则在线性表的前半部分以二分法继续
查找;
步骤4:如果X大于中间项的值,则在线性表的后半部分以二分法继续
查找
根据数据结构中各数据元素之间前后关系的复杂程度,
一般将数据结构分为两大类型:
线性结构与非线性结构。
如果一个非空的数据结构满足下列两个条件:
①有且只有一个根结点;
②每个结点最多有一个前件,也最多有一个后件。
则称该数据结构为线性结构,又称线性表。
所以线性表、栈与队列、线性链表都是线性结构,
而二叉树是非线性结构。

耦合度是模块间互相连接的紧密程度的度量;
内聚度是一个模块内部各个元素间彼此结合的紧密程度的度量。

线性表是一种线性结构,(n≥0)个元素组成,
所以线性表可以是空表。
但是在线性表中,第一个结点没有前件,
最后一个结点没有后件,
其他结点有且只有一个前件和后件。

线性表的顺序存储是用一片连续的空间来存放数据元素,
其特点是逻辑上相邻的元素在物理位置上也相邻。
数据元素之间逻辑上的先后关系自动隐含在物理位置的相邻元素之中,
因此不需要另外开辟空间来保存元素之间的关系。

数据库管理系统在数据库的三级模式之间提供了两层映像,保证了数据库中数据的较高的
逻辑独立性和物理独立性。

软件测试:
白盒测试方法也称为结构测试或逻辑测试,主要方法有逻辑覆盖测试、基本路径测试等。

(1)静态测试和动态测试
①静态测试包括代码检查、静态结构分析、代码质量度量等。
其中代码检查分为代码审查、代码走查、桌面检查、静态分析等具体形式;
②动态测试。静态测试不实际运行软件,主要通过人工进行分析。
动态测试就是通常所说的上机测试,是通过运行软件来检验软件中的动态行为和运行结果的正确性。
动态测试的关键是使用设计高效、合理的测试用例。测试用例就是为测试设计的数据,由测试输入数据和预期的输出结果两部份组成。测试用例的设计方法
一般分为两类:黑盒测试方法和白盒测试方法。
(2)黑盒测试和白盒测试
①白盒测试。
白盒测试是把程序看成装在一只透明的白盒子里,
测试者完全了解程序的结构和处理过程。
它根据程序的内部逻辑来设计测试用例,检查程序中的逻辑通路是否都按预定的要求正确地工作;
②黑盒测试。
黑盒测试是把程序看成一只黑盒子,测试者完全不了解,或不考虑程序的结构和处理过程。
它根据规格说明书的功能来设计测试用例,检查程序的功能是否符合规格说明的要求。

c程序是由函数组成的
用指数形式表示的实型常量需注意两点:
 e 或 E后面的指数必须是整数,
C指数必须是不超过数据表示范围的正负整数,并且在或E前必须有数字。

若printf函数没有输出项,且格式字符串中不含格式信息,则输出的是格式字符串本身,若格式字符串
含有格式信息,运行时则出现错误提示; 在C语言中,整数可以以十进制、八进制或十六进制的形式输出;
getchar函数是从标准输入设备读取一个字符。

并、差、笛卡儿积、投影和选择是5种基本的运算,
其他运算即交、连接和除,
均可以通过5种基本的运算来表达。

数据库有两层映像,即外模式模式和模式/内模式映像。
模式/内模式映像定义数据库全局逻辑结构与存储结构之
间的对应关系。
外模式/模式映射把用户数据库与概念数据库联系了起来。


在定义的链表中,
若只含有一个指针域来存放下一个元素地址,
称这样的链表为单链表或线性链表。
在链式存储方式中,要求每个结点由两部分组成: 
一部分用于存放数据元素值,称为数据域;
另一部分用于存放指针,称为指针域。
其中指针用于指向该结点的前一个或后一个结点(即前件或后件)
类是对一类具有相同的属性和方法对象的描述,

属性用于描述对象的状态,

方法用于表示对象的行为,

基于同一个类产生的两个对象是可以分别设置自己的属性值的。
需求分析的最终结果是生成软件需要规格说明书,
可以为用户、分析人员和设计人员之间的交流提供方便。

数据库设计目前一段采用生命周期法,
即将整个数据库应用系统的开分解成目标独立的若干阶段,
它们是:
需要分析阶段、
概念设计阶段、
逻辑设计阶段、
物理设计阶段、
编码阶段、
测试阶段、
运行阶段、
进一步修改阶段。
在数据库设计中采用上面几个阶段中的前四个阶段,
并且重点以数据结构和模型设计为主线。

对任何一棵二叉树,度为0的结点
(即叶子结点)总是比度为2的结点多一个。

数据模型描述的内容包含数据结构、数据操作和数据约束。

scanf() 语句中用“空格”间隔不同的字符串,
空格将被全部忽略掉,所以用scanf()函数不能输入空格;

getchar()函数用于输入字符,
其调用形式为: ch=getchar( )
getchar( )函数从终端读入一个字符作为函数值,
把读入的字符赋给变量ch
在输入时,空格、回车符都将作为字符读入,
而且只有在用户敲入Enter键时,读入才开始执行。

gets()函数的调用形式:
gets(str_ adr), 其中str_ adr是存放输入字符串的起始地址,
可以是字符数组名、字符数组元素的地址或字符指针变量。
gets()函数用来从终端键盘读入字符串(包括空格符〉,
直到读入一个换行符。

getc()函数的调用形式:
ch=getc(pf),
其中pf是文件指针。
函数的功能是从pf指定的文件中读入一个字符,
并把它作为函数值返回。

算法

1.在实际应用中,队列的顺序存储结构一般采用
 循环队列的形式
  
2.算法原则上能够精确运行,而且人们用笔和纸
做有限次运算后即可完成,
有穷性是指算法程序的运行时间是有限的
  
3.算法是指对解题方案的准确而完整的描述,
算法不等于数学上的计算方法,也不等于程序,
算法设计需要考虑可行性、确定性、有穷性、
及足够的情报,不能只考虑计算结果

4.如果一个算法执行耗费的时间太长,即使最终获得
正确结果,也是没有意义的
数据的存储结构会极大的影响程序的执行时间

5.算法的空间复杂度是指算法在执行过程中所需要的内存时间
算法的时间复杂度,是指执行算法所需要的计算工作量
两者并没有直接关系

6.算法的效率与问题的规模和数据的存储结构都有关
由于数据元素在计算机存储空间中位置关系可能与逻辑关系不同,
因此数据的逻辑结构和存储结构不是一一对应的

7.算法的时间复杂度是指算法所需要的计算工作量,
算法的计算工作量是用算法所执行的基本运算次数来度量的

8.数据的存储结构直接决定数据输入和数据所占空间
这会影响算法所执行的基本运算次数,
即算法的时间复杂度、空间复杂度与算法所处理数据的存储结构有直接关系

算法程序执行的具体时间受到所使用的计算机、程序设计语言以及
算法实现过程中的许多细节所影响,
而算法时间复杂度与这些因素无关,所以是不一致的。

9.最坏情况下的时间复杂度可以与平均情况下的时间复杂度相同
不同的算法 时间复杂度不相同

10.解决同一个问题的不同算法的时间复杂度,
可能相同也可能不相同。

11.算法的复杂度是指运行该算法所需要的计算机资源的多少
所需资源越多,算法的复杂度越高
所需资源越少,复杂度越低

算法复杂度包括算法的时间复杂度和算法的空间复杂度
算法的时间复杂度是指执行算法所需要的计算工作量
算法的空间复杂度是指这个算法所需要的内存空间

12.算法的计算工作量是用算法执行的基本运算次数来衡量的

13.
14.为了降低算法对的空间复杂度,
要求算法尽量采用原地工作(in place)
执行算法时所使用的额外空间固定
(不随算法所处理的数据空间大小的变化而变化)

-----------------------------------------------------------
-----------------------------------------------------------
数据结构的基本概念

1.面向对象基本方法的基本概念有
对象、类、实例、消息、继承、多态性

2.程序的执行效率与数据的存储结构、
数据的逻辑结构、程序的控制结构、
所处理的数据量有关

3.数据元素是一个含义很广泛的观念,它是数据的基本单位
在计算中通常作为一个整体进行考虑和处理
数据元素可以是一个数据也可以是被抽象出的具有一定结构数据的集合
所以数据结构中的数据元素可以是另一数据结构。
不满足条件的结构为非线性结构。
空数据结构可以是线性结构也可以是非线性结构。
非空数据结构可以没有空结点
非线性结构“图”就没有根节点

4.算法的效率与问题的规模和数据的存储结构都相关

5.
6.一般来说,在线性表的链式存储结构中,
各数据结点的存储序号是不连续的,
并且各结点在存储空间中的位置关系与逻辑关系
也不一致。
线性链表中数据的插入和删除都不需要移动表中的元素
只需要改变结点的指针域即可。

7.一个非空的数据结构如果满足两个条件:
有且只有一个根结点;
每一个根结点最多有一个前件,
也最多有一个后件的非空的数据结构称为线性结构
不同时满足以上两个条件的数据结构称为非线性结构
其中树形结构只有一个根结点

8.线性结构 线性表可以采用顺序存储和链式存储
其中链式存储空间是不连续的
双向链表节点有两个指针域
指向前一个节点的指针和指向后一个的指针也是线性结构

顺序存储结构中可能根节点不唯一,故可能不是线性结构
栈是所有的插入与删除都限定在表的同一端进行的线性表
队列是指允许在一端进行插入,而在另一端进行删除的线性表

9.循环队列是队列的一种顺序存储结构
双向链表为顺序存储结构
二叉树通常采用链式存储结构
完全二叉树属于非线性结构,其最佳的存储方式是顺序存储方式

10.如果有两个节点的同一指针域的值相等
说明一个节点有两个前件属于非线性结构
非线性结构主要是树形结构和网状结构
可以满足每个节点有两个指针域的条件

11.
12.双向链表节点具有两个指针域,属于线性结构
循环链表所有节点的指针都为非空属于线性结构
循环链表是链表,循环队列是队列
队列只能在队尾入队,在排头退队,
链表可以在任何位置插入、删除

13
14.图 可能不包含根节点或叶子节点的数据结构

15.算法的优劣取决于算法复杂度,与程序环境无关
,当算法被编程实现后,程序的运行受到计算机系统运行环境的限制

--------------------------------------------------------------
--------------------------------------------------------------

线性表和顺序存储结构

1.
栈是所有的插入与删除都在限定在表的同一端进行的线性表
队列是指允许在一端进行插入,而在另一端进行删除的线性表
两者均可以顺序存储也可以链式存储

为了充分的利用数组的存储空间
把数组的前端和后端连接起来
形成一个环形的表称为循环队列
因此循环队列是队列的一种顺序存储结构

2.具有两个根节点的数据结构一定是非线性结构

线性结构即线性表
可以顺序存储也可以链式存储
顺序存储空间连续
链式存储空间不连续

非线性结构主要是树形结构和网状结构
数据结构线性与存储空间是否连续没有直接关系
二叉树可以用一片连续的空间来存储,
但其为非线性结构

3.带链的队列就是用一个单链表来表示队列
队列中的每一个元素对应链表中的一个节点
其存储结构即可以顺序存储也可以链式存储
顺序存储空间连续
链式存储空间不连续

循环队列中,由于指针超过队列地址最大值会移动到队列最小位置处
队头指针可以大于也可以小于队尾指针

4.链式存储结构既可以针对线性结构也可以针对非线性结构
链式存储结构中每一个节点都由数据域与指针域两部分组成
增加了存储空间,所需要的存储空间一般多于顺序存储

5.
6.
7.
8.在线性表的顺序存储结构中
其存储空间连续
各元素所占字节数
相同,元素的存储顺序与逻辑顺序一致


顺序表两大基本特征:
线性表中所有元素所占的存储空间是连续的;
线性表中各数据元素在存储空间中按逻辑顺序依次存放
在顺序表中,每个元素占有相同的存储单元
用一组任意的存储单元来依次存放线性表的结点
这组存储单元既可以是连续的,
也可以是不连续的
甚至是零散分布在内存中的任意位置上的

9.带链的栈和队列都是线性结构

顺序存储可能根节点不唯一,故可能不是线性结构

10.
11.有序线性表既可以采用顺序存储结构
也可以采用链式存储结构
循环队列是线性结构的线性表

-----------------------------------
-----------------------------------

栈和队列

1. 
2.顺序存储结构中可能根节点不唯一,故可能不是线性结构

3.
4.栈是按“先进后出”的原则组织数据的,
入栈最早的最后出栈
数据的插入和删除都在栈顶进行操作

5.算法是指对解题方案的准确而完整的描述,
算法不等于数学上的计算方法,也不等于程序,
设计算法时不仅要考虑对数据对象的运算和操作
还有考虑算法的控制结构

20.入栈栈顶指针 top=top-1
出栈栈顶指针 top=top+1
top=1栈满

23.队列是指允许在一端进行插入,而在另一端进行删除的线性表。
由于最先进入队列的元素将最先出队,
所以队列具有“先进先出”的特性,
体现了“先来先服务”的原则
作业调度是根据一定的信息,按照一定的算法
从外存的后备队列中选取某些作业调入内存分配资源并将新创建的
进程插入就绪队列的过程
执行程序中的过程调用一般指函数调用
需要调用的时候转入被调用函数地址执行程序
与队列无关
执行程序中的循环控制是指算法的基本控制结构
包括对循环条件的判定与执行循环体
与队列无关
二叉树非线性结构
是一个有限的结点集合
二叉树的遍历是指不重复地访问二叉树中
所有的结点
与队列无关

24.循环队列中线性结构
顺序存储结构
线性结构是n个数据元素构成的有限序列,
除第一个元素外的每一个元素,有且只有一个前件
除最后一个元素外,有且只有一个后件
循环队列是线性结构
当需要插入的数据大于循环队列的存储长度
入队运算会覆盖前面的数据
发生溢出现象
元素的个数是由队头指针和队尾指针共同决定的
在循环队列中只需要队头指针与队尾指针共同反映
元素的动态变化情况

25.
26.循环队列队头指针可以大于队尾指针,
也可以小于队尾指针
循环队列的队头指针与队尾指针都是不固定的
随着入队与出队操作进行变化
因为是循环利用的队列结构
所以队头指针有时可能大于队尾指针
有时可能小于队尾指针

27.循环队列中
用队尾指针rear指向队列中的队尾元素
用排头指针front指向的后一个位置知道队尾指针rear
指向的位置之间所有的元素均为队列中的元素
所以循环队列中的元素个数与队头指针和队尾指针的变化而变化

-------------------------------------------------------------
-------------------------------------------------------------

线性链表


1.顺序表:
	优点:
	(1)可以随机存取表中的任意结点
	(2)无需为表示结点间的逻辑关系额外增加存储空间
	
	缺点:
	(1)顺序表的插入和删除运算效率很低
	(2)顺序表的存储空间不便于扩充
	(3)顺序表不便于对存储空间的动态分配

	链表:
	优点:
	(1)在进行插入和删除运算时
	只需要改变指针即可,不需要移动元素
	(2)链表的存储空间易于扩充并且方便空间的动态分配

	缺点:需要额外的空间(指针域)
	来表示数据元素之间的逻辑关系
	存储密度比顺序表低
	链式存储插入和删除运算效率高

2.在栈中,栈底指针不变,栈中元素随栈顶指针的变化而动态变化
栈是先进后出的数据结构,
在整个过程中
栈底指针不变,入栈与出栈操作均由栈顶指针的变化来操作

3.
4.顺序存储结构的存储一定是连续的
链式存储结构的存储不一定是连续的

5.线性表的链式存储结构所需要的存储空间一般要多于
顺序存储结构
线性链式存储结构中的每一个结点都由数据域与指针域两部分 组成
增加了存储空间,所需要的存储空间一般多于顺序存储

6.链表结点中具有两个指针域的数据结构可以是线性结构
也可以是非线性结构
双向链表与树形结构的节点均可以包含两个指针域
但前者是线性结构后者是非线性结构

7.在双向链表、循环链表、二叉链表中,都可以
从任何一个结点开始直接遍历到所有结点

线性单链表就是线性表的链式存储结构,
这种结构只能从一个节点遍历到其后的所有结点

9.在带链队列中,队头指针和队尾指针
都在动态变化
并且可以指向同一个位置

在带链栈中,栈底指针不变
栈顶指针在动态变化

13.结点中具有多个指针域的链表称为多重链表

14.有的非线性结构也可以采用顺序存储结构
完全二叉树属于非线性结构,其最佳的存储方式是顺序存储方式





虚拟存储器的实际容量由CPU的地址长和外存的容量决定,
当CPU的地址长度能表示的大小远远大于外存容量时,
虚存的实际容量为内存和外存容量之和;
当外存容量远大于CPU字长能表示的大小时,
虚存的实际容量由CPU字长决定。


进程调度仅负责对CPU进行分配


在计算机内部表示指令和数据应采用:二进制


过程控制系统属于实时系统


存储管理采用动态重定位技术的是:请求分段式存储管理


允许多个联机用户同时使用一台计算机系统进行计算的操作系统属于
分时操作系统


在执行指令的过程中,
cpu不经过总线能直接访问的是:寄存器


分时操作系统是使一台计算机采用时间片轮转的方式同时为几个、
几十个甚至几百个用户服务的一种操作系统。
把计算机与许多终端用户连接起来,
分时操作系统将系统处理机时间与内存空间按一定的时间间隔,
轮流地切换给各终端用户的程序使用。由于时间间隔很短,
每个用户的感觉就像他独占计算机一样。
分时操作系统的特点是可有效增加资源的使用率。
例如UNIX系统就采用剥夺式动态优先的CPU调度,
有力地支持分时操作。


内存是内存,缓存是缓存,内存指那个内存条,
而缓存都集成在CPU内核里面。
用于减少处理器访问内存所需平均时间的部件



在多道程序设计中,将一台独占设备改造为共享设备的一种技术
SPOOLING (即外部设备联机并行操作),
即Simultaneous Peripheral Operations On-Line的缩写,
它是关于慢速字符设备如何与计算机主机交换信息一种技术,
通常称为“假脱机技术”。


软件测试的目的是在规定的条件下对程序进行操作,
以发现程序错误,衡量软件质量,
并对其是否能满足设计要求进行评估的过程。


系统结构图的最大扇入数
是指该系统结构从最上级到可以调用的最低一级的模块行数;
其中扇入是指直接调用该模块的上级模块的个数,
扇入大则表示模块的复用程序高。

模块最多的一行的数量即为最大扇出数。

面向对象基本特征:

抽象

继承

封装

多态性
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值