zl程序教程

您现在的位置是:首页 >  其他

当前栏目

408需要背诵的知识点

知识点 需要 408
2023-09-11 14:20:39 时间

数据结构

数据结构常用公式

(一)栈:
1.出栈顺序,卡特兰数: 1 n + 1 C 2 n n \frac{1}{n+1}{\rm C}_{2n}^{n} n+11C2nn
C(1)=1,C(2)=2,C(3)=5,C(4)=14,C(5)=42


(二)树:
1.树的总结点数=1+度:
度为m的树( n m n_m nm为度为m的结点个数): n 0 + n 1 + n 2 + n 3 + n 4 + . . . + n m = 1 + 1 n 1 + 2 n 2 + 3 n 3 + 4 n 4 + . . . m n m n₀+n₁+n₂+n₃+n₄+...+n_m=1+1n₁+2n₂+3n₃+4n₄+...mn_m n0+n1+n2+n3+n4+...+nm=1+1n1+2n2+3n3+4n4+...mnm

2.n个结点的AVL树最大深度 / 高度为h的AVL树最少结点数:
n h = n h − 1 + n h − 2 + 1 n_h=n_{h-1}+n_{h-2}+1 nh=nh1+nh2+1
n 1 = 1 , n 2 = 2 , n 3 = 4 , n 4 = 7 n_1=1,n_2=2,n_3=4,n_4=7 n1=1,n2=2n3=4n4=7 n 5 = 12 , n 6 = 20 n_5=12,n_6=20 n5=12n6=20


(三)图:
1.连通图最少有n-1条边。则最小生成树恰好有n-1条边
2.n个结点的无向非连通图 最多 C n − 1 2 = ( n − 1 ) ( n − 2 ) 2 {\rm C}_{n-1}^2=\dfrac{(n-1)(n-2)}{2} Cn12=2(n1)(n2) 条边。若是任何情况下都是连通的,则至少需要 C n − 1 2 + 1 {\rm C}_{n-1}^2+1 Cn12+1条边


(四)排序:
1.归并排序,需要增加的虚归并段: k − u − 1 = k − ( n 0 − 1 ) % ( k − 1 ) − 1 k-u-1=k-(n_0-1)\%(k-1)-1 ku1=k(n01)%(k1)1



单链表

1.单链表结点的数据结构定义

typedef struct Node{
	int data;          //数据域
	struct Node *next; //指针域
}LNode,*LinkList;   

2.单链表结点的插入:


3.单链表结点的删除:

q = p->next;              //令p指向被删除结点
p->next = q->next;        //将*q结点从链中断开
free(q);				  //释放结点的存储空间





数组

1.C++语法:申请一个长度为n的辅助数组A,并初始化为空

int * A = new int[n];   //申请辅助计数数组
for(int i=0;i<n;i++) A[i]=0;   //计数数组清零





二叉树

1.二叉树结点的数据结构定义
C写法二叉树

typedef struct BiTNode{
	char data;                       //数据域
	struct BiTNode *lchild,*rchild;  //左、右孩子指针
}BiTNode,*BiTree;

C++写法二叉树(C++更简单)

struct TreeNode{
	int data;       //数据域
	TreeNode * leftChild;  //左子树
	TreeNode * rightChild; //右子树
};

2.二叉树的遍历: 递归(栈) / 非递归的while循环(队列)
(1)先序遍历

void PreOrder(BiTree T){
	if(T != NULL){
		visit(T);             //1.根:访问根结点
		PreOrder(T->lchild);  //2.左:递归遍历左子树
		PreOrder(T->rchild);  //3.右:递归遍历右子树
	}
}

(2)中序遍历

void InOrder(BiTree T){
	if(T != NULL){
	InOrder(T->lchild); //1.左:递归遍历左子树
	visit(T);           //2.根:访问根结点
	InOrder(T->rchild); //3.右:递归遍历右子树
	}
}

(3)后序遍历

void PostOrder(BiTree T){
	if(T != NULL){
		PostOrder(T->lchild); //1.左:递归遍历左子树
		PostOrder(T->rchild); //2.右:递归遍历右子树
		visit(T);             //3.根:访问根结点
	}
}

(4)层序遍历

void LevelOrder(BiTree T){
	InitQueue(Q);        //初始化辅助队列
	BiTree p;
	EnQueue(Q,T);        //根结点入队
	while(! IsEmpty(Q)){ //队列不空则循环
		DeQueue(Q,p);        //队头结点出队
		visit(p);            //访问出队结点
		if(p->lchild != NULL)
			EnQueue(Q,p->lchild); //左子树非空,则左子树根结点入队
		if(p->rchild != NULL)
			EnQueue(Q,p->rchild); //右子树非空,则右子树根结点入队
	}
}





B树

m阶B树结点子树关键字
最多 m m m m − 1 m-1 m1
最少 ⌈ m 2 ⌉ ⌈\dfrac{m}{2}⌉ 2m ⌈ m 2 ⌉ − 1 ⌈\dfrac{m}{2}⌉-1 2m1

B树根结点:最少有2棵子树,1个关键字







计算机组成原理

数据的表示与运算

1.8位补码所能表示的取值范围: − 2 7 ∼ 2 7 − 1 -2^7\sim 2^7-1 27271,即-128~127
2.算术移位与逻辑移位
算术移位:操作对象是 有符号数

码制添补代码
正数的原码、补码0
负数原码符号位仍为1,其余添0
负数补码符号位仍为1,左移添0,右移添1

