二级C复习
二级C语言
队列
计算队列中元素个数
种 : rear > front ,直接减
第二种: rear < front
上面两种综合一起,求元素个数公式 :(r - f + maxsize) % maxsize
栈
栈中元素个数计算
栈S(1,m)
第一步:判断栈是正栈还是倒栈
正栈初始状态(空栈):top<1
倒栈初始状态(空栈):top>m
第二步:计算元素个数
若为正栈:元素个数=top-1+1
若为倒栈:元素个数=m-top+1
二叉树
注:若二叉树中某结点仅有一个子结点时,不能由前序遍历和后序遍历得出中序遍历的访问顺序。
二叉树的计算
n个节点的二叉树一共有((2n)!)/(n! * (n+1)!)种
n层二叉树的第n层最多为2^(n-1)个
二叉树节点计算公式 N = n0+n1+n2,
度为0的叶子节点比度为2的节点数多一个。
N=1n1+2n2+1
对任何一棵二叉树T,如果其终端节点数为n0,度为2的节点数为n2,则n0=n2+1
具有n个节点的完全二叉树的深度为log2(n) + 1
B-树,除叶子与根节点以外的任意结点的分支数介于[m/2,m](取上整)
具有n 个结点的完全二叉树的深度为[log2n]+1
树的高度:从根节点到所有叶节点中最大的边的数目。
树的深度:从根节点到所有叶节点中最多的节点数目。
关系模型范式
1NF: 字段是最小的的单元不可再分
2NF:满足1NF,表中的字段必须完全依赖于全部主键而非部分主键 (一般我们都会做到)
3NF:满足2NF,非主键外的所有字段必须互不依赖
BCNF:满足3NF,消除表中的多值依赖
结构体
一、结构体变量的定义
1.结构体类型与结构体变量分开定义
一般形式如下:
struct<结构体名><结构体变量名>;
eg:struct student student1,student2;
关键字struct要与结构体名student一起使用,共同构成结构体类型名
2.结构体类型与结构体变量同时定义
一般形式如下:
struct<结构体名>
{
<成员列表>
}<结构体变量名>;
3.无名结构体与结构体变量同时定义
一般形式如下:
struct
{
<成员列表>
}<结构体变量名>;
由于这里省略了结构体名,没有完整的结构体类型名,所以不能在其他位置再定义此结构体类型的变量
4.使用typedef为已有结构体类型取“别名”
一般形式如下:
typedef struct
{
<成员列表>
}<别名>;
这里的别名就相当于结构体类型名,之后就可以使用它定义结构体变量了
eg:
typedef struct
{
<成员列表>
}STU;
STU student1,student2;
那么这里就定义了俩个结构体变量student1,student2
二、结构体引用
1.通过“ · ”引用
结构体变量名.成员名
注:注意结构体变量名与成员名之间有点
2.通过“->”引用
结构体指针变量名->成员名
排序算法
时间复杂度
最多:插入排序=希尔排序=选择排序=冒泡排序=快速排序>堆排序
最少:选择排序>堆排序=快速排序>插入排序=希尔排序=冒泡排序
最坏情况查找次数 二分法 log2n
文件读写
符号 | 注释 |
---|---|
r | 只读 |
r+ | 读写,从头开始 |
w | 只写,不存在则新建;存在则清空; |
w+ | 读写,不存在则新建;存在则清空; |
a | 追加,不存在则新建;存在则从文件尾开始; |
..x | 只新建,存在则不能打开 |
存储结构
线性结构
线性结构是一个有序数据元素的集合。常用的线性结构有:线性表,栈,队列,双队列,数组,串。
注:一维数组是线性结构
非线性结构
非线性结构,数学用语,其逻辑特征是一个结点元素可能有多个直接前趋和多个直接后继。常见的非线性结构有:二维数组,多维数组,广义表,树(二叉树等)。
注:有一个以上根结点的数据结构一定是非线性结构。
系统结构图
1、深度:程序结构的层次数,可以反映程序机构的规模和复杂程度。
2、宽度:同一层模块的最大模块个数
3、模块的扇出:一个模块调用(或控制)的其他模块数
4、模块的扇入:调用(或控制)一个给定模块的模块个数
深度---------层数
宽度---------同一层模块的最大模块个数
最大扇入数------------系统结构从最上级到可以调用的最低一级的模块行数
最大扇出数------------该系统结构中模块可以直接调用的下级模块最大数目
优先级 | 运算符 | 结合律 |
---|---|---|
1 | 后缀运算符:[] () · -> ++ --(类型名称){列表} | 从左到右 |
2 | 一元运算符:++ -- ! ~ + - * & sizeof_Alignof | 从右到左 |
3 | 类型转换运算符:(类型名称) | 从右到左 |
4 | 乘除法运算符:* / % | 从左到右 |
5 | 加减法运算符:+ - | 从左到右 |
6 | 移位运算符:<< >> | 从左到右 |
7 | 关系运算符:<<= >>= | 从左到右 |
8 | 相等运算符:== != | 从左到右 |
9 | 位运算符 AND:& | 从左到右 |
10 | 位运算符 XOR:^ | 从左到右 |
11 | 位运算符 OR:| | 从左到右 |
12 | 逻辑运算符 AND:&& | 从左到右 |
13 | 逻辑运算符 OR:|| | 从左到右 |
14 | 条件运算符:?: | 从右到左 |
15 | 赋值运算符: = += -= *= /= %= &= ^= |= <<= >>= | 从右到左 |
16 | 逗号运算符:, | 从左到右 |
字符串函数
序号 | 函数 & 目的 |
---|---|
1 | strcpy(s1, s2); 复制字符串 s2 到字符串 s1。(覆盖str1) |
2 | strcat(s1, s2); 连接字符串 s2 到字符串 s1 的末尾。(拼接) |
3 | strlen(s1); 返回字符串 s1 的长度。 |
4 | strcmp(s1, s2); 如果 s1 和 s2 是相同的,则返回 0;如果 s1<s2 则返回小于 0;如果 s1>s2 则返回大于 0。 |
5 | strchr(s1, ch); 返回一个指针,指向字符串 s1 中字符 ch 的第一次出现的位置。(从字符串的首地址开始查找) |
6 | strstr(s1, s2); 返回一个指针,指向字符串 s1 中字符串 s2 的第一次出现的位置。(从字符串的首地址开始查找) |
注:首地址就是该变量所占的存储区域中的第一个单元的地址。
sizeof(int) 4 sizeof(float) 4 sizeof(double) 8 sizeof(char) 1
- scanf():和 printf() 类似,scanf() 可以输入多种类型的数据。
- getchar()、getche()、getch():这三个函数都用于输入单个字符。
- gets():获取一行数据,并作为字符串处理。
白盒黑盒测试
黑盒测试---------功能测试 软件的接口测试
等价类划分法、边界值分析法、因果图法、错误推测法
白盒测试---------结构测试 对软件的过程性细节做细致的检查
程序结构分析、逻辑覆盖方测试、基本路径测试
概念
栈和队列都是一种特殊的操作受限的线性表,只允许在端点处进行插入和删除。
二者的区别是:栈只允许在表的一端进行插入或删除操作,是一种"后进先出"的线性表;而队列只允许在表的一端进行插入操作,在另一端进行删除操作,是一种"先进先出"的线性表。
根据数据结构中各数据元素之间前后关系的复杂程度,一般将数据结构分为两大类型:线性结构与非线性结构。
如果一个非空的数据结构满足下列两个条件:① 有且只有一个根结点;② 每个结点最多有一个前件,也最多有一个后件。则称该数据结构为线性结构,又称线性表。所以线性表、栈与队列、线性链表都是线性结构,而二叉树是非线性结构。
我们通常用时间复杂度和空间复杂度来衡量算法效率,算法的时间复杂度是指执行算法所需要的计算工作量;算法所执行的基本运算次数与问题的规模有关,而一个算法的空间复杂度,一般是指执行这个算法所需要的内存空间;一般来说,一种数据的逻辑结构根据需要可以表示成多种存储结构。
在先左后右的原则下,根据访问根结点的次序,二叉树的遍历可以分为3种:前序遍历、中序遍历和后序遍历。
前序遍历是指在访问根结点、遍历左子树与遍历右子树这三者中,首先访问根结点,然后遍历左子树,最后遍历右子树;并且遍历左、右子树时,仍然先访问根结点,然后遍历左子树,最后遍历右子树。二叉树的性质3:在任意一棵二叉树中,度为0的结点(即叶子结点)总是比度为2的结点多一个。
对于长度为n的线性表,在最坏的情况下,快速排序所需要的比较次数为n(n-1)/2;冒泡排序所需要的比较次数为n(n-1)/2;直接插入排序所需要的比较次数为n(n-1)/2;堆排序所需要的比较次数为
\[O(nlog2n)
\]所谓循环队列,就是将队列存储空间的最后一个位置绕到第1个位置,形成逻辑上的环状空间,供队列循环使用。所以循环队列属于线性结构。
循环队列的头指针front指向队列的第一个元素的前一位置,队尾指针rear指向队列的最后一个元素,循环队列的动态变化需要头尾指针共同反映。
循环队列的长度是:(sq.rear-sq.front+maxsize)%maxsize,所以循环队列的长度是由队头和队尾指针共同决定的。
二分法检索要求线性表结点按关键值排序且以顺序方式存储。在查找时,首先与表的中间位置上结点的关键值比较,若相等则检索成功;否则根据比较结果确定下一步在表的前半部分或后半部分继续进行。
二分法检索的效率比较高,设线性表有n个元素,则最多的检索次数为大于log2n(2为底数)的最小整数,最少的检索次数为1。
顺序存储结构就是用一组地址连续的存储单元依次存储该线性表中的各个元素,链式存储结构中各数据结点的存储序号是不连续的,并且各结点在存储空间中的位置关系与逻辑关系也不一致。
两者都可以存储线性的、有序的逻辑结构。顺序结构使用的是连续物理空间,链式结构可以使用零散的物理空间存储,链式结构更灵活,不存在谁节约空间的说法。
栈是一种只能在一端进行插入或删除操作的线性表。
在主程序调用子程序时要首先保存主程序当前的状态,然后去执行子程序,最终把子程序的执行结果返回到主程序调用子程序的位置,继续向下执行。这种调用符合栈"先进后出"的功能。
所谓算法的时间复杂度,是指执行算法所需要的计算工作量。为了能够比较客观地反映出一个算法的效率,在度量一个算法的工作量时,不仅应该与所使用的计算机、程序设计语言以及程序编制者无关,而且还应该与算法实现过程中的许多细节无关。为此,可以用算法在执行过程中所需基本运算的执行次数来度量算法的工作量。
线性表的链式存储结构所需要的存储空间一般要多于顺序存储结构
线性表的顺序存储结构的存储空间只用于存放结点数据,而链式存储结构的存储空间不仅要存放结点数据,还要存放数据的指针。
在栈中,栈底指针不变,栈中元素随栈顶指针的变化而动态变化
栈是一种特殊的线性表,这种线性表只能在固定的一端进行插入和删除操作,允许插入和删除的一端称为栈顶,另一端称为栈底。一个新元素只能从栈顶一端进入,删除时,只能删除栈顶的元素,即刚刚被插入的元素。所以栈又称"后进先出"表。
二级C复习的更多相关文章
- 二级python考试大纲以及考试指导复习方案
二级python考试大纲与复习指导 本人也是在备考二级py 可能理解不对的地方请指正 参考网络,侵权删除 考纲解读→ 一.考试介绍 1.1考试人群 全国计算机等级考试(python语言程序设计(二 ...
- web标准(复习)--4 纵向导航菜单及二级弹出菜单
今天我们开始学习纵向导航菜单及二级弹出菜单,包含以下内容和知识点: 纵向列表 标签的默认样式 css派生选择器 css选择器的分组 纵向二级列表 相对定位和绝对定位 一.纵向列表纵向列表或称为纵向导航 ...
- C语言复习: 二级指针和多级指针
二级指针内存模型建立 void main2() { int i = 0; //指针数组 char * p1[] = { "123", "456 ...
- C语言复习---二维数组和二级指针的关系:没关系,别瞎想(重点)
前提:一维数组和一维指针为什么可以替换使用? ] = { , , }; int *p = a; ; i < ; i++) printf("%d ", *(p + i)); 上 ...
- 数据库精华知识点总结(1)—数据库的三层模式和二级映像,E-R(实体联系图)图,关系模型
Data base: 长期存储在计算机内,有组织的,可共享的大量数据集合.基本特征:永久存储,可共享,有一定的物理和逻辑结构. Data base manage system(DBMS):用户和os之 ...
- [Java面试一]面试复习大纲.
一.Java基础部分 (搞定所有技术之后才考虑复习的技术点) 1.数组中的排序问题(笔试或者机试,前者可能性更大) 2.面向对象的理解 3.集合相关的问题,比如hashmap跟hashtable的区别 ...
- linux复习
linux的特点 - 免费的/开源 - 支持多线程/多用户 - 安全性好 - 对内存和文件管理优越 关机命令 ...
- java 复习001
java 复习001 比较随意的记录下我的java复习笔记 ArrayList 内存扩展方法 分配一片更大的内存空间,复制原有的数据到新的内存中,让引用指向新的内存地址 ArrayList在内存不够时 ...
- Python全国二级等级考试(2019)
一.前言 2018年9月随着全国计算机等级考试科目中加入“二级Python”,也确立了Python在国内的地位,猪哥相信Python语言势必会像PS那般普及.不久的将来,谁会Python谁就能获得女神 ...
随机推荐
- 关于Cefsharp无法拖动Dom元素的解决方法
如图所显示,Cefsharp在嵌入网页,页面有对Dom元素的拖动的操作,独立在浏览器上对网页元素的拖动是没有问题的,但是嵌入到Cefsharp上显示禁用的图标.排查了H5的代码,没有写入禁用拖动的操作 ...
- [atARC075F]Mirrored
假设$n=\sum_{i=0}^{k}a_{i}10^{i}$(其中$a_{k}>0$),则有$d=f(n)-n=\sum_{i=0}^{k}(10^{k-i}-10^{i})a_{i}$,考虑 ...
- 青龙+Nvjdc短信登陆对接Xdd-plus推送+Ninja CK登陆教程(11.23更新)
一.准备工作 1.shh工具(powshell.gitbash等等) 2.购买一台云服务器(阿里云.腾讯云都可以) 3.安装宝塔面板 宝塔Linux面板安装教程 - 2021年8月18日更新 - 7. ...
- 【Mysql】深入理解 MVCC 多版本并发控制
MVCC MVCC(Multi-Version Concurrency Control),即多版本并发控制.是 innodb 实现事务并发与回滚的重要功能.锁机制可以控制并发操作,但是其系统开销较大, ...
- CSS 基础 - Cascade and Inheritance
CSS 基础 - Cascade and Inheritance MDN学习笔记:https://developer.mozilla.org/zh-CN/docs/Learn/CSS/Building ...
- LOJ #2185 / 洛谷 P3329 - [SDOI2015]约数个数和(莫比乌斯函数)
LOJ 题面传送门 / 洛谷题面传送门 题意: 求 \(\sum\limits_{i=1}^n\sum\limits_{j=1}^md(ij)\),\(d(x)\) 为 \(x\) 的约数个数. \( ...
- Linux之vi和vim编辑器
目录 1. vi和vim简介 2. vi 和 vim 的三种常见模式 2.1 正常模式 2.2 插入模式 2.3 命令行模式 3. 三种模式间的切换 4. 常用快捷键案例 5. 常用命令 1. vi和 ...
- 【Redis集群原理专题】分析一下相关的Redis集群模式下的脑裂问题!
技术格言 世界上并没有完美的程序,但是我们并不因此而沮丧,因为写程序就是一个不断追求完美的过程. 什么是脑裂 字面含义 首先,脑裂从字面上理解就是脑袋裂开了,就是思想分家了,就是有了两个山头,就是有了 ...
- Windows端口被占用解决方法
Error 场景 启动 Java 项目失败,控制台显示 Error starting ApplicationContext. To display the conditions report`re-r ...
- 学习java 7.15
学习内容: 进程:正在运行的程序 是系统进行资源分配和调用的独立单位 每个进程都有它自己的内存空间和系统资源 线程:是进程中的单个顺序控制流,是一条执行路径 单线程:一个进程如果只有一条执行路径,则称 ...