├── README.md ├── 操作系统 ├── 第1章 概述 │ └── 概述.md └── 第2章 进程管理 │ └── 第二章.md ├── 数据结构 ├── 第1章 绪论 │ ├── 批注 2020-03-25 224043.png │ └── 第一章 绪论.xmind ├── 第2章 线性表 │ ├── 单链表.cpp │ ├── 批注 2020-03-26 232754.png │ ├── 批注 2020-03-27 122454.png │ ├── 批注 2020-03-27 124407.png │ ├── 批注 2020-03-27 124636.png │ ├── 第二章 线性表.xmind │ ├── 链表习题.cpp │ ├── 顺序表.cpp │ └── 顺序表习题.cpp ├── 第3章 栈和队列 │ ├── ayUzRCUwQSU.png │ ├── 批注 2020-07-09 173827.png │ ├── 批注 2020-07-09 174359.png │ ├── 批注 2020-07-09 174925.png │ ├── 栈.md │ ├── 第三章 栈与队列.xmind │ └── 队列.md ├── 第4章 串 │ ├── v2-67dd66b86323d3d08f976589cf712a1a_1440w.png │ ├── 串的模式匹配.md │ ├── 批注 2020-07-10 160539.png │ └── 第四章 串.xmind ├── 第5章 树与二叉树 │ ├── 二叉排序树.md │ ├── 二叉树的遍历.md │ ├── 批注 2020-07-11 154229.png │ ├── 批注 2020-07-11 171429.png │ ├── 批注 2020-07-14 170228.png │ ├── 批注 2020-07-14 173314.png │ ├── 批注 2020-07-14 173332.png │ ├── 批注 2020-07-14 173346.png │ ├── 批注 2020-07-14 173401.png │ ├── 批注 2020-07-14 175139.png │ ├── 批注 2020-07-15 181759.png │ ├── 真题解答.md │ ├── 第五章 树与二叉树.xmind │ └── 线索二叉树.md ├── 第6章 图 │ ├── 1.png │ ├── 2.1.png │ ├── 2.2.png │ ├── 3.png │ ├── 4.png │ ├── a.png │ ├── aa.png │ ├── aaa.png │ ├── dj1.png │ ├── dj2.png │ ├── dj3.png │ ├── fl1.png │ ├── fl2.png │ ├── fl3.png │ ├── 图的存储和基本操作.md │ ├── 图的应用.md │ ├── 图的遍历.md │ ├── 批注 2020-07-23 163518.png │ └── 第六章 图.xmind ├── 第7章 查找 │ ├── 1.png │ ├── 2.png │ ├── 3.png │ ├── 查找.md │ └── 第七章 查找.xmind └── 第8章 排序 │ ├── 1.png │ ├── 2.png │ ├── 3.png │ ├── 排序.md │ └── 第八章 排序.xmind ├── 立即推.jpg ├── 网络安全基础与应用 ├── 1、概论.xmind ├── 2、密码学.xmind ├── 3、网络安全应用.xmind └── 4、系统安全.xmind ├── 计算机组成原理 ├── 第1章 概述 │ └── 第一章 概述.md ├── 第2章 数据的表示和运算 │ ├── 批注 2020-08-20 175911.png │ ├── 批注 2020-08-20 175946.png │ ├── 批注 2020-08-20 183159.png │ ├── 第二章 数据的表示和运算.xmind │ └── 第二章.md └── 第7章 输入输出系统 │ └── IO.md └── 计算机网络 ├── 第1章 绪论 └── 第一章 概述.xmind ├── 第2章 物理层 ├── 批注 2020-03-21 110405.png ├── 批注 2020-03-21 111332.png ├── 批注 2020-03-21 112625.png └── 第二章 物理层.xmind ├── 第3章 数据链路层 ├── JUU2JTlDJTg.png ├── QQ截图20200313211614.jpg ├── 批注 2020-03-13 221429.png ├── 批注 2020-03-13 221757.png ├── 批注 2020-03-13 223128.png ├── 批注 2020-03-13 225659.png ├── 批注 2020-03-13 232315.png ├── 批注 2020-03-14 230521.png ├── 批注 2020-03-14 230809.png ├── 批注 2020-03-20 221351.png ├── 批注 2020-03-20 224301.png ├── 批注 2020-03-20 224815.png └── 第三章 数据链路层.xmind ├── 第4章 网络层 ├── QQ截图20200225180411.jpg ├── QQ截图20200226161518.jpg ├── QQ截图20200226171425.jpg ├── QQ截图20200226181437.jpg ├── QQ截图20200226214603.jpg ├── QQ截图20200226232313.jpg ├── QQ截图20200226232517.jpg ├── QQ截图20200226232707.jpg ├── 批注 2020-02-25 175759.png └── 第四章 网络层.xmind ├── 第5章 运输层 ├── QQ截图20200229154319.jpg ├── QQ截图20200229165520.jpg ├── QQ截图20200301103830.jpg ├── QQ截图20200301104117.jpg ├── QQ截图20200301104643.jpg ├── QQ截图20200301112329.jpg ├── QQ截图20200301112353.jpg ├── QQ截图20200301112428.jpg ├── QQ截图20200301112512.jpg ├── QQ截图20200301113045.jpg ├── QQ截图20200301113117.jpg ├── 批注 2020-03-01 164003.png ├── 批注 2020-03-01 175851.png ├── 批注 2020-03-01 184309.png └── 第五章 运输层.xmind └── 第6章 应用层 ├── 批注 2020-03-21 182515.png ├── 批注 2020-03-21 184009.png ├── 批注 2020-03-21 184304.png ├── 批注 2020-03-21 184953.png ├── 批注 2020-03-21 185300.png └── 第六章 应用层.xmind /README.md: -------------------------------------------------------------------------------- 1 | # 计算机考研专业课——CS408 2 | 3 | ## 写在前面: 4 | + 408的四门科目的知识点总结,内容排版上结合CS408课本和王道计算机,并结合了作者完成王道课后题时所踩的坑的总结(在文件里特别标出) 5 | 6 | + **采用XMind:ZEN 2020制作,请使用等于或高于此版本的XMind打开。** 7 | 8 | + 如果对你有帮助有启发,欢迎**点个star**资瓷一下作者;同时欢迎有**对内容更好想法/懂得xmind排版**的朋友提交issue帮助这个项目更好 9 | 10 | + ~~能填多少坑取决于作者决定考哪个学校;如果决定的学校不是考408,那我只会更新那个学校的科目的总结(┓( ´∀` )┏)咕咕咕~~ 11 | + ~~最终决定考408~~ 12 | + ~~TODO:在21研考结束后,把所有的经验资料整理放到这个项目下~~ 13 | + **上岸京区某研究所专硕,所以咕了(正大光明理直气壮)** 14 | 15 | 16 | ## NOTE: 17 | + 不适合在XMind里表达的内容,全部写在了同文件夹里的`*.md`文件或是`*.cpp`文件; 18 | 19 | + **务必重点关注文件夹里的`*.md`文件** 20 | 21 | + 在Markdown文件中使用了latex代码,请确保你的Markdown编辑器支持latex扩展以提高阅读体验 22 | 23 | > 或许你也可以参考[这个项目](https://github.com/SSHeRun/CS-Xmind-Note) 24 | 25 | ![立即推.jpg](https://i.loli.net/2020/09/17/NQVePmIOlBcYsKG.jpg) 26 | 27 | --- 28 | 29 | ## 计算机网络 30 | + [x] [第一章 概论](https://github.com/Alice-and-Bob/CS408/blob/master/%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%BD%91%E7%BB%9C/%E7%AC%AC1%E7%AB%A0%20%E7%BB%AA%E8%AE%BA/%E7%AC%AC%E4%B8%80%E7%AB%A0%20%E6%A6%82%E8%BF%B0.xmind) 31 | + [x] [第二章 物理层](https://github.com/Alice-and-Bob/CS408/blob/master/%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%BD%91%E7%BB%9C/%E7%AC%AC2%E7%AB%A0%20%E7%89%A9%E7%90%86%E5%B1%82/%E7%AC%AC%E4%BA%8C%E7%AB%A0%20%E7%89%A9%E7%90%86%E5%B1%82.xmind) 32 | + [x] [第三章 数据链路层](https://github.com/Alice-and-Bob/CS408/blob/master/%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%BD%91%E7%BB%9C/%E7%AC%AC3%E7%AB%A0%20%E6%95%B0%E6%8D%AE%E9%93%BE%E8%B7%AF%E5%B1%82/%E7%AC%AC%E4%B8%89%E7%AB%A0%20%E6%95%B0%E6%8D%AE%E9%93%BE%E8%B7%AF%E5%B1%82.xmind) 33 | + [x] [第四章 网络层](https://github.com/Alice-and-Bob/CS408/blob/master/%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%BD%91%E7%BB%9C/%E7%AC%AC4%E7%AB%A0%20%E7%BD%91%E7%BB%9C%E5%B1%82/%E7%AC%AC%E5%9B%9B%E7%AB%A0%20%E7%BD%91%E7%BB%9C%E5%B1%82.xmind) 34 | + [x] [第五章 运输层](https://github.com/Alice-and-Bob/CS408/blob/master/%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%BD%91%E7%BB%9C/%E7%AC%AC5%E7%AB%A0%20%E8%BF%90%E8%BE%93%E5%B1%82/%E7%AC%AC%E4%BA%94%E7%AB%A0%20%E8%BF%90%E8%BE%93%E5%B1%82.xmind) 35 | + [x] [第六章 应用层](https://github.com/Alice-and-Bob/CS408/blob/master/%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%BD%91%E7%BB%9C/%E7%AC%AC6%E7%AB%A0%20%E5%BA%94%E7%94%A8%E5%B1%82/%E7%AC%AC%E5%85%AD%E7%AB%A0%20%E5%BA%94%E7%94%A8%E5%B1%82.xmind) 36 | ## 数据结构 37 | + [x] [第一章 绪论](https://github.com/Alice-and-Bob/CS408/blob/master/%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84/%E7%AC%AC1%E7%AB%A0%20%E7%BB%AA%E8%AE%BA/%E7%AC%AC%E4%B8%80%E7%AB%A0%20%E7%BB%AA%E8%AE%BA.xmind) 38 | + [x] [第二章 线性表](https://github.com/Alice-and-Bob/CS408/blob/master/%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84/%E7%AC%AC2%E7%AB%A0%20%E7%BA%BF%E6%80%A7%E8%A1%A8/%E7%AC%AC%E4%BA%8C%E7%AB%A0%20%E7%BA%BF%E6%80%A7%E8%A1%A8.xmind) 39 | + [x] [第三章 栈和队列](https://github.com/Alice-and-Bob/CS408/blob/master/%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84/%E7%AC%AC3%E7%AB%A0%20%E6%A0%88%E5%92%8C%E9%98%9F%E5%88%97/%E7%AC%AC%E4%B8%89%E7%AB%A0%20%E6%A0%88%E4%B8%8E%E9%98%9F%E5%88%97.xmind) 40 | + [x] [第四章 串](https://github.com/Alice-and-Bob/CS408/blob/master/%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84/%E7%AC%AC4%E7%AB%A0%20%E4%B8%B2/%E7%AC%AC%E5%9B%9B%E7%AB%A0%20%E4%B8%B2.xmind) 41 | + [x] [第五章 树与二叉树](https://github.com/Alice-and-Bob/CS408/blob/master/%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84/%E7%AC%AC5%E7%AB%A0%20%E6%A0%91%E4%B8%8E%E4%BA%8C%E5%8F%89%E6%A0%91/%E7%AC%AC%E4%BA%94%E7%AB%A0%20%E6%A0%91%E4%B8%8E%E4%BA%8C%E5%8F%89%E6%A0%91.xmind) 42 | + [x] [第六章 图](https://github.com/Alice-and-Bob/CS408/blob/master/%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84/%E7%AC%AC6%E7%AB%A0%20%E5%9B%BE/%E7%AC%AC%E5%85%AD%E7%AB%A0%20%E5%9B%BE.xmind) 43 | + [x] [第七章 查找](https://github.com/Alice-and-Bob/CS408/blob/master/%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84/%E7%AC%AC7%E7%AB%A0%20%E6%9F%A5%E6%89%BE/%E7%AC%AC%E4%B8%83%E7%AB%A0%20%E6%9F%A5%E6%89%BE.xmind) 44 | + [x] [第八章 排序](https://github.com/Alice-and-Bob/CS408/blob/master/%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84/%E7%AC%AC8%E7%AB%A0%20%E6%8E%92%E5%BA%8F/%E7%AC%AC%E5%85%AB%E7%AB%A0%20%E6%8E%92%E5%BA%8F.xmind) 45 | 46 | ## 计算机组成原理 47 | + [x] 第一章 计算机系统概述 48 | + [x] 第二章 数据的表示和运算 49 | + [x] 第三章 存储系统 50 | + [x] 第四章 指令系统 51 | + [x] 第五章 中央处理器 52 | + [x] 第六章 总线 53 | + [x] 第七章 输入输出系统 54 | 55 | ## 操作系统 56 | + [x] 第一章 计算机系统概述 57 | + [x] 第二章 进程管理 58 | + [x] 第三章 内存管理 59 | + [x] 第四章 文件管理 60 | + [x] 第五章 IO管理 61 | 62 | 63 | ## 网络安全基础与应用 64 | + [x] [第一章 概论](https://github.com/Alice-and-Bob/CS408/blob/master/%E7%BD%91%E7%BB%9C%E5%AE%89%E5%85%A8%E5%9F%BA%E7%A1%80%E4%B8%8E%E5%BA%94%E7%94%A8/1%E3%80%81%E6%A6%82%E8%AE%BA.xmind) 65 | + [x] [第二章 密码学](https://github.com/Alice-and-Bob/CS408/blob/master/%E7%BD%91%E7%BB%9C%E5%AE%89%E5%85%A8%E5%9F%BA%E7%A1%80%E4%B8%8E%E5%BA%94%E7%94%A8/2%E3%80%81%E5%AF%86%E7%A0%81%E5%AD%A6.xmind) 66 | + [x] [第三章 应用安全](https://github.com/Alice-and-Bob/CS408/blob/master/%E7%BD%91%E7%BB%9C%E5%AE%89%E5%85%A8%E5%9F%BA%E7%A1%80%E4%B8%8E%E5%BA%94%E7%94%A8/3%E3%80%81%E7%BD%91%E7%BB%9C%E5%AE%89%E5%85%A8%E5%BA%94%E7%94%A8.xmind) 67 | + [ ] 第四章 系统安全 68 | -------------------------------------------------------------------------------- /操作系统/第1章 概述/概述.md: -------------------------------------------------------------------------------- 1 | # 概述 2 | ## 并发和并行 3 | - 并发:宏观上来看计算机在同时运行多个程序,指在一个时间段里多个程序并行 4 | - 并行:微观上来看在同一时间下,有多个程序在一起运行,是真正的并行,需要多处理器才能实现 5 | ## 系统调用 6 | - 由操作系统提供的,涉及到系统核心态权限操作,用户只有调用系统调用才能执行核心态指令。用户在调用系统调用前,先传递好参数,再使用自陷指令把执行权限交给操作系统内核,执行核心态指令 7 | - 系统调用类型: 8 | - 设备管理 9 | - 文件管理 10 | - 进程控制 11 | - 进程通信 12 | - 内存管理 13 | - 用户态转向核心态: 14 | - 用户执行系统调用 15 | - 发生中断 16 | - 用户程序发生了一个错误状态 17 | - 用户程序试图执行一个特权指令 18 | - 中断返回指令是特权指令,从核心态转向用户态 19 | ## 中断和异常 20 | - 中断:又称外中断,指来自CPU执行指令以外的事件的发生 21 | - 异常:内中断、例外、陷入,指源自CPU执行指令内部的事件,如非法操作码、地址越界、算术溢出、虚存系统缺页、trap指令 -------------------------------------------------------------------------------- /操作系统/第2章 进程管理/第二章.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Alice-and-Bob/CS408/a3c5fe965ad283b517ad46023a8bd1f0c4103413/操作系统/第2章 进程管理/第二章.md -------------------------------------------------------------------------------- /数据结构/第1章 绪论/批注 2020-03-25 224043.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Alice-and-Bob/CS408/a3c5fe965ad283b517ad46023a8bd1f0c4103413/数据结构/第1章 绪论/批注 2020-03-25 224043.png -------------------------------------------------------------------------------- /数据结构/第1章 绪论/第一章 绪论.xmind: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Alice-and-Bob/CS408/a3c5fe965ad283b517ad46023a8bd1f0c4103413/数据结构/第1章 绪论/第一章 绪论.xmind -------------------------------------------------------------------------------- /数据结构/第2章 线性表/单链表.cpp: -------------------------------------------------------------------------------- 1 | /*** 2 | * @Author: Alice-and-Bob 3 | * @Date: 2020-03-31 22:03:34 4 | * @LastEditTime: 2020-04-02 09:30:54 5 | * @LastEditors: Alice-and-Bob 6 | * @Description: 线性表基本操作在链表上的cpp实现,代码实现不全,不能运行;用于演示算法步骤 7 | * @******************************************* 8 | * @* 全世界程序员,联合起来! * 9 | * @* Programmers of all lands, Unite! * 10 | * @* программист всех стран, соединяйтесь! * 11 | * @******************************************* 12 | */ 13 | 14 | /*------------------------单链表------------------------*/ 15 | 16 | #define END 1000000 //预先确定的结束值 17 | typedef struct LNode 18 | { 19 | int data; 20 | struct LNode *next; 21 | } LNode, *LinkList; 22 | 23 | //头插法建立链表 24 | LinkList List_HeadInsert(Linklist &L) 25 | { 26 | 27 | LNode *s; 28 | int x; 29 | L = (LinkList)malloc(sizeof(LNode)); 30 | L.next = NULL; 31 | while (cin >> x) 32 | { 33 | if (x == END) 34 | { 35 | break; 36 | } 37 | else 38 | { 39 | s = (LinkList)malloc(sizeof(LNode)); 40 | s.data = x; 41 | s.next = L.next; 42 | L.next = s; 43 | } 44 | } 45 | return L; 46 | } 47 | //尾插法建立链表 48 | LinkList List_TailInsert(LinkList L) 49 | { 50 | int x; 51 | L = (LinkList)malloc(sizeof(LNode)); 52 | LNode *s, *t = L; //t是尾指针,总指向链表最后一个节点;s是临时节点 53 | while (cin >> x) 54 | { 55 | if (x == END) 56 | { 57 | break; 58 | } 59 | else 60 | { 61 | s = (LinkList)malloc(sizeof(LNode)); 62 | s.data = x; 63 | s.next = NULL; 64 | r.next = s; 65 | r = r.next; 66 | } 67 | } 68 | //r.next = NULL; 69 | return L; 70 | } 71 | //按序号查找节点 72 | LNode *GetElem(LinkList L, int i) 73 | { 74 | LNode *s = L.next; 75 | int j = 1; 76 | if (i == 0) 77 | { 78 | return L 79 | } 80 | else if (i < 1) 81 | { 82 | return NULL; 83 | } 84 | 85 | while (s && j < i) 86 | { 87 | s = s.next; 88 | j++; 89 | } 90 | return s; 91 | } 92 | //按值查找节点 93 | LNode *LocalteElem(LinkList L, int x) 94 | { 95 | LNode *s = L.next; 96 | while (s.data != x && s.next != NULL) 97 | { 98 | s = s.next; 99 | } 100 | return s; 101 | } 102 | //在某个给定节点前插 103 | {//前插操作 104 | p = GetElem(L, i - 1); //找到要插入的前驱节点 105 | s.next = p.next; 106 | p.next = s; 107 | } 108 | {//后插转前插 109 | s.next = p.next; 110 | p.next = s; 111 | temp = p.data; 112 | p.data = s.data; 113 | s.data = temp; 114 | } 115 | //删掉某个给定节点 116 | {//前删操作 117 | p = GetElem(L, i-1); 118 | q = p.next; 119 | p.next = q.next; 120 | free(q); 121 | } 122 | {//后删转前删 123 | q = p.next; 124 | p.data = p.next.data; 125 | p.next = q.next; 126 | free(q); 127 | } 128 | 129 | 130 | 131 | /*------------------------改进链表----------------------*/ 132 | //双链表 133 | typedef struct DNode 134 | { 135 | ElemType data; 136 | struct DNode *prior,*next;//前驱指针,后继指针 137 | }; 138 | //插入节点 139 | { 140 | s.next = p.next; 141 | p.next.prior = s; 142 | s.prior = p; 143 | p.next = s; 144 | } 145 | //删除节点 146 | { 147 | p.next = q.next; 148 | q.next.prior = p; 149 | free(q); 150 | } 151 | -------------------------------------------------------------------------------- /数据结构/第2章 线性表/批注 2020-03-26 232754.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Alice-and-Bob/CS408/a3c5fe965ad283b517ad46023a8bd1f0c4103413/数据结构/第2章 线性表/批注 2020-03-26 232754.png -------------------------------------------------------------------------------- /数据结构/第2章 线性表/批注 2020-03-27 122454.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Alice-and-Bob/CS408/a3c5fe965ad283b517ad46023a8bd1f0c4103413/数据结构/第2章 线性表/批注 2020-03-27 122454.png -------------------------------------------------------------------------------- /数据结构/第2章 线性表/批注 2020-03-27 124407.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Alice-and-Bob/CS408/a3c5fe965ad283b517ad46023a8bd1f0c4103413/数据结构/第2章 线性表/批注 2020-03-27 124407.png -------------------------------------------------------------------------------- /数据结构/第2章 线性表/批注 2020-03-27 124636.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Alice-and-Bob/CS408/a3c5fe965ad283b517ad46023a8bd1f0c4103413/数据结构/第2章 线性表/批注 2020-03-27 124636.png -------------------------------------------------------------------------------- /数据结构/第2章 线性表/第二章 线性表.xmind: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Alice-and-Bob/CS408/a3c5fe965ad283b517ad46023a8bd1f0c4103413/数据结构/第2章 线性表/第二章 线性表.xmind -------------------------------------------------------------------------------- /数据结构/第2章 线性表/链表习题.cpp: -------------------------------------------------------------------------------- 1 | /*** 2 | * @Author: Alice-and-Bob 3 | * @Date: 2020-04-17 22:54:59 4 | * @LastEditTime: 2020-07-05 15:59:35 5 | * @LastEditors: Alice-and-Bob 6 | * @Description: 7 | * @******************************************* 8 | * @* 全世界程序员,联合起来! * 9 | * @* Programmers of all lands, Unite! * 10 | * @* программист всех стран, соединяйтесь! * 11 | * @******************************************* 12 | */ 13 | 21、 14 | //1、遍历单链表统计元素个数为n;从头指针所指向的节点开始从0遍历到n-k的位置; 15 | //2、从list指向的第一个节点开始遍历链表,同时用一个变量n记录元素个数;获得元素个数n后,n与k比较,若nnext; 37 | } 38 | cout << p->data; 39 | return 1; 40 | } 41 | } 42 | 43 | 22、 44 | //1、求链表长度m,n。对pq进行对齐,使其到链表尾的距离相等;同时前进,当p=q时,即取得位置 45 | typedef struct Node 46 | { 47 | char data; 48 | struct Node *next; 49 | } SNode; 50 | 51 | int listlen(SNode *head) 52 | { 53 | int len = 0; 54 | while (head->next != NULL) 55 | { 56 | len++; 57 | head = head->next; 58 | } 59 | return len; 60 | } 61 | 62 | SNode *find_addr(SNode *str1, SNode *str2) 63 | { 64 | int m, n; 65 | SNode *p = str1, *q = str2; 66 | m = listlen(str1); 67 | n = listlen(str2); 68 | 69 | if (m > n) 70 | { 71 | for (int i = 0; i < m - n + 1; i++) 72 | { 73 | p = p->next; 74 | } 75 | } 76 | else 77 | { 78 | for (int i = 0; i < n - m + 1; i++) 79 | { 80 | q = q->next; 81 | } 82 | } 83 | while (p->next != NULL && q->next != p->next) 84 | { 85 | p = p->next; 86 | q = q->next; 87 | } 88 | return p - next; 89 | } //O(len1+len2) 90 | 91 | 23、 92 | //1、新建一个大小为n+1的辅助数组q默认值全为0,从头开始扫描源链表,对某个链表元素的data,访问q[|data|],如果为0,则改为1;如果为1,则删除当前链表节点 93 | typedef struct Node 94 | { 95 | int data; 96 | struct Node *next; 97 | } SNode; 98 | 99 | void func(SNode *p, int n) 100 | { 101 | int q[n + 1] = {0}; 102 | SNode t; 103 | while (p->next != NULL) 104 | { 105 | if (q[abs(p->next->data)] == 0) 106 | { 107 | q[abs(p->next->data)] = 1; 108 | } 109 | else 110 | { 111 | t = p->next; 112 | p->next = p->next->next; 113 | free(t); 114 | } 115 | p = p->next; 116 | } //处理了前m-1个 117 | //对于最后一个链表元素 118 | if (q[abs(p->data)] == 1) 119 | free(p); 120 | 121 | } //Ot(m),Os(n) 122 | 123 | 25、 124 | //1、找到链表中间节点,后半段原地逆序,再按要求从头和中间位置每次去一个节点连接成新链表 125 | typedef struct node 126 | { 127 | int data; 128 | struct node *next; 129 | } Node; 130 | 131 | void func(NODE *h) 132 | { 133 | Node *p, *q, *r, *s; 134 | p=h;q=h; 135 | while(q->next!=NULL){ 136 | p=p->next; 137 | q=q->next; 138 | if(q->next!=NULL) q=q->next; 139 | }//p在链表中间位置 140 | q=p->next; 141 | p->next=NULL; 142 | //断开前后两段链表连接 143 | while(q!=NULL){ 144 | r=q->next; 145 | q->next=p->next; 146 | p->next=q; 147 | q=r; 148 | } 149 | //后半段逆序 150 | while(q!=NULL){ 151 | r=q->next; 152 | q->next=s->next; 153 | s->next=q; 154 | s=q->next; 155 | q=r; 156 | } 157 | //按要求重组 158 | }//O(n) -------------------------------------------------------------------------------- /数据结构/第2章 线性表/顺序表.cpp: -------------------------------------------------------------------------------- 1 | /*** 2 | * @Author: Alice-and-Bob 3 | * @Date: 2020-03-26 23:45:49 4 | * @LastEditTime: 2020-03-27 12:05:27 5 | * @LastEditors: Alice-and-Bob 6 | * @Description: 顺序表的基本操作cpp实现 7 | * @ 8 | * @全世界无产者,联合起来! 9 | * @Workers of all lands, Unite! 10 | * @Пролетарии всех стран, соединяйтесь! 11 | */ 12 | 13 | bool ListInsert(SqList &L, int i, Elemtype e) 14 | { 15 | /*** 16 | * @description:实现把元素e插入到顺序表L的第i个位置 17 | * @param {type} 18 | * @return: 19 | */ 20 | if (i < 0 || i > L.length + 1) 21 | { 22 | return false; 23 | } 24 | if (L.length >= MaxSize) 25 | { 26 | return false; 27 | } 28 | for (int j = L.length; j >= i; j--) 29 | { 30 | L.data[j] = L.data[j - 1]; 31 | } 32 | L.data[i - 1] = e; 33 | L.length++; 34 | return true; 35 | } 36 | 37 | bool ListDelete(SqList &L, int i, Elemtype &e) 38 | { 39 | /*** 40 | * @description:实现删除顺序表L的第i个元素,使用e返回被删除的元素 41 | * @param {type} 42 | * @return: 43 | */ 44 | if (i < 0 || i > L.length + 1) 45 | { 46 | return false; 47 | } 48 | e = L.data[i - 1]; 49 | for (int j = i; j < L.length; j++) 50 | { 51 | L.data[j - 1] = L.data[j]; 52 | } 53 | L.length--; 54 | return true 55 | } 56 | 57 | int LocateElem(SqList L, ElemType e) 58 | { 59 | /*** 60 | * @description: 实现在顺序表里按序查找第一个值为e的元素 61 | * @param {type} 62 | * @return: 63 | */ 64 | for (int i = 0; i < L.length; i++) 65 | { 66 | if (L.data[i] == e) 67 | { 68 | return i + 1; 69 | } 70 | } 71 | return 0; 72 | } -------------------------------------------------------------------------------- /数据结构/第2章 线性表/顺序表习题.cpp: -------------------------------------------------------------------------------- 1 | 1、 int foo() 2 | { 3 | if (L.length() <= 0) 4 | { //空 5 | print("Error"); 6 | exit; 7 | } 8 | int flag = 0; 9 | int temp; 10 | for (int i = 0; i < L.length(); i++) 11 | { //找到最小值的地址 12 | if (L[i] > L[i + 1]) 13 | { 14 | flag = i + 1; 15 | } 16 | } 17 | temp = L[flag]; 18 | L[flag] = L[n - 1]; 19 | return temp; 20 | } 21 | 22 | 2、 void foo() 23 | { 24 | /* 25 | 一个临时变量t;开始时最后一位数组元素命名为p 26 | 每次取p的前一位元素赋给t; 27 | p之后直到数组尾的元素全体左移一位; 28 | t赋给数组尾; 29 | 循环直到L.length()次; 30 | */ 31 | } 32 | 33 | 3、 34 | //不可能在时间复杂度O(n) 空间复杂度O(1)下完成删除线性表中n个值为x的元素 35 | /* 36 | 计数器k记录符合条件元素已有个数; 37 | 从数组头开始,如果有符合条件的数组元素,则把其后一个元素p,复制到p前k个元素位置 38 | 直到数组尾 39 | */ 40 | 41 | 4、 void 42 | foo(int &L, int s, int l) 43 | { 44 | if (s >= t || L.length() <= 0) 45 | { 46 | printf("Error"); 47 | exit; 48 | } 49 | for (int i = 0; i < n; i++) 50 | { 51 | if (s < L[i] < t) 52 | { 53 | L.ListDelete(i) 54 | } 55 | } 56 | return; 57 | } 58 | 59 | 5、 void foo(int &L, int s, int l) 60 | { 61 | if (s >= t || L.length() <= 0) 62 | { 63 | printf("Error"); 64 | exit; 65 | } 66 | for (int i = 0; i < n; i++) 67 | { 68 | if (s <= L[i] <= t) 69 | { 70 | L.ListDelete(i) 71 | } 72 | } 73 | return; 74 | } 75 | 76 | 6、 77 | //临时变量temp,数组首指针,temp等于第一个数据元素,向后对比,遇到相同的就删除该节点,不同的则更新temp,重复向后遍历对比;直到数组尽头 78 | 79 | 7、 80 | //有序顺序表A、B,指针a,b,从首元素开始对比,若a>b,则b进入新数组,b向后进一位再对比;谁小谁进入新数组并后进一位再对比;当到一个数组的尽头时, 81 | //另一个数组剩下的元素统一进入新数组 82 | 83 | 8、 84 | //开个m+n的新数组,线性表b先入队,线性表a再入队,再把新数组覆盖回去 85 | 86 | 9、 87 | //折半查找到x元素,最终得到唯一确定的数组下标i,若A[i]==x,则交换A[i]和A[i+1];否则在A[i]后调用插入操作插入元素x 88 | 89 | 10、 90 | // 91 | 92 | 11、 93 | //1、按序对比,同时计次,达到次数的元素值即为两序列的中位数 94 | //2、 95 | int L; 96 | int s1[L], int s2[L]; 97 | int s[L]; 98 | int foo() 99 | { 100 | int t = 0; 101 | int ia = 0; 102 | int ib = 0; 103 | for (int i = 0; i < L; i++) 104 | { 105 | if (s1[ia] <= s2[ib]) 106 | { 107 | s[t]=s1[ia]; 108 | ia++; 109 | } 110 | else 111 | { 112 | s[t]=s2[ib]; 113 | ib++; 114 | } 115 | t++; 116 | } 117 | return s[L-1]; 118 | } 119 | //3、时间复杂度O(n); 空间复杂度O(n) 120 | 121 | 12、 122 | //1、众数,且等于众数的元素数要大于总元素数的一半 123 | //2、 124 | int temp[n]; 125 | for(int i = 0; imax){ 132 | max = temp[i]; 133 | max_addr = i; 134 | } 135 | } 136 | if(i>n/2) 137 | { 138 | return temp[i]; 139 | } 140 | else 141 | { 142 | return -1; 143 | } 144 | 145 | //3、空间n,时间n 146 | 147 | 13、 148 | //1、 149 | -------------------------------------------------------------------------------- /数据结构/第3章 栈和队列/ayUzRCUwQSU.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Alice-and-Bob/CS408/a3c5fe965ad283b517ad46023a8bd1f0c4103413/数据结构/第3章 栈和队列/ayUzRCUwQSU.png -------------------------------------------------------------------------------- /数据结构/第3章 栈和队列/批注 2020-07-09 173827.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Alice-and-Bob/CS408/a3c5fe965ad283b517ad46023a8bd1f0c4103413/数据结构/第3章 栈和队列/批注 2020-07-09 173827.png -------------------------------------------------------------------------------- /数据结构/第3章 栈和队列/批注 2020-07-09 174359.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Alice-and-Bob/CS408/a3c5fe965ad283b517ad46023a8bd1f0c4103413/数据结构/第3章 栈和队列/批注 2020-07-09 174359.png -------------------------------------------------------------------------------- /数据结构/第3章 栈和队列/批注 2020-07-09 174925.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Alice-and-Bob/CS408/a3c5fe965ad283b517ad46023a8bd1f0c4103413/数据结构/第3章 栈和队列/批注 2020-07-09 174925.png -------------------------------------------------------------------------------- /数据结构/第3章 栈和队列/栈.md: -------------------------------------------------------------------------------- 1 | # 栈的顺序存储 2 | ## 顺序存储数据结构定义 3 | ```cpp 4 | #define MaxSize 50 5 | typedef struct 6 | { 7 | Elemtype data[MaxSize]; 8 | int top; 9 | }SqStack; 10 | ``` 11 | ## 顺序栈的基本运算 12 | ### 1. 初始化 13 | ```cpp 14 | void InitStack(SqStack &S){ 15 | S.top = -1; 16 | } 17 | ``` 18 | ### 2. 判定空 19 | ```cpp 20 | bool StackEmpty(SqStack &S){ 21 | if(S.top == -1){ 22 | return true; 23 | } 24 | else{ 25 | return false; 26 | } 27 | } 28 | ``` 29 | ### 3. 进栈 30 | ```cpp 31 | bool Push(SqStack &S, Elemtype x){ 32 | if(S.top == MaxSize-1){ 33 | return false; 34 | } 35 | S.data[++S.top] = x; 36 | return true; 37 | } 38 | ``` 39 | ### 4. 出栈 40 | ```cpp 41 | bool Pop(Sqstack &S, Elemtype &x){ 42 | if(S.top == -1){ 43 | return false; 44 | } 45 | x = S.data[S.top--]; 46 | return true; 47 | } 48 | ``` 49 | ### 5. 读栈顶元素 50 | ```cpp 51 | bool GetTop(Sqstack &S, Elemtype &x){ 52 | if(S.top == -1){ 53 | return false; 54 | } 55 | x = S.data[S.top]; 56 | return true; 57 | } 58 | ``` 59 | 60 | 61 | # 栈的链式存储结构 62 | ## 数据结构 63 | ```cpp 64 | typedef struct Linknode{ 65 | Elemtype data; 66 | struct Linknode *next; 67 | }*LiStack; 68 | ``` -------------------------------------------------------------------------------- /数据结构/第3章 栈和队列/第三章 栈与队列.xmind: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Alice-and-Bob/CS408/a3c5fe965ad283b517ad46023a8bd1f0c4103413/数据结构/第3章 栈和队列/第三章 栈与队列.xmind -------------------------------------------------------------------------------- /数据结构/第3章 栈和队列/队列.md: -------------------------------------------------------------------------------- 1 | # 队列的顺序存储 2 | ## 数据结构 3 | ```cpp 4 | #define MaxSize 50; 5 | typedef struct{ 6 | Elemtype data[MaxSize]; 7 | int front, rear; 8 | }SqQueue; 9 | ``` 10 | * 缺点:对连续空间的利用率差,容易出现假溢出现象 11 | 12 | ## 改进:循环队列 13 | ### 队列指针的变化 14 | * 初始时:`Q.front = Q.rear = 0` 15 | * 队首指针进1:`Q.front = (Q.front+1)%MaxSize` 16 | * 队尾指针进1:`Q.rear = (Q.rear+1)%MaxSize` 17 | * 队列长度:`(Q.rear+MaxSize-Q.front)%MaxSize` 18 | * 出队入队时:指针按顺时针方向进1 19 | ### 区分对空队满 20 | 1. 牺牲一个空单元 21 | * 队满条件:`(Q.rear+1)%MaxSize==Q.front` 22 | * 队空条件:`Q.front=Q.rear` 23 | * 队列元素个数:`(Q.rear-Q.front+MaxSize)%MaxSize` 24 | 2. 类型中增设表示元素个数的数据成员 25 | 3. 类型中增设tag数据成员 26 | ### 循环队列的基本操作(采用牺牲空单元法) 27 | #### 1. 初始化 28 | ```cpp 29 | void InitQueue(SqQueue &Q){ 30 | Q.front = Q.rear = 0; 31 | } 32 | ``` 33 | #### 2. 判空 34 | ```cpp 35 | bool isEmpty(SqQueue &Q){ 36 | if(Q.rear = Q.front){ 37 | return true; 38 | } 39 | else{ 40 | return false; 41 | } 42 | } 43 | ``` 44 | #### 3. 出队 45 | ```cpp 46 | bool DeQueue(SqQueue &Q, Elemtype &x){ 47 | if(Q.front = Q.rear) return false; 48 | x = Q.data[Q.front]; 49 | Q.front = (Q.front+1) % MaxSize; 50 | } 51 | ``` 52 | #### 4. 入队 53 | ```cpp 54 | bool EnQueue(SqQueue &Q, Elemtype x){ 55 | if((Q.rear+1)%MaxSize==Q.front) return false; 56 | Q.data[Q.rear]= x; 57 | Q.rear = (Q.rear+1) % MaxSize; 58 | return true; 59 | } 60 | ``` 61 | 62 | # 队列的链式存储结构 63 | ## 数据结构 64 | ```cpp 65 | typedef struct{ 66 | Elemtype data; 67 | struct LinkNode *next; 68 | }LinkNode; 69 | typedef struct{ 70 | LinkNode *front, *rear; 71 | }LinkQueue; 72 | ``` 73 | ## 基本操作 74 | ### 1. 初始化 75 | ```cpp 76 | void InitQueue(LinkQueue &Q){ 77 | Q.front = Q.rear = (LinkNode*)malloc(sizeof(LinkNode)); 78 | Q.front->next = NULL; 79 | } 80 | ``` 81 | ### 2. 判空 82 | ```cpp 83 | bool IsEmpty(LinkQueue &Q){ 84 | if(Q.front == Q.rear) return true; 85 | else return false; 86 | } 87 | ``` 88 | ### 3. 入队 89 | ```cpp 90 | bool EnQueue(LinkQueue &Q, Elemtype x){ 91 | LinkNode *s = (LinkNode *) malloc(sizeof(LinkNode)); 92 | s->data = x; 93 | s->next = NULL; 94 | (Q.rear)->next = s; 95 | Q.rear = s; 96 | } 97 | ``` 98 | ### 4. 出队 99 | ```cpp 100 | bool DeQueue(LinkQueue &Q, Elemtype x){ 101 | if(Q.front == Q.rear) return false; 102 | LinkNode *p = Q.front->next; 103 | x = p->data; 104 | if(Q.front == Q.rear){ 105 | Q.rear = Q.front; 106 | } 107 | free(p); 108 | return true; 109 | } 110 | ``` -------------------------------------------------------------------------------- /数据结构/第4章 串/v2-67dd66b86323d3d08f976589cf712a1a_1440w.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Alice-and-Bob/CS408/a3c5fe965ad283b517ad46023a8bd1f0c4103413/数据结构/第4章 串/v2-67dd66b86323d3d08f976589cf712a1a_1440w.png -------------------------------------------------------------------------------- /数据结构/第4章 串/串的模式匹配.md: -------------------------------------------------------------------------------- 1 | # 简单的模式匹配算法 2 | > 思路:暴力匹配,用子串T的第一位去跟主串S的每一位进行比对,如果相等,则比对下一位;如果不等,则子串T复位到第一位,主串S复位到第一次匹配成功位置的下一个字符,再进行比对。 3 | > 最坏时间复杂度:**O(mn)**,mn分别为主串子串长度 4 | ```cpp 5 | int Index(SString S, SString T){ 6 | int i=1, j=1; 7 | while(i<=S.length() && j<=T.length()){ 8 | if(S.ch[i] == T.ch[j]){ //如果匹配就继续匹配后续字符 9 | ++i; 10 | ++j; 11 | } 12 | else{ 13 | i = i-j+2; //指针后退重新开始分配 14 | j=1; 15 | } 16 | } 17 | if(j>T.length()) return i-T.length(); 18 | else return 0; 19 | } 20 | ``` 21 | > 示例: 22 | $[](批注%202020-07-10%20160539.png) 23 | # KMP算法 24 | ## 普通算法的缺点和对此的改进 25 | 普通算法的缺点在于主串的每一个元素都进行了比对,然而这不必要。假设一个主串S和子串T部分匹配,实际上其中隐含了信息可以使用。例如主串S和子串T,在S的i处,T的j处失配,那么就从i处向前看,同时从T开头看,看二者最大的相同长度到哪,就说明,对S来说,这段长度之前的元素肯定是没有办法匹配成功的。那就移动子串T,使得这两段长度对齐,并从这段结束的地方重新开始比对。 26 | 27 | ![](v2-67dd66b86323d3d08f976589cf712a1a_1440w.png) 28 | 以上图为例,把子串右移一位、两位的操作是没有必要的,从已经匹配的信息来看,肯定会失败。最有可能成功的匹配是把子串右移三位,因为这是子串和主串重新开始相等的地方。 29 | 30 | 那么随之而来的是,如何计算右移的大小和对齐之后从哪里开始重新匹配即重复串的长度。 31 | 32 | ## 引入部分匹配值、PM表、next数组 33 | 前缀:除最后一个字符外,字符串的全部头部子串 34 | 后缀:出第一个字符外,字符串的全部尾部子串 35 | 部分匹配值:字符串的前缀和后缀的最长相等长度 36 | > 以`'ababa'`为例: 37 | > | 字符串 | 前缀 | 后缀 | 最长相等串 | 最长相等长度 | 38 | > | :---: | :-----: | :-----: | :-: |:---: | 39 | > |`'a'` | 空 | 空 | 空 | 0 | 40 | > |`'ab'` | {a} | {b} | 空 | 0 | 41 | > |`'aba'` | {a, ab} | {a, ba} | {a} | 1 | 42 | > |`'abab'` | {a, ab, aba} | {b, ab, bab} | {ab} | 2 | 43 | > |`'ababa'` | {a, ab, aba, abab} | {a, ba, aba, baba} | {aba} | 3 | 44 | 把最长相等长度列成表,即得PM表 45 | > | 编号 | S | PM | 46 | > | :-: | :-: | :-: | 47 | > | 1 | a | 0| 48 | > | 2 | ab | 0| 49 | > | 3 | aba | 1| 50 | > | 4 | abab | 2| 51 | > | 5 | ababa | 3| 52 | 53 | 最长相等长度即为部分匹配值,那么可得公式`移动位数 = 已经匹配的字符数 - 部分匹配值` 54 | 55 | PM表在使用过程中有较多不便,因为主串在i处失配时,取用的是i-1的PM值,那么把PM表整体右移一位,首位补-1,末位溢出,称为next数组 56 | 57 | 此时,我们已经知道了子串该右移几位(移动位数),并且知道了要把子串T的指针指向哪里开始重新匹配(`T[next[j]+1]`)。 58 | 59 | ## 机器求解next数组与KMP算法代码 60 | ```cpp 61 | void get_next(String T, int next[]){ 62 | int i=1, j=0; 63 | next[1]=0; 64 | while(i 以上定义的next数组在某些情况下会产生错误,此时需要进行修正 103 | > 104 | > 当模式串匹配过程中出现了`T_j=T_next(j)`时,要把`next[j]`修正为`next[next[j]]`,直到二者不相等为止,更新后的数组命名为nextval 105 | ```cpp 106 | void get_nextval(String T, int nextval[]){ 107 | int i=1, j=0; 108 | nextval[1]=0; 109 | while(i<.T.length()){ 110 | if(j==0||T.ch[i]==T.ch[j]){ 111 | ++j; 112 | ++i; 113 | if(T.ch[i]!=T.ch[j]) 114 | nextval[i]=j; 115 | else 116 | nextval[i]=nextval[j] 117 | } 118 | else{ 119 | j=nextval[j]; 120 | } 121 | } 122 | } 123 | ``` 124 | -------------------------------------------------------------------------------- /数据结构/第4章 串/批注 2020-07-10 160539.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Alice-and-Bob/CS408/a3c5fe965ad283b517ad46023a8bd1f0c4103413/数据结构/第4章 串/批注 2020-07-10 160539.png -------------------------------------------------------------------------------- /数据结构/第4章 串/第四章 串.xmind: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Alice-and-Bob/CS408/a3c5fe965ad283b517ad46023a8bd1f0c4103413/数据结构/第4章 串/第四章 串.xmind -------------------------------------------------------------------------------- /数据结构/第5章 树与二叉树/二叉排序树.md: -------------------------------------------------------------------------------- 1 | # 二叉排序树的非递归查找算法 2 | ```cpp 3 | BSTNode *BST_Search(BinTree T, ElemType key){ 4 | while(T!=NULL;&&key!=T->data){ 5 | if(key < T->data) 6 | T = T->lchild; 7 | else 8 | T = T->rchild; 9 | } 10 | return T; 11 | } 12 | ``` 13 | 14 | # 二叉排序树的插入算法 15 | ```cpp 16 | int BST_Insert(BiTree &T, KeyType k){ 17 | if(T==NULL){ 18 | T=(BiTree)malloc(sizeof(BSTNode)); 19 | T->key=k; 20 | T->lchild=T->rchild=NULL; 21 | return 1; 22 | } 23 | else if(k==T->key) 24 | return 0; 25 | else if(k < T->key) 26 | return BST_Insert(T->lchild); 27 | else 28 | return BST_Insert(T->rchild); 29 | } 30 | ``` 31 | -------------------------------------------------------------------------------- /数据结构/第5章 树与二叉树/二叉树的遍历.md: -------------------------------------------------------------------------------- 1 | # 二叉树的遍历 2 | > 遍历的顺序是指根结点的访问次序,先序指首先访问根结点,再访问左子树,访问右子树;其他顺序遍历以此类推 3 | ## 先序遍历 4 | > 若二叉树为空,什么也不做,否则: 5 | > 1、访问根结点 6 | > 2、先序遍历左子树 7 | > 3、先序遍历右子树 8 | ```cpp 9 | void PreOrder(BinTree T){ 10 | if(T!=NULL){ 11 | visit(T); 12 | PreOrder(T->lchild); 13 | PreOrder(T->rchild); 14 | } 15 | } 16 | ``` 17 | ## 中序遍历 18 | > 若二叉树为空,什么也不做,否则: 19 | > 1、中序遍历左子树 20 | > 2、访问根结点 21 | > 3、中序遍历右子树 22 | ```cpp 23 | void InOrder(BinTree T){ 24 | if(T!=NULL){ 25 | InOrder(T->lchild); 26 | visit(T); 27 | InOrder(T->rchild); 28 | } 29 | } 30 | ``` 31 | ## 后序遍历 32 | > 若二叉树为空,什么也不做,否则: 33 | > 1、后序遍历左子树 34 | > 2、后序遍历右子树 35 | > 3、访问根结点 36 | ```cpp 37 | void PostOrder(BinTree T){ 38 | if(T!=NULL){ 39 | PostOrder(T->lchild); 40 | PostOrder(T->rchild); 41 | visit(T); 42 | } 43 | } 44 | ``` 45 | ## 递归、非递归算法转换 46 | > 以上三种遍历算法采用递归,若采用非遍历算法,须使用栈 47 | ### 中序遍历非递归算法 48 | > 分析遍历过程可以得出非递归算法:①从跟结点开始,一直访问结点的左孩子,并把结点入栈,当结点没有左孩子时,弹出栈顶结点访问;②若右孩子为空,则继续执行②,若不空,则对右子树执行① 49 | 50 | ```cpp 51 | void InOrder2(BinTree T){ 52 | InitStack(S); 53 | BiTree p=T; 54 | while(p||!IsEmpty(S)){ 55 | if(p){ 56 | Push(S,p); 57 | p=p->lchild; 58 | } 59 | else{ 60 | Pop(S,p); 61 | visit(p); 62 | p=p->rchild; 63 | } 64 | } 65 | } 66 | ``` 67 | 68 | ### 先序遍历非递归算法 69 | 70 | ```cpp 71 | void PreOrder2(BinTree T){ 72 | InitStack(S); 73 | BiTree p=T; 74 | while(p||!IsEmpty(S)){ 75 | if(p){ 76 | visit(p); 77 | Push(S,p); 78 | p=p->lchild; 79 | } 80 | else{ 81 | Pop(S,p); 82 | p=p->rchild; 83 | } 84 | } 85 | } 86 | ``` 87 | ### 后序遍历非递归算法 88 | > ①沿着根结点的左孩子,把结点依次入栈,直到左孩子为空;②读栈顶元素,当其右孩子非空且未被访问过时,则对右子树执行①,否则弹出栈顶元素并访问 89 | 90 | ```cpp 91 | void PostOrder(BiTree T){ 92 | InitStack(S); 93 | p=T; //当前访问的结点 94 | r=NULL; //记录最近访问的结点 95 | while(p||!IsEmpty(S)){ 96 | if(p){ 97 | push(S,p); 98 | p=p->lchild; 99 | } 100 | else{ 101 | GetTop(S,p); 102 | if(p->rchild && p->rchild!=r){ //右子树存在且最近未被访问过 103 | p=p->rchild; 104 | push(S,p); 105 | p=p->lchild; 106 | } 107 | else{ 108 | pop(S,p); 109 | visit(p->data); 110 | r=p; 111 | p=NULL; 112 | } 113 | } 114 | } 115 | } 116 | ``` 117 | 118 | ## 层次遍历 119 | > 层次遍历即是广度优先遍历,使用队列完成层次遍历 120 | ```cpp 121 | void LevelOrder(BiTree T){ 122 | InitQueue(Q); 123 | BiTree p; 124 | EnQueue(Q, T); 125 | while(!IsEmpty(Q)){ 126 | DeQueue(Q,p); 127 | visit(p); 128 | if(p->lchild!=NULL) 129 | EnQueue(Q, p->lchild); 130 | else(p->rchild!=NULL) 131 | EnQueue(Q, p->rchild); 132 | } 133 | } 134 | ``` -------------------------------------------------------------------------------- /数据结构/第5章 树与二叉树/批注 2020-07-11 154229.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Alice-and-Bob/CS408/a3c5fe965ad283b517ad46023a8bd1f0c4103413/数据结构/第5章 树与二叉树/批注 2020-07-11 154229.png -------------------------------------------------------------------------------- /数据结构/第5章 树与二叉树/批注 2020-07-11 171429.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Alice-and-Bob/CS408/a3c5fe965ad283b517ad46023a8bd1f0c4103413/数据结构/第5章 树与二叉树/批注 2020-07-11 171429.png -------------------------------------------------------------------------------- /数据结构/第5章 树与二叉树/批注 2020-07-14 170228.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Alice-and-Bob/CS408/a3c5fe965ad283b517ad46023a8bd1f0c4103413/数据结构/第5章 树与二叉树/批注 2020-07-14 170228.png -------------------------------------------------------------------------------- /数据结构/第5章 树与二叉树/批注 2020-07-14 173314.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Alice-and-Bob/CS408/a3c5fe965ad283b517ad46023a8bd1f0c4103413/数据结构/第5章 树与二叉树/批注 2020-07-14 173314.png -------------------------------------------------------------------------------- /数据结构/第5章 树与二叉树/批注 2020-07-14 173332.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Alice-and-Bob/CS408/a3c5fe965ad283b517ad46023a8bd1f0c4103413/数据结构/第5章 树与二叉树/批注 2020-07-14 173332.png -------------------------------------------------------------------------------- /数据结构/第5章 树与二叉树/批注 2020-07-14 173346.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Alice-and-Bob/CS408/a3c5fe965ad283b517ad46023a8bd1f0c4103413/数据结构/第5章 树与二叉树/批注 2020-07-14 173346.png -------------------------------------------------------------------------------- /数据结构/第5章 树与二叉树/批注 2020-07-14 173401.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Alice-and-Bob/CS408/a3c5fe965ad283b517ad46023a8bd1f0c4103413/数据结构/第5章 树与二叉树/批注 2020-07-14 173401.png -------------------------------------------------------------------------------- /数据结构/第5章 树与二叉树/批注 2020-07-14 175139.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Alice-and-Bob/CS408/a3c5fe965ad283b517ad46023a8bd1f0c4103413/数据结构/第5章 树与二叉树/批注 2020-07-14 175139.png -------------------------------------------------------------------------------- /数据结构/第5章 树与二叉树/批注 2020-07-15 181759.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Alice-and-Bob/CS408/a3c5fe965ad283b517ad46023a8bd1f0c4103413/数据结构/第5章 树与二叉树/批注 2020-07-15 181759.png -------------------------------------------------------------------------------- /数据结构/第5章 树与二叉树/真题解答.md: -------------------------------------------------------------------------------- 1 | # 习题5.5 2 | ## T13 2012 3 | > 不会,以下为解答 4 | 5 | 1. 求最小合并次数类似于求最小带权路径长度,则联想到哈夫曼树。那么每次选择表集合中长度最小的两个表进行合并 6 | 第一次 合并A、B 7 | 第二次 合并AB和C 8 | 第三次 合并D、E 9 | 第四次 合并ABC和DE 10 | 第五次 合并ABCDE和F 11 | 12 | **合并两个有序表的最坏情况需要比较m+n-1次** 13 | 则 14 | 按合并顺序可以算出每次需要比较的次数 15 | 16 | 2. 合并表长不同的顺序表时,最坏情况下的比较次数依赖于合并的次序,则每次选择表长最短的两个表合并,可以获得最坏情况下的最小比较次数 17 | 18 | > 原以为要考具体的元素级别的合并算法,结果是考表与表的合并…… 19 | > 能获得启发就是:**合并两个有序表的最坏情况需要比较m+n-1次** 20 | 21 | # 习题5.4 22 | ## T4 2016 23 | 1. `(k-1)*n+1` 24 | 2. $$ 25 | \begin{aligned} 26 | n_{max} &= \frac{1-k^h}{1-k} \\ 27 | n_{min} &= k+\frac{1-k^{h-1}}{1-k} 28 | \end{aligned} 29 | $$ 30 | 31 | # 习题5.3 32 | ## T19 2014 33 | 1. 采用深度优先的递归遍历搜索,记录递归层数,当访问到叶结点时把当前层数乘以叶结点权值,最后全部叶结点的带权路径长度值相加 34 | 2. ```cpp 35 | typedef struct BiTreeNode{ 36 | struct BiTreeNode *left; 37 | int weight; 38 | struct BiTreeNode *right; 39 | }BiTreeNode, *BiTree; 40 | ``` 41 | 3. ```cpp 42 | i=1; //递归层数 43 | WPL=0; //带权路径长度 44 | void GetWPL(BiTree *p){ 45 | if(p->left==NULL && p->right==NULL){ //叶结点 46 | i--; 47 | WPL+=i*p->weight; 48 | return ; 49 | } 50 | else{ 51 | if(p->left!=NULL&&p->right==NULL){ 52 | i++; 53 | GetWPL(p->left); 54 | } 55 | else(p->left==NULL&&p->right!=NULL){ 56 | i++; 57 | GetWPL(p->right); 58 | } 59 | } 60 | } 61 | ``` 62 | ## T20 2017 63 | 1. 中序遍历二叉树,在递归访问某结点的左孩子之前输出一个左括号,在递归访问右孩子之后输出一个右括号 64 | 2. ```cpp 65 | void func(BTree p){ 66 | if(p!=NULL){ 67 | cout<<'('; 68 | func(p->left); 69 | visit(p); 70 | func(p->right); 71 | cout<<')'; 72 | } 73 | } 74 | ``` 75 | -------------------------------------------------------------------------------- /数据结构/第5章 树与二叉树/第五章 树与二叉树.xmind: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Alice-and-Bob/CS408/a3c5fe965ad283b517ad46023a8bd1f0c4103413/数据结构/第5章 树与二叉树/第五章 树与二叉树.xmind -------------------------------------------------------------------------------- /数据结构/第5章 树与二叉树/线索二叉树.md: -------------------------------------------------------------------------------- 1 | # 线索二叉树 2 | ## 数据结构 3 | ```cpp 4 | typedef struct ThreadNode{ 5 | ElemType data; 6 | struct ThreadNode *lchild, *rchild; //左右孩子指针 7 | int ltag,rtag; //左右线索标志 8 | }ThreadNode, *ThreadTree; 9 | ``` 10 | 规定:当结点没有左孩子,其lchild指向其前驱节点;当没有右孩子,其rchild指向其后继结点 11 | ## 二叉树中序线索化 12 | ```cpp 13 | void InThread(ThreadTree &p, ThreadTree &pre){ 14 | if(p!=NULL){ 15 | InThread(p->lchild, pre); 16 | if(p->lchild==NULL){ 17 | p->lchild=pre; 18 | p->ltag=1; 19 | } 20 | if(pre!=NULL&&pre->rchild==NULL){ 21 | pre->rchild=p; 22 | pre->rtag=1; 23 | } 24 | pre=p; 25 | InThread(p->rchild, pre); 26 | } 27 | } 28 | 29 | void CreateInThread(ThreadTree T){ 30 | ThreadTree pre=NULL; 31 | if(T!=NULL){ //非空二叉树 32 | InThread(T, pre); //线索化二叉树 33 | pre->rchild=NULL; //处理遍历的最后一个结点 34 | pre->rtag=1; 35 | } 36 | } 37 | ``` 38 | ## 中序线索二叉树的遍历 39 | 1. 中序线索二叉树下的第一个结点 40 | ```cpp 41 | ThreadNode *Firstnode(ThreadNode *p){ 42 | while(p->ltag==0) 43 | p=p->lchild; 44 | return p; 45 | } 46 | ``` 47 | 2. 中序线索二叉树下某结点p的后继 48 | ```cpp 49 | ThreadNode *Nextnode(ThreadNode *p){ 50 | if(p->rtag==0) //右孩子存在 51 | return Firstnode(p->rchild) 52 | else 53 | return p->rchild; 54 | } 55 | ``` 56 | 3. 不带头结点的中序线索二叉树的中序遍历的算法 57 | ```cpp 58 | void Inorder(ThreadNode *T){ 59 | for(ThreadNode *p=Firstnode(T); p!=NULL; p=Nextnode(p)){ 60 | visit(p); 61 | } 62 | } 63 | ``` 64 | -------------------------------------------------------------------------------- /数据结构/第6章 图/1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Alice-and-Bob/CS408/a3c5fe965ad283b517ad46023a8bd1f0c4103413/数据结构/第6章 图/1.png -------------------------------------------------------------------------------- /数据结构/第6章 图/2.1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Alice-and-Bob/CS408/a3c5fe965ad283b517ad46023a8bd1f0c4103413/数据结构/第6章 图/2.1.png -------------------------------------------------------------------------------- /数据结构/第6章 图/2.2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Alice-and-Bob/CS408/a3c5fe965ad283b517ad46023a8bd1f0c4103413/数据结构/第6章 图/2.2.png -------------------------------------------------------------------------------- /数据结构/第6章 图/3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Alice-and-Bob/CS408/a3c5fe965ad283b517ad46023a8bd1f0c4103413/数据结构/第6章 图/3.png -------------------------------------------------------------------------------- /数据结构/第6章 图/4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Alice-and-Bob/CS408/a3c5fe965ad283b517ad46023a8bd1f0c4103413/数据结构/第6章 图/4.png -------------------------------------------------------------------------------- /数据结构/第6章 图/a.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Alice-and-Bob/CS408/a3c5fe965ad283b517ad46023a8bd1f0c4103413/数据结构/第6章 图/a.png -------------------------------------------------------------------------------- /数据结构/第6章 图/aa.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Alice-and-Bob/CS408/a3c5fe965ad283b517ad46023a8bd1f0c4103413/数据结构/第6章 图/aa.png -------------------------------------------------------------------------------- /数据结构/第6章 图/aaa.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Alice-and-Bob/CS408/a3c5fe965ad283b517ad46023a8bd1f0c4103413/数据结构/第6章 图/aaa.png -------------------------------------------------------------------------------- /数据结构/第6章 图/dj1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Alice-and-Bob/CS408/a3c5fe965ad283b517ad46023a8bd1f0c4103413/数据结构/第6章 图/dj1.png -------------------------------------------------------------------------------- /数据结构/第6章 图/dj2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Alice-and-Bob/CS408/a3c5fe965ad283b517ad46023a8bd1f0c4103413/数据结构/第6章 图/dj2.png -------------------------------------------------------------------------------- /数据结构/第6章 图/dj3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Alice-and-Bob/CS408/a3c5fe965ad283b517ad46023a8bd1f0c4103413/数据结构/第6章 图/dj3.png -------------------------------------------------------------------------------- /数据结构/第6章 图/fl1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Alice-and-Bob/CS408/a3c5fe965ad283b517ad46023a8bd1f0c4103413/数据结构/第6章 图/fl1.png -------------------------------------------------------------------------------- /数据结构/第6章 图/fl2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Alice-and-Bob/CS408/a3c5fe965ad283b517ad46023a8bd1f0c4103413/数据结构/第6章 图/fl2.png -------------------------------------------------------------------------------- /数据结构/第6章 图/fl3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Alice-and-Bob/CS408/a3c5fe965ad283b517ad46023a8bd1f0c4103413/数据结构/第6章 图/fl3.png -------------------------------------------------------------------------------- /数据结构/第6章 图/图的存储和基本操作.md: -------------------------------------------------------------------------------- 1 | # 图的存储 2 | ## 邻接矩阵法 3 | 用一个一维数组存储顶点信息,用一个二维数组存储图中边的信息 4 | 5 | 结点数为n的图,其邻接矩阵A是n×n的,A[i][j]表示顶点i和顶点j之间的边,有向图中A[i][j]与A[j][i]一般不同 6 | 7 | 不带权的图: 8 | $$A[i][j]= 9 | \left\{\begin{matrix} 10 | 1,若 (v_i,v_j)或是E(G)中的边\\ 11 | 0,若 (v_i,v_j)或不是E(G)中的边\\ 12 | \end{matrix}\right. 13 | $$ 14 | 带权图: 15 | $$A[i][j]= 16 | \left\{\begin{matrix} 17 | w_{ij},若 (v_i,v_j)或是E(G)中的边\\ 18 | 0或\infty,若 (v_i,v_j)或不是E(G)中的边\\ 19 | \end{matrix}\right. 20 | $$ 21 | 22 | 邻接矩阵法的存储结构定义 23 | ```cpp 24 | #define MaxVertexNum 100 25 | typedef char VertexType; 26 | typedef int EdgeType; 27 | typedef struct{ 28 | VertexType Vex[MaxVertexNum]; 29 | EdgeType Edge[MaxVertexNum][MaxVertexNum]; 30 | int vexnum, arcnum; //图的当前顶点数和弧数 31 | }MGraph; 32 | ``` 33 | 34 | ![](1.png) 35 | 36 | ## 邻接表法 37 | 邻接表是指对每一个顶点建立一个单链表,第i个单链表中的结点代表了依附于顶点i的边(无向图),或是代表了以i为弧尾的边(有向图) 38 | 39 | ```cpp 40 | #define MaxVertexNum 100 41 | typedef struct ArcNode{ //边表结点 42 | int adjvex; //该弧指向的顶点的位置 43 | struct ArcNode *next; 44 | //InfoType info; 边权值 45 | }ArcNode; 46 | typedef struct VNode{ //顶点表结点 47 | VertexType data; 48 | ArcNode *first; 49 | }VNode, AdjList[MaxVertexNum]; 50 | typedef struct{ 51 | AdjList vertices; //邻接表 52 | int vexnum,arcnum; //图的顶点数和弧数 53 | }ALGraph; 54 | ``` 55 | 56 | ![](2.1.png) 57 | ![](2.2.png) 58 | 59 | ## 十字链表法 60 | > 用于有向图 61 | 62 | 弧结点有5个域: 63 | * tailvex, headvex指向弧头结点和弧尾结点 64 | * hlink指向弧头相同的下一条弧 65 | * tlink指向弧尾相同的下一条弧 66 | * info包括了弧的相关信息 67 | 68 | 顶点结点有3个域: 69 | * data存放顶点有关信息 70 | * firstin和firstout指向以该节点为弧头或弧尾的第一个弧结点 71 | 72 | ![](3.png) 73 | 74 | ## 邻接多重表 75 | > 用于无向图 76 | 77 | 与十字链表类似,每个边和顶点都有顶点 78 | 79 | 边结点: 80 | * Mark标记是否被搜索过 81 | * ivex指向该边依附的i结点位置 82 | * jvex指向该边依附的j结点位置 83 | * ilink指向下一条依附于i结点的边 84 | * jlink指向下一条依附于j结点的边 85 | * info表示边信息 86 | 87 | 顶点结点: 88 | * data代表顶点信息 89 | * firstedge指向第一条依附于该顶点的边 90 | 91 | ![](4.png) 92 | 93 | # 图的基本操作 94 | - Adjacent(G, x, y) 95 | - 判断图G是否存在边(x,y)或 96 | - Neighbors(G, x) 97 | - 列出G中与结点x邻接的边 98 | - InsertVertex(G, x) 99 | - 在G中插入顶点x 100 | - DeleteVertex(G, x) 101 | - 在G中删除顶点x 102 | - AddEdge(G, x, y) 103 | - 若G中不存在边(x,y)或,则添加该边 104 | - RemoveEdge(G, x, y) 105 | - 若G中存在边(x,y)或,则删除该边 106 | - FirstNeighbor(G, x) 107 | - 求G中顶点x的第一个邻接点,返回顶点号;出现错误则返回-1 108 | - NextNeighbor(G, x, y) 109 | - 设y为x的一个邻接点,返回除y的下一个邻接点号;其他情况返回-1 110 | - Get_edge_value(G, x, y) 111 | - 返回边(x,y)或的权值 112 | - Set_edge_value(G, x, y, v) 113 | - 设置边(x,y)或的权值为v -------------------------------------------------------------------------------- /数据结构/第6章 图/图的应用.md: -------------------------------------------------------------------------------- 1 | # 最小生成树 2 | ## 普利姆算法 3 | 原图: 4 | ![](https://images2018.cnblogs.com/blog/1309518/201808/1309518-20180817112518401-1774355749.png) 5 | 6 | 以上图G4为例,来对普里姆进行演示(从第一个顶点A开始通过普里姆算法生成最小生成树)。 7 | 8 | ![](https://images2018.cnblogs.com/blog/1309518/201808/1309518-20180817112621902-186744050.png) 9 | ![](https://images2018.cnblogs.com/blog/1309518/201808/1309518-20180817112643333-1291619542.png) 10 | ![](https://img2018.cnblogs.com/i-beta/1309518/202002/1309518-20200226135124598-1168867260.png) 11 | 12 | 初始状态:V是所有顶点的集合,即V={A,B,C,D,E,F,G};U和T都是空! 13 | 14 | - 第1步:将顶点A加入到U中。 15 | 此时,U={A}。 16 | 17 | - 第2步:将顶点B加入到U中。 18 | 上一步操作之后,U={A}, V-U={B,C,D,E,F,G}; 19 | 因此,边(A,B)的权值最小。将顶点B添加到U中;此时,U={A,B}。 20 | 21 | - 第3步:将顶点F加入到U中。 22 | 上一步操作之后,U={A,B}, V-U={C,D,E,F,G}; 23 | 因此,边(B,F)的权值最小。将顶点F添加到U中;此时,U={A,B,F}。 24 | 25 | - 第4步:将顶点E加入到U中。 26 | 上一步操作之后,U={A,B,F}, V-U={C,D,E,G}; 27 | 因此,边(F,E)的权值最小。将顶点E添加到U中;此时,U={A,B,F,E}。 28 | 29 | - 第5步:将顶点D加入到U中。 30 | 上一步操作之后,U={A,B,F,E}, V-U={C,D,G}; 31 | 因此,边(E,D)的权值最小。将顶点D添加到U中;此时,U={A,B,F,E,D}。 32 | 33 | - 第6步:将顶点C加入到U中。 34 | 上一步操作之后,U={A,B,F,E,D}, V-U={C,G}; 35 | 因此,边(D,C)的权值最小。将顶点C添加到U中;此时,U={A,B,F,E,D,C}。 36 | 37 | - 第7步:将顶点G加入到U中。 38 | 上一步操作之后,U={A,B,F,E,D,C}, V-U={G}; 39 | 因此,边(E,G)的权值最小。将顶点G添加到U中;此时,U=V。 40 | 41 | 此时,最小生成树构造完成!它包括的顶点依次是:A B F E D C G。 42 | > 注意每一次从U和V集合中选一个权值最小的边,对应的顶点加入U中,直到V中没有元素 43 | 44 | ## 克鲁斯卡尔算法 45 | 算法思想: 46 | 1. 将所有边的边权从小到大依次排列,并且均标为未选; 47 | 2. 选择最小的未选边; 48 | 3. 如果该边与前面所选的边无法构成回路,则选中该边,并标为已选;如果该边与前面所选的边构成了回路,则不选该边,并标为已选; 49 | 4. 重复(2)(3),直到所有点之间都有边相连; 50 | > 过程容易理解,只需要注意选边的时候不能成环,如果有成环则跳过该边; 51 | 52 | # 最短路径 53 | ## 迪杰斯特拉算法 54 | > 求解**带权有向图G中**某一顶点到其他各个顶点的最短路径 55 | 56 | - 概述: 57 | ![](dj1.png) 58 | 59 | - 实例: 60 | ![](dj2.png) 61 | ![](dj3.png) 62 | 63 | > 结合实例容易理解算法过程,需要注意的是初始化和算法每一次前进一步都需要更新当前到未确定的各个顶点的最短距离,这是因为可能存在拐弯之后的权值相加仍小于原值的情况。 64 | > 65 | > 注意算法只能求解**权值为正数**的带权有向图 66 | 67 | ## 弗洛伊德算法 68 | - 算法思想: 69 | ![](fl1.png) 70 | - 实例: 71 | ![](fl2.png) 72 | ![](fl3.png) 73 | 74 | # 拓扑排序 75 | - AOV网:有向无环图,边的指向代表了事件发生的前后顺序 76 | - 拓扑排序:将AOV网以一个一维序列形式表达,这个序列满足 77 | - 每个顶点出现且仅出现一次 78 | - 若A排在B前面,则在AOV网中不存在B到A的路径,即A必须先于B发生 79 | - 算法: 80 | ![](a.png) 81 | 82 | # 关键路径 83 | - AOE网:在AOV网的基础上,添加了边权值,代表了完成活动的开销(需要的时间等) 84 | - 关键路径:从源点到汇点的所有路径中,具有最大路径长度的路径称为关键路径,关键路径上的活动称为关键活动 85 | 86 | 1. 事件$v_k$发生的最早发生时间ve(k): 87 | 指从源点到任意顶点k的最长路径长度,决定了从k开始的活动能够开工的最早时间 88 | 89 | 2. 时间$v_k$的最迟发生时间vl(k): 90 | 指不推迟整个工程完成的前提下,即保证其后继事件j在它的最迟发生时间vl(j)之前能够发生时,该事件最迟必须发生的时间。 91 | 3. 活动$a_i$最早开始时间e(i) 92 | 弧起点所指代的事件的最早发生时间 93 | 4. 活动$a_i$最迟开始时间l(i) 94 | 弧终点所指代的事件的最迟发生时间与该活动所需时间之差 95 | 5. 活动的最迟开始时间和最早开始时间的差额 96 | 97 | - 求关键路径算法 98 | ![](aa.png) 99 | - 实例 100 | ![](aaa.png) 101 | 在选择题中可以省略步骤,但是解答题必须写完全部步骤 -------------------------------------------------------------------------------- /数据结构/第6章 图/图的遍历.md: -------------------------------------------------------------------------------- 1 | # 广度优先搜索 2 | 1. **基本思想**:从一个选定的顶点v出发,依次访问v的邻接结点,再从这些结点出发,去访问与他们邻接且没有被访问过的结点,重复这个过程直到图中所有的结点都被访问过 3 | 4 | 2. 伪代码: 5 | ```cpp 6 | bool visited[MAX_VERTEX_NUM]; //标记数组 7 | void BFSTraverse(Graph G){ 8 | for(i=0;i=0; w=NextNeighbor(G,v,w)){ 25 | //检测v的所有邻接点 26 | if(!visited[w]){ //对每一个v的未曾访问过的邻接点w 27 | visit(w); //访问 28 | visited[w]=TRUE;//标记 29 | EnQueue(Q,w); //入队 30 | } 31 | } 32 | } 33 | } 34 | ``` 35 | 3. 性质分析: 36 | - 复杂度分析: 37 | - **时间复杂度** : $O(|V|^2)$ 38 | - **空间复杂度** : $O(|V|)$ 39 | - BFS是树的层次遍历的扩充 40 | 41 | 42 | 43 | # 深度优先搜索 44 | 1. **基本思想**:从一个顶点v出发,访问其邻接且未访问过的任意一个w1,继续访问w1的邻接点中的任意一个w2,如此下去直到无法继续,回退到最近访问过的结点,若它还有未访问过的邻接结点,则对其使用深搜。 45 | 46 | 2. 伪代码: 47 | ```cpp 48 | bool visited[MAX_VERTEX_NUM]; //新建标记数组 49 | void DFSTraverse(Graph G){ 50 | for(v=0;v=0;w=NextNeighbor(G,v,w)){ 63 | //对于v的每一个邻接结点w 64 | if(!visited[w]){ 65 | DFS(G,w); 66 | } 67 | } 68 | } 69 | ``` 70 | 71 | 3. 性质分析: 72 | - 复杂度分析: 73 | - **时间复杂度** : 74 | - 邻接矩阵表达: $O(|V|^2)$ 75 | - 邻接表表达:$O(|V|+|E|)$ 76 | - **空间复杂度** : $O(|V|)$ 77 | - DFS是树的先序遍历的扩展 78 | 79 | > 图、树、森林的等效遍历方式 80 | > | 树 | 森林 | 二叉树 | 图 | 81 | > | :-: | :-: | :-: | :-: | 82 | > | 先根遍历 | 先序遍历 | 先序遍历 | DFS | 83 | > | 后根遍历 | 中序遍历 | 中序遍历 | x | 84 | > | 层次遍历 | x | 层次遍历 | BFS | -------------------------------------------------------------------------------- /数据结构/第6章 图/批注 2020-07-23 163518.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Alice-and-Bob/CS408/a3c5fe965ad283b517ad46023a8bd1f0c4103413/数据结构/第6章 图/批注 2020-07-23 163518.png -------------------------------------------------------------------------------- /数据结构/第6章 图/第六章 图.xmind: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Alice-and-Bob/CS408/a3c5fe965ad283b517ad46023a8bd1f0c4103413/数据结构/第6章 图/第六章 图.xmind -------------------------------------------------------------------------------- /数据结构/第7章 查找/1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Alice-and-Bob/CS408/a3c5fe965ad283b517ad46023a8bd1f0c4103413/数据结构/第7章 查找/1.png -------------------------------------------------------------------------------- /数据结构/第7章 查找/2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Alice-and-Bob/CS408/a3c5fe965ad283b517ad46023a8bd1f0c4103413/数据结构/第7章 查找/2.png -------------------------------------------------------------------------------- /数据结构/第7章 查找/3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Alice-and-Bob/CS408/a3c5fe965ad283b517ad46023a8bd1f0c4103413/数据结构/第7章 查找/3.png -------------------------------------------------------------------------------- /数据结构/第7章 查找/查找.md: -------------------------------------------------------------------------------- 1 | # 顺序查找和折半查找 2 | ## 顺序查找 3 | 1. 一般线性表顺序查找 4 | $$ASL_{成功}=\sum_{i=1}^{n}P_i(n-i+1)=\frac{n+1}{2}$$ 5 | $$ASL_{失败}=n+1$$ 6 | 2. 有序表顺序查找 7 | $$ASL_{成功}=\sum_{i=1}^{n}P_i(n-i+1)=\frac{n+1}{2}$$ 8 | $$ASL_{失败}=\frac{1+2+\cdots+n+n}{n+1}=\frac{n}{2}+\frac{n}{n+1}$$ 9 | > 有序表在查找失败时的性能优于一般线性表顺序查找 10 | ## 折半查找 11 | ```cpp 12 | int Binary_Search(SeqList L, ElemType key){ 13 | int low=0, high=L.TableLen-1, mid; 14 | while(low<=high){ 15 | mid=(low+high)/2; 16 | if(L.elem[mid]==key){ 17 | return mid; 18 | } 19 | else if(L.elem[mid]>key){ 20 | high=mid-1; 21 | } 22 | else{ 23 | low=mid+1; 24 | } 25 | } 26 | return -1; 27 | } 28 | ``` 29 | $$ASL_{成功}=\frac{n+1}{n}log_2(n+1)-1\approx log_2(n+1)-1$$ 30 | > 仅适用于有随机存储性质的、关键字按序排列的线性表 31 | 32 | ## 分块查找 33 | 将查找表分为若干子块,块内元素可以无序,但块间有序———第一个块的最大关键字小于第二个块的最小关键字……;再建立一个索引表,其中含有各块的最大关键字和各块的第一个元素地址,索引表按关键字有序排列 34 | $$ASL=\frac{s^2+2s+n}{2s} \text{ 其中,查找表长度为n,均分为b块,每块有s个记录}$$ 35 | 36 | # B树和B+树 37 | ## B树 38 | 1. 概念 39 | - B树是一棵m叉树 40 | - 为了保证查找效率,尽量减少树高,规定除根结点之外的非叶结点最少有$\left \lceil m/2 \right \rceil$个子树,即每个结点最少含有$\left \lceil m/2 \right \rceil-1$个关键字 41 | - ![](1.png)p0所指向的子树中,所有关键字都小于k1;p1所指向的子树中,所有关键字都大于k1 42 | 2. 高度 43 | - 对包含n个关键字,高度为h,阶数为m的B树: 44 | - 高度范围 45 | ![](3.png) 46 | 3. 插入 47 | 对B树进行插入操作 48 | 1. 定位:利用查找算法,假设查找要插入的key,则会查找到一个失败结点;继而可以定位到上面的终端结点中要插入的位置。 49 | 2. 插入:有两种情况 50 | - 插入后的终端结点的结点个数符合要求,直接插入 51 | - 插入后的结点个数多于m-1,则要分裂该节点;以$\left \lceil m/2 \right \rceil$为中,并把该元素提高到父节点位置,左右半边成为新的子树 52 | 4. 删除 53 | 删除节点涉及到合并结点 54 | - 删除一个非终端结点中的元素:用该元素的前驱/后继覆盖该元素,接着在终端结点删除前驱/后继元素 55 | - 删除一个终端结点中的元素: 56 | - 若删除后结点元素个数仍大于$\left \lceil m/2 \right \rceil$,则直接删除 57 | - 若删除后结点元素个数不符合最小要求,则向其左右兄弟借 58 | - 若够借:用前驱、前驱的前驱来代替,或是后继、后继的后继来代替 59 | - 不够借:合并左右兄弟和父节点,重新排列组合 60 | ## B+树 61 | 1. 概念: 62 | - 根结点至少有两个子树,其他节点最少有$\left \lceil m/2 \right \rceil$个子树 63 | - 节点的子树个数等于关键字的个数 64 | - 只有叶结点有关键字及对应记录的地址,非叶结点只有其子树中的最大关键字和对应的子树地址 65 | 2. 与B树的差异 66 | - B树m个关键字对应了m+1个子树;B+树m个关键字对应了m个子树 67 | - B+树节点关键字个数范围 $\left \lceil m/2 \right \rceil \leq n \leq m$ ;B树范围$\left \lceil m/2 \right \rceil -1 \leq m-1$ 68 | - B树节点包含了关键字和关键字指向的记录的地址;B+树只在叶结点包含了记录的地址,非叶结点只有索引的作用 69 | 70 | # 散列查找 71 | ## 散列函数 72 | 1. 直接定址法 73 | - H(key)=key / H(key)=a*key+b 74 | 2. 除留余数法 75 | - H(key)=key%p 76 | - p是一个不大于且最接近散列表长的质数 77 | 3. 数字分析法 78 | 4. 平方取中法 79 | 80 | ## 处理地址冲突 81 | ### 开放定址法 82 | $$ H_i=(H(key)+d_i)%m $$ 83 | $H_i$表示第i次冲突后的新地址,$d_i$表示增量序列 84 | - 确定增量序列 85 | 1. 线性探测法 86 | - $d_i=0,1\cdots$ 87 | 2. 平方探测法 88 | - $d_i=0^2, 1^2, -1^2, \cdots$ 89 | 3. 再散列法 90 | - $H_i=(H(key)+i\times Hash_2{key})\%m$ 91 | 4. 伪随机序列法 92 | - 采用伪随机序列作为增量序列 93 | 94 | > 开放定址情况下,不能随意删除元素,因为这会截断其他具有相同散列地址的元素的查找地址。只能逻辑删除 95 | ### 拉链法 96 | 把同义词存在同一个链表中,由其散列地址唯一标识 97 | 98 | ## 装填因子 99 | $\alpha=\frac{表中记录数n}{散列表长度m}$,装填因子表示了散列表“满”的程度;ASL与装填因子有关,这是因为散列表越满,越有可能产生冲突 -------------------------------------------------------------------------------- /数据结构/第7章 查找/第七章 查找.xmind: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Alice-and-Bob/CS408/a3c5fe965ad283b517ad46023a8bd1f0c4103413/数据结构/第7章 查找/第七章 查找.xmind -------------------------------------------------------------------------------- /数据结构/第8章 排序/1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Alice-and-Bob/CS408/a3c5fe965ad283b517ad46023a8bd1f0c4103413/数据结构/第8章 排序/1.png -------------------------------------------------------------------------------- /数据结构/第8章 排序/2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Alice-and-Bob/CS408/a3c5fe965ad283b517ad46023a8bd1f0c4103413/数据结构/第8章 排序/2.png -------------------------------------------------------------------------------- /数据结构/第8章 排序/3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Alice-and-Bob/CS408/a3c5fe965ad283b517ad46023a8bd1f0c4103413/数据结构/第8章 排序/3.png -------------------------------------------------------------------------------- /数据结构/第8章 排序/排序.md: -------------------------------------------------------------------------------- 1 | # 排序 2 | ## 内部排序 3 | ### 插入排序 4 | - **直接插入排序** 5 | 1. 思想:为了把某元素插入到已有的有序表L中,需要先在有序表L查找到要插入的位置k,之后把k+1到有序序列尾的元素全部后移一位,再在k位置填入要插入的元素 6 | 2. 代码: 7 | ```cpp 8 | void InsertSort(ElemType A[], int n){ 9 | int i,j; 10 | for(i=2; i<=n; i++){ 11 | if(A[i]A[0]){ 38 | high=mid-1; 39 | } 40 | else{ 41 | low=mid+1; 42 | } 43 | } //折半查找结束 44 | for(j=i-1; j>=high+1; --j){ //以high为基准统一后移元素 45 | A[j+1]=A[j]; 46 | } 47 | A[high+1]=A[0]; //插入 48 | } 49 | } 50 | ``` 51 | 3. 性能: 52 | 1. 与直接插入排序相同,但由于其折半查找的操作,故仅能用于顺序存储 53 | - **希尔排序** 54 | 1. 思想:将待排序列分割为若干形如$L[i, i+d, i+2d, \cdots, i+kd]$的子表,进行一次直接插入排序,当原序列大概成有序序列时,对整体进行一次直接插入排序 55 | 2. 代码: 56 | ```cpp 57 | void ShellSort(ElemType A[], int n){ 58 | for(dk=n/2; dk>=1; dk=dk/2){ 59 | for(i=dk+1; i<=n; ++i){ 60 | if(A[i]0&&A[0]i; j--){ //从末尾向前开始一趟冒泡 85 | if(A[j-1]>A[j]){ 86 | swap(A[j-1], A[j]); 87 | flag=true; 88 | } 89 | } 90 | if(flag==false){ 91 | return; 92 | } 93 | } 94 | } 95 | ``` 96 | 3. 性能: 97 | 1. 空间复杂度:$O(1)$ 98 | 2. 时间复杂度:平均情况、最坏情况下$O(n^2)$;最好情况下$O(n)$ 99 | 3. 稳定性:稳定 100 | - 快速排序 101 | 1. 思想:基于分治法,待排序序列任选一个值作为基准、枢轴(pivot),通过一趟排序使得小于基准的元素全部在左,大于的元素全部在右,这使得pivot元素放在了其最终应该在的位置上。递归地对左右半边使用这种排序,直到每个部分都只有一个元素或是空为止,排序完成 102 | 2. 代码: 103 | ```cpp 104 | void QuickSort(ElemType A[], int low, int high){ 105 | if(low=pivot) 115 | --high; 116 | A[low]=A[high]; //比pivot大的调整至左子列 117 | while(low **快排是排序算法中平均性能最优的算法** 130 | ### 选择排序 131 | - 直接选择排序 132 | 1. 思想:假设排序表为L[1...n],第i趟排序即从L[i...n]中选择关键字最小的元素与L(i)交换,**每一趟可以确定一个元素的最终位置** 133 | - 堆排序 134 | 1. 思想:借助堆这种数据结构进行排序 135 | 2. 堆:大根堆:父节点的元素大于其左右孩子;小根堆:父节点的元素小于其左右孩子 136 | 3. 过程: 137 | - 建堆:把无序数组写成完全二叉树形式,再从最后一个非叶结点开始挨个向前,调整二叉树使得其符合堆的要求,这个过程耗时$O(n)$ 138 | - 排序:构建好堆后,堆顶元素就是最大/最小元素,此时把堆顶元素同数组中的最后一个元素交换位置,并不再参与堆;此时重新调整堆,即可得到次大/次小元素 139 | ### 归并排序和基数排序 140 | - 归并排序 141 | 1. 思想:将两个两个以上的有序表组合成一个新的有序表;假设排序表有n个元素,可以视为n个有序的子表,两两归并,形成$\left \lceil n/2 \right \rceil$个子表,以此类推继续归并直到得到一个有序表为止 142 | 2. 过程:两段有序表A1A2相邻存放在一起,先把他们复制到另一段内存B中,每次从B中的两段A1A2选择一个最小的元素,放入A; 143 | - 基数排序 144 | 1. 思想:基于关键字各位的大小进行排序;常有最高位优先和最低位优先两种方法 145 | 2. 过程:重复“分配”——“收集”过程 146 | ### 内部排序算法比较 147 | ![](1.png) 148 | **这张图很重要** 149 | - 排序算法的选择: 150 | ![](2.png) 151 | ![](3.png) 152 | 153 | ## 外部排序 154 | - 概念 155 | 外部排序指要排序的文件过大,无法一次全部装入内存,需要存放在外存的文件的排序 156 | - 方法 157 | 1. 归并排序:把外存文件划分为一个个的小段,读入内存归并排序,形成初始归并段,接着把初始归并段再归并,需要注意每当归并完一个缓冲区大小的段,就必须立刻调入下一个缓冲区大小的段 158 | 2. 归并趟数;$\left \lceil log_k{r} \right \rceil$,r个初始归并段,做k路归并 159 | - 多路平衡归并与败者树 160 | - 置换-选择排序 161 | 用于生成初始归并段的时候减少生成的初始归并段的数量 162 | - 最佳归并树 163 | 1. 思想:把置换-选择排序得到的长度不一的初始归并段组织起来,迁移哈夫曼树的思想,实现最小次数的磁盘IO;这需要最佳归并树 164 | 2. 最佳归并树:一颗严格k叉树,如果结点不满足构成的要求,则需要添加度为0的虚节点 165 | - 判定添加虚节点的个数: 166 | $$ 167 | \begin{gathered} 168 | 令u=(n_0-1)\%(k-1),n_0=n\\ 169 | 若u\neq0,则需要添加空段,空归并段的个数:k-u-1\\ 170 | 否则不需要添加空段\\ 171 | \end{gathered} 172 | $$ -------------------------------------------------------------------------------- /数据结构/第8章 排序/第八章 排序.xmind: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Alice-and-Bob/CS408/a3c5fe965ad283b517ad46023a8bd1f0c4103413/数据结构/第8章 排序/第八章 排序.xmind -------------------------------------------------------------------------------- /立即推.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Alice-and-Bob/CS408/a3c5fe965ad283b517ad46023a8bd1f0c4103413/立即推.jpg -------------------------------------------------------------------------------- /网络安全基础与应用/1、概论.xmind: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Alice-and-Bob/CS408/a3c5fe965ad283b517ad46023a8bd1f0c4103413/网络安全基础与应用/1、概论.xmind -------------------------------------------------------------------------------- /网络安全基础与应用/2、密码学.xmind: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Alice-and-Bob/CS408/a3c5fe965ad283b517ad46023a8bd1f0c4103413/网络安全基础与应用/2、密码学.xmind -------------------------------------------------------------------------------- /网络安全基础与应用/3、网络安全应用.xmind: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Alice-and-Bob/CS408/a3c5fe965ad283b517ad46023a8bd1f0c4103413/网络安全基础与应用/3、网络安全应用.xmind -------------------------------------------------------------------------------- /网络安全基础与应用/4、系统安全.xmind: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Alice-and-Bob/CS408/a3c5fe965ad283b517ad46023a8bd1f0c4103413/网络安全基础与应用/4、系统安全.xmind -------------------------------------------------------------------------------- /计算机组成原理/第1章 概述/第一章 概述.md: -------------------------------------------------------------------------------- 1 | 不会有人概述还要总结吧不会吧不会吧不会吧不会吧不会吧不会吧不会吧不会吧不会吧不会吧不会吧不会吧不会吧不会吧不会吧不会吧不会吧不会吧不会吧不会吧不会吧不会吧不会吧不会吧不会吧不会吧不会吧不会吧不会吧不会吧不会吧不会吧不会吧不会吧不会吧不会吧不会吧不会吧不会吧不会吧不会吧不会吧不会吧不会吧不会吧不会吧不会吧不会吧不会吧不会吧不会吧 2 | 3 | 哦我写了啊 那没事了 4 | 5 | 计算机主要性能指标: 6 | - 机器字长:计算机一次整数运算能够处理的最长的二进制数据的长度,通常与CPU中的寄存器位数、加法器有关 7 | > 指令字长:一个指令字中包含二进制数据的长度 8 | > 存储字长:一个存储单元存储的二进制代码的长度 9 | 10 | - 数据通路带宽:数据总线一次能并行传送信息的位数,指系统总线的长度 11 | - CPU时钟频率:机器内部时钟的频率 12 | - CPU时钟周期:时钟频率的倒数,是计算机中最小的时间单位,每个动作需要至少一个时钟周期 13 | - CPI:执行一条指令所需要的时钟周期数 14 | - MIPS:每秒钟执行多少**百万条**指令 15 | > MFLOPS、GFLOPS、TFLOPS、EFLOPS、ZFLOPS: 16 | > M次浮点运算、G次浮点运算、T次浮点运算、E次浮点运算、Z次浮点运算,1000倍进一位 17 | 18 | -------------------------------------------------------------------------------- /计算机组成原理/第2章 数据的表示和运算/批注 2020-08-20 175911.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Alice-and-Bob/CS408/a3c5fe965ad283b517ad46023a8bd1f0c4103413/计算机组成原理/第2章 数据的表示和运算/批注 2020-08-20 175911.png -------------------------------------------------------------------------------- /计算机组成原理/第2章 数据的表示和运算/批注 2020-08-20 175946.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Alice-and-Bob/CS408/a3c5fe965ad283b517ad46023a8bd1f0c4103413/计算机组成原理/第2章 数据的表示和运算/批注 2020-08-20 175946.png -------------------------------------------------------------------------------- /计算机组成原理/第2章 数据的表示和运算/批注 2020-08-20 183159.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Alice-and-Bob/CS408/a3c5fe965ad283b517ad46023a8bd1f0c4103413/计算机组成原理/第2章 数据的表示和运算/批注 2020-08-20 183159.png -------------------------------------------------------------------------------- /计算机组成原理/第2章 数据的表示和运算/第二章 数据的表示和运算.xmind: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Alice-and-Bob/CS408/a3c5fe965ad283b517ad46023a8bd1f0c4103413/计算机组成原理/第2章 数据的表示和运算/第二章 数据的表示和运算.xmind -------------------------------------------------------------------------------- /计算机组成原理/第2章 数据的表示和运算/第二章.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Alice-and-Bob/CS408/a3c5fe965ad283b517ad46023a8bd1f0c4103413/计算机组成原理/第2章 数据的表示和运算/第二章.md -------------------------------------------------------------------------------- /计算机组成原理/第7章 输入输出系统/IO.md: -------------------------------------------------------------------------------- 1 | # 外部设备 2 | ## 显示器 3 | 显示存储器:为了正常连贯显示,必须要把至少一帧的图像信息存储在显示存储器中。因此显存容量最小要存一帧图像,大小至少为:显示单元个数(分辨率)× 单个单元所需数据大小(颜色深度位数) 4 | ## 磁盘 5 | - 组成:若干个盘片组成阵列,每个盘片划分为若干同心圆称为磁道;再沿半径方向划分为若干个扇区,磁盘按块/扇区存取 6 | - 平均存取时间:寻道时间(磁头移动到相应磁道的耗时)+旋转延迟时间(扇区转到磁头下的耗时,一般情况下认为是磁盘转半圈的时间)+传输时间(数据传输时间)+【控制电路的延时】 7 | - 磁盘阵列RAID:RAID0扩大了存储容量和存取速度但没有容错能力;RAID1简单复制磁盘内容,有基础的容错能力 8 | 9 | ## IO接口 10 | - 接口和端口:端口=寄存器;接口=若干寄存器+控制电路 11 | 12 | ## IO方式 13 | ### 程序查询方式: 14 | - CPU执行初始化程序,预置传送参数;向IO接口发送命令字,启动IO设备;不断查询IO接口的设备状态寄存器来等待IO准备好数据; 15 | - 特点是CPU忙等,一直查询IO接口状态使得CPU无法执行其他指令 16 | ### 程序中断方式: 17 | - CPU安排启动外设,之后转去执行其他指令,当外部设备准备好数据,主动向CPU发出中断请求,请求CPU时间;CPU一旦同意请求,将暂时中止正在执行的程序,转入中断服务程序为外设服务;服务结束后CPU继续执行原来的指令 18 | - 中断请求: 19 | - 内中断、外中断 20 | - 内中断:在处理器和内存内部产生的中断,包括各种计算错误、内部设备损坏、用户执行特权指令(自陷)、用户态到核心态的切换 21 | - 外中断:来自外设的中断,可以是IO设备的中断、时钟中断、外部信号中断 22 | - 硬件中断、软件中断 23 | - 硬件中断:外部硬件产生的中断,属于外中断 24 | - 软件中断:通过某条指令产生的中断,属于内中断 25 | - 非屏蔽中断、可屏蔽中断 26 | - 非屏蔽中断:硬件中断,不受CPU关中断影响 27 | - 可屏蔽中断:硬件中断,在CPU关中断IF=0时不被CPU相应 28 | - 中断隐指令: 29 | - 关中断 30 | - 保存断点:PC寄存器 31 | - 引出中断服务程序:中断服务程序地址→PC寄存器 32 | > 中断隐指令是有**硬件完成**的,不需要执行代码 33 | - 中断流程: 34 | - 关中断:防止保存断点的时候被新的中断打断 35 | - 保存断点:保存PC寄存器的值 36 | - 引出中断服务程序:找到中断服务程序的地址送到PC寄存器中,开始执行中断服务程序 37 | - 保存现场和屏蔽字:**中断服务程序来保存现场** 38 | - 开中断:中断嵌套 39 | - 执行中断服务程序 40 | - 关中断:中断服务程序执行完备,保证在恢复现场和屏蔽字的时候不被打断 41 | - 恢复现场和屏蔽字 42 | - 开中断、中断返回 43 | > 保存现场和恢复现场都由中断服务程序进行,而程序断点由硬件执行中断隐指令完成 44 | - 多级中断嵌套和屏蔽字 45 | - 指可否相互屏蔽,例如A>B,则A执行过程屏蔽了B,不会因为B而中断;反之B可以被A的出现打断 46 | 47 | 48 | ### DMA方式 49 | - DMA流程 50 | - 接受外设发出的DMA请求,并向CPU请求总线使用权 51 | - CPU同意,让出总线控制权,进入DMA周期 52 | - 确定传送数据的主存单元地址和长度,自动修改主存地址计数和传送长度计数 53 | - 根据数据传送的方向,发出读/写控制信号,传送一定长度数据 54 | - 重复以上过程,直到全部数据传送完成,向CPU发送中断,通知CPU完成数据传送;由CPU完成后处理 55 | - 特点: 56 | - 硬件执行,无需CPU时间 57 | - 只要CPU不占用总线就能响应DMA请求 58 | - DMA只能传输数据,没有异常事件处理能力 -------------------------------------------------------------------------------- /计算机网络/第1章 绪论/第一章 概述.xmind: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Alice-and-Bob/CS408/a3c5fe965ad283b517ad46023a8bd1f0c4103413/计算机网络/第1章 绪论/第一章 概述.xmind -------------------------------------------------------------------------------- /计算机网络/第2章 物理层/批注 2020-03-21 110405.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Alice-and-Bob/CS408/a3c5fe965ad283b517ad46023a8bd1f0c4103413/计算机网络/第2章 物理层/批注 2020-03-21 110405.png -------------------------------------------------------------------------------- /计算机网络/第2章 物理层/批注 2020-03-21 111332.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Alice-and-Bob/CS408/a3c5fe965ad283b517ad46023a8bd1f0c4103413/计算机网络/第2章 物理层/批注 2020-03-21 111332.png -------------------------------------------------------------------------------- /计算机网络/第2章 物理层/批注 2020-03-21 112625.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Alice-and-Bob/CS408/a3c5fe965ad283b517ad46023a8bd1f0c4103413/计算机网络/第2章 物理层/批注 2020-03-21 112625.png -------------------------------------------------------------------------------- /计算机网络/第2章 物理层/第二章 物理层.xmind: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Alice-and-Bob/CS408/a3c5fe965ad283b517ad46023a8bd1f0c4103413/计算机网络/第2章 物理层/第二章 物理层.xmind -------------------------------------------------------------------------------- /计算机网络/第3章 数据链路层/JUU2JTlDJTg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Alice-and-Bob/CS408/a3c5fe965ad283b517ad46023a8bd1f0c4103413/计算机网络/第3章 数据链路层/JUU2JTlDJTg.png -------------------------------------------------------------------------------- /计算机网络/第3章 数据链路层/QQ截图20200313211614.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Alice-and-Bob/CS408/a3c5fe965ad283b517ad46023a8bd1f0c4103413/计算机网络/第3章 数据链路层/QQ截图20200313211614.jpg -------------------------------------------------------------------------------- /计算机网络/第3章 数据链路层/批注 2020-03-13 221429.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Alice-and-Bob/CS408/a3c5fe965ad283b517ad46023a8bd1f0c4103413/计算机网络/第3章 数据链路层/批注 2020-03-13 221429.png -------------------------------------------------------------------------------- /计算机网络/第3章 数据链路层/批注 2020-03-13 221757.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Alice-and-Bob/CS408/a3c5fe965ad283b517ad46023a8bd1f0c4103413/计算机网络/第3章 数据链路层/批注 2020-03-13 221757.png -------------------------------------------------------------------------------- /计算机网络/第3章 数据链路层/批注 2020-03-13 223128.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Alice-and-Bob/CS408/a3c5fe965ad283b517ad46023a8bd1f0c4103413/计算机网络/第3章 数据链路层/批注 2020-03-13 223128.png -------------------------------------------------------------------------------- /计算机网络/第3章 数据链路层/批注 2020-03-13 225659.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Alice-and-Bob/CS408/a3c5fe965ad283b517ad46023a8bd1f0c4103413/计算机网络/第3章 数据链路层/批注 2020-03-13 225659.png -------------------------------------------------------------------------------- /计算机网络/第3章 数据链路层/批注 2020-03-13 232315.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Alice-and-Bob/CS408/a3c5fe965ad283b517ad46023a8bd1f0c4103413/计算机网络/第3章 数据链路层/批注 2020-03-13 232315.png -------------------------------------------------------------------------------- /计算机网络/第3章 数据链路层/批注 2020-03-14 230521.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Alice-and-Bob/CS408/a3c5fe965ad283b517ad46023a8bd1f0c4103413/计算机网络/第3章 数据链路层/批注 2020-03-14 230521.png -------------------------------------------------------------------------------- /计算机网络/第3章 数据链路层/批注 2020-03-14 230809.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Alice-and-Bob/CS408/a3c5fe965ad283b517ad46023a8bd1f0c4103413/计算机网络/第3章 数据链路层/批注 2020-03-14 230809.png -------------------------------------------------------------------------------- /计算机网络/第3章 数据链路层/批注 2020-03-20 221351.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Alice-and-Bob/CS408/a3c5fe965ad283b517ad46023a8bd1f0c4103413/计算机网络/第3章 数据链路层/批注 2020-03-20 221351.png -------------------------------------------------------------------------------- /计算机网络/第3章 数据链路层/批注 2020-03-20 224301.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Alice-and-Bob/CS408/a3c5fe965ad283b517ad46023a8bd1f0c4103413/计算机网络/第3章 数据链路层/批注 2020-03-20 224301.png -------------------------------------------------------------------------------- /计算机网络/第3章 数据链路层/批注 2020-03-20 224815.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Alice-and-Bob/CS408/a3c5fe965ad283b517ad46023a8bd1f0c4103413/计算机网络/第3章 数据链路层/批注 2020-03-20 224815.png -------------------------------------------------------------------------------- /计算机网络/第3章 数据链路层/第三章 数据链路层.xmind: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Alice-and-Bob/CS408/a3c5fe965ad283b517ad46023a8bd1f0c4103413/计算机网络/第3章 数据链路层/第三章 数据链路层.xmind -------------------------------------------------------------------------------- /计算机网络/第4章 网络层/QQ截图20200225180411.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Alice-and-Bob/CS408/a3c5fe965ad283b517ad46023a8bd1f0c4103413/计算机网络/第4章 网络层/QQ截图20200225180411.jpg -------------------------------------------------------------------------------- /计算机网络/第4章 网络层/QQ截图20200226161518.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Alice-and-Bob/CS408/a3c5fe965ad283b517ad46023a8bd1f0c4103413/计算机网络/第4章 网络层/QQ截图20200226161518.jpg -------------------------------------------------------------------------------- /计算机网络/第4章 网络层/QQ截图20200226171425.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Alice-and-Bob/CS408/a3c5fe965ad283b517ad46023a8bd1f0c4103413/计算机网络/第4章 网络层/QQ截图20200226171425.jpg -------------------------------------------------------------------------------- /计算机网络/第4章 网络层/QQ截图20200226181437.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Alice-and-Bob/CS408/a3c5fe965ad283b517ad46023a8bd1f0c4103413/计算机网络/第4章 网络层/QQ截图20200226181437.jpg -------------------------------------------------------------------------------- /计算机网络/第4章 网络层/QQ截图20200226214603.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Alice-and-Bob/CS408/a3c5fe965ad283b517ad46023a8bd1f0c4103413/计算机网络/第4章 网络层/QQ截图20200226214603.jpg -------------------------------------------------------------------------------- /计算机网络/第4章 网络层/QQ截图20200226232313.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Alice-and-Bob/CS408/a3c5fe965ad283b517ad46023a8bd1f0c4103413/计算机网络/第4章 网络层/QQ截图20200226232313.jpg -------------------------------------------------------------------------------- /计算机网络/第4章 网络层/QQ截图20200226232517.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Alice-and-Bob/CS408/a3c5fe965ad283b517ad46023a8bd1f0c4103413/计算机网络/第4章 网络层/QQ截图20200226232517.jpg -------------------------------------------------------------------------------- /计算机网络/第4章 网络层/QQ截图20200226232707.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Alice-and-Bob/CS408/a3c5fe965ad283b517ad46023a8bd1f0c4103413/计算机网络/第4章 网络层/QQ截图20200226232707.jpg -------------------------------------------------------------------------------- /计算机网络/第4章 网络层/批注 2020-02-25 175759.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Alice-and-Bob/CS408/a3c5fe965ad283b517ad46023a8bd1f0c4103413/计算机网络/第4章 网络层/批注 2020-02-25 175759.png -------------------------------------------------------------------------------- /计算机网络/第4章 网络层/第四章 网络层.xmind: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Alice-and-Bob/CS408/a3c5fe965ad283b517ad46023a8bd1f0c4103413/计算机网络/第4章 网络层/第四章 网络层.xmind -------------------------------------------------------------------------------- /计算机网络/第5章 运输层/QQ截图20200229154319.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Alice-and-Bob/CS408/a3c5fe965ad283b517ad46023a8bd1f0c4103413/计算机网络/第5章 运输层/QQ截图20200229154319.jpg -------------------------------------------------------------------------------- /计算机网络/第5章 运输层/QQ截图20200229165520.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Alice-and-Bob/CS408/a3c5fe965ad283b517ad46023a8bd1f0c4103413/计算机网络/第5章 运输层/QQ截图20200229165520.jpg -------------------------------------------------------------------------------- /计算机网络/第5章 运输层/QQ截图20200301103830.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Alice-and-Bob/CS408/a3c5fe965ad283b517ad46023a8bd1f0c4103413/计算机网络/第5章 运输层/QQ截图20200301103830.jpg -------------------------------------------------------------------------------- /计算机网络/第5章 运输层/QQ截图20200301104117.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Alice-and-Bob/CS408/a3c5fe965ad283b517ad46023a8bd1f0c4103413/计算机网络/第5章 运输层/QQ截图20200301104117.jpg -------------------------------------------------------------------------------- /计算机网络/第5章 运输层/QQ截图20200301104643.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Alice-and-Bob/CS408/a3c5fe965ad283b517ad46023a8bd1f0c4103413/计算机网络/第5章 运输层/QQ截图20200301104643.jpg -------------------------------------------------------------------------------- /计算机网络/第5章 运输层/QQ截图20200301112329.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Alice-and-Bob/CS408/a3c5fe965ad283b517ad46023a8bd1f0c4103413/计算机网络/第5章 运输层/QQ截图20200301112329.jpg -------------------------------------------------------------------------------- /计算机网络/第5章 运输层/QQ截图20200301112353.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Alice-and-Bob/CS408/a3c5fe965ad283b517ad46023a8bd1f0c4103413/计算机网络/第5章 运输层/QQ截图20200301112353.jpg -------------------------------------------------------------------------------- /计算机网络/第5章 运输层/QQ截图20200301112428.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Alice-and-Bob/CS408/a3c5fe965ad283b517ad46023a8bd1f0c4103413/计算机网络/第5章 运输层/QQ截图20200301112428.jpg -------------------------------------------------------------------------------- /计算机网络/第5章 运输层/QQ截图20200301112512.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Alice-and-Bob/CS408/a3c5fe965ad283b517ad46023a8bd1f0c4103413/计算机网络/第5章 运输层/QQ截图20200301112512.jpg -------------------------------------------------------------------------------- /计算机网络/第5章 运输层/QQ截图20200301113045.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Alice-and-Bob/CS408/a3c5fe965ad283b517ad46023a8bd1f0c4103413/计算机网络/第5章 运输层/QQ截图20200301113045.jpg -------------------------------------------------------------------------------- /计算机网络/第5章 运输层/QQ截图20200301113117.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Alice-and-Bob/CS408/a3c5fe965ad283b517ad46023a8bd1f0c4103413/计算机网络/第5章 运输层/QQ截图20200301113117.jpg -------------------------------------------------------------------------------- /计算机网络/第5章 运输层/批注 2020-03-01 164003.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Alice-and-Bob/CS408/a3c5fe965ad283b517ad46023a8bd1f0c4103413/计算机网络/第5章 运输层/批注 2020-03-01 164003.png -------------------------------------------------------------------------------- /计算机网络/第5章 运输层/批注 2020-03-01 175851.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Alice-and-Bob/CS408/a3c5fe965ad283b517ad46023a8bd1f0c4103413/计算机网络/第5章 运输层/批注 2020-03-01 175851.png -------------------------------------------------------------------------------- /计算机网络/第5章 运输层/批注 2020-03-01 184309.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Alice-and-Bob/CS408/a3c5fe965ad283b517ad46023a8bd1f0c4103413/计算机网络/第5章 运输层/批注 2020-03-01 184309.png -------------------------------------------------------------------------------- /计算机网络/第5章 运输层/第五章 运输层.xmind: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Alice-and-Bob/CS408/a3c5fe965ad283b517ad46023a8bd1f0c4103413/计算机网络/第5章 运输层/第五章 运输层.xmind -------------------------------------------------------------------------------- /计算机网络/第6章 应用层/批注 2020-03-21 182515.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Alice-and-Bob/CS408/a3c5fe965ad283b517ad46023a8bd1f0c4103413/计算机网络/第6章 应用层/批注 2020-03-21 182515.png -------------------------------------------------------------------------------- /计算机网络/第6章 应用层/批注 2020-03-21 184009.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Alice-and-Bob/CS408/a3c5fe965ad283b517ad46023a8bd1f0c4103413/计算机网络/第6章 应用层/批注 2020-03-21 184009.png -------------------------------------------------------------------------------- /计算机网络/第6章 应用层/批注 2020-03-21 184304.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Alice-and-Bob/CS408/a3c5fe965ad283b517ad46023a8bd1f0c4103413/计算机网络/第6章 应用层/批注 2020-03-21 184304.png -------------------------------------------------------------------------------- /计算机网络/第6章 应用层/批注 2020-03-21 184953.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Alice-and-Bob/CS408/a3c5fe965ad283b517ad46023a8bd1f0c4103413/计算机网络/第6章 应用层/批注 2020-03-21 184953.png -------------------------------------------------------------------------------- /计算机网络/第6章 应用层/批注 2020-03-21 185300.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Alice-and-Bob/CS408/a3c5fe965ad283b517ad46023a8bd1f0c4103413/计算机网络/第6章 应用层/批注 2020-03-21 185300.png -------------------------------------------------------------------------------- /计算机网络/第6章 应用层/第六章 应用层.xmind: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Alice-and-Bob/CS408/a3c5fe965ad283b517ad46023a8bd1f0c4103413/计算机网络/第6章 应用层/第六章 应用层.xmind --------------------------------------------------------------------------------