逻辑移位:操作对象是 无符号数,逻辑左右移均添0


3.符号扩展

类型符号扩展的方法
1.正数的符号扩展高位全补0
2.负数原码的符号扩展最高位为符号位1,其他扩展位补0
3.负数补码的符号扩展最高位为符号位1,其他位补1 (整数补1,小数补0)

无论移位还是符号扩展:正数全补0,负数原码保持符号位是1不动,其他补0。负数补码,高位补1,低位补0



指令

1.计算机指令系统最多的指令条数 = 最多有多少种不同的操作码 = 2 指令操作码 O P 的位数 2^{指令操作码{\rm OP}的位数} 2指令操作码OP的位数
2.一行微指令序列代表一个时钟周期
3.①存储字长:存储单元的位数,看编址方式
②机器字长:CPU一次能处理的位数 = 内部数据通路位数 = 寄存器位数
③指令字长:一条指令的长度

4.PC = (PC) + 指令长度 + 偏移量

5.基址寻址与变址寻址

基址寻址①多道程序设计
②基址寄存器BR内容不可变 (由操作系统决定)
变址寻址①编制循环程序、数组
②变址寄存器IX内容可变 (由用户决定)



CPU

1.寄存器:
MAR位数:2MAR位数 = 主存空间大小 编址方式 \dfrac{主存空间大小}{编址方式} 编址方式主存空间大小 = 存储单元的个数
MDR位数:机器字长


寄存器

程序员可见寄存器程序员不可见寄存器
①程序计数器:PC① 存储器地址寄存器:MAR
 存储器数据寄存器:MDR
②程序状态字寄存器:PSW②指令寄存器:IR
  微指令寄存器:μIR
③通用寄存器GPRS:R0、R1、R2、R3③运算部件:移位寄存器SR、乘法器、先行进位链
④暂存器、锁存器DR

数据通路

1.控制信号由控制部件CU产生
2.取指周期的控制信号序列

PCout,MARin     //PC→MAR
Read            //M(MAR)→MDR
MDRout,IRin    //MDR→IR

在这里插入图片描述



五大技术

技术作用
Cache技术解决CPU与主存速度不匹配
缓冲技术解决CPU与外设速度不匹配
虚拟存储技术解决内存容量不足
通道技术减少外设对CPU的I/O操作控制请求,提高了CPU效率
并行技术提高整机的运行效率和吞吐率





操作系统

文件系统

1.磁盘索引块是由地址项组成的,可以不存满。
2.索引块(磁盘块)大小 / 地址项大小 = 每个索引块最多拥有多少个地址项
3.索引库的每一个地址项,指向一个磁盘块





计算机网络

各层协议一览

链路层:PPP、HDLC、CSMA
网络层:IP、ARP、ICMP、OSPF
传输层:TCP、UDP
应用层:DNS、FTP、SNMP、POP3、MIME、HTTP、DHCP、RIP、BGP



特殊IP地址

1.直接广播地址:目的网络号 + 主机号全1
2.本地广播地址(受限广播地址):255.255.255.255


TCP拥塞控制

(1)慢开始、拥塞避免
慢开始(从1开始double,乘法增大)
拥塞避免(从门限值ssh开始cwnd++,加法增大)
发生拥塞条件:超时
发生拥塞时的处理 s s h 新 = c w n d 拥塞时 2 , c w n d 新 = 1 \rm ssh_新= \dfrac{cwnd_{拥塞时}}{2},cwnd_新 =1 ssh=2cwnd拥塞时cwnd=1(慢开始)

(2)快重传、快恢复
快重传:收到3个上一条的ACK帧(3个冗余ACK),立刻重传该数据帧,不等超时
快恢复:优化拥塞时的处理, s s h 新 = c w n d 拥塞时 2 = c w n d 新 \rm ssh_新= \dfrac{cwnd_{拥塞时}}{2}=cwnd_新 ssh=2cwnd拥塞时=cwnd(快恢复,直接进入拥塞避免的加法增大阶段,跳过从1开始慢开始的阶段)
发生拥塞的条件:收到3个冗余ACK
发生拥塞的处理: s s h 新 = c w n d 拥塞时 2 = c w n d 新 \rm ssh_新= \dfrac{cwnd_{拥塞时}}{2}=cwnd_新 ssh=2cwnd拥塞时=cwnd

(3)门限值ssthesh的变化
刚开始,拥塞前: s s h 旧 = \rm ssh_旧= ssh= 慢开始和拥塞避免的分界线
拥塞后:      s s h 新 = c w n d 拥塞时 2 \rm ssh_新= \dfrac{cwnd_{拥塞时}}{2} ssh=2cwnd拥塞时

(4)总结:
在TCP连接建立和网络出现超时时,采用慢开始和拥塞避免算法。
在发送方收到冗余ACK时,采用快重传和快恢复算法。


帧、报文

1.DHCP报文都是广播报文目的IP:255.255.255.255,目的MAC:ff-ff-ff-ff-ff-ff,源IP:0.0.0.0


2.广播MAC帧:ff-ff-ff-ff-ff-ff


3.TTL(最大生存时间,Time to live)
数据报每经过一个路由器,TTL减1。是经过的路由器的个数,而不是路径费用。


4.路由表项的下一跳下一跳的是路由器接口名称 或者 路由器接口IP地址 或是 下一跳网络地址,而不是路由器本身的名字!


5.因特网Internet
若因特网Internet没有给出具体的IP地址,则可以将其视为默认路由 0.0.0.0/0