C++03-提升
1 模板1.1 模板的概念模板就是建立通用的模具,大大提高复用性 模板的特点: 模板不可以直接使用,它只是一个框架 模板的通用并不是万能的 1.2 函数模板 C++另一种编程思想称为 ==泛型编程== ,主要利用的技术就是模板 C++提供两种模板机制:函数模板和类模板 1.2.1 函数模板语法函数模板作用: 建立一个通用函数,其函数返回值类型和形参类型可以不具体制定,用一个虚拟的类型来代表。 语法: 12template<typename T>函数声明或定义 解释: template — 声明创建模板 typename — 表面其后面的符号是一种数据类型,可以用class代替 T — 通用的数据类型,名称可以替换,通常为大写字母 12345678910111213141516//利用模板提供通用的交换函数template<typename T>void mySwap(T& a, T& b){ T temp = a; a = b; b =...
算法与数据结构04-树与二叉树
1. 树的基本概念树是由节点和边组成的数据结构,每个节点可以有多个子节点,但只能有一个父节点 n叉树:每个节点最多可以有n个子节点 树的深度(depth):是指从根节点到最远叶子节点的层数 节点的深度:从根节点到该节点的唯一路径上的边的数量 节点的高度:从该节点到最远叶子节点的路径上的边的数量 节点的度(degree):指它的子节点数量 叶子节点(leaf):没有子节点的节点 .oomskavsjrhx{zoom: 40%;} 以上图为例,节点B深度=1,高度=2 以上图为例,节点F深度=2,高度=0 核心总结:树的节点代表『集合』,树的边代表『关系』 2. 树形结构的遍历方式2.1 广度优先遍历(层序遍历)借用队列,按照层序的方式依次遍历到,具体顺序如下: 2.2 深度优先遍历借用栈,对于一个节点只要有一个子节点就将其入栈,直到没有就将相关节点弹栈 将以上的序列出入做成一张大的时间戳,可以根据区间包含关系,来判断是否是父子关系 例如:对于2号和4号,显然2号的区间内包含4号,故4是2的子节点 3....
算法与数据结构03-线性结构(习题技巧与思路)
1. 环形链表判断方法-快慢指针 LeetCode 141 给你一个链表的头节点 head ,判断链表中是否有环。 如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,评测系统内部使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。注意:pos 不作为参数进行传递 。仅仅是为了标识链表的实际情况。 如果链表中存在环 ,则返回 true 。 否则,返回 false 。 12345678910111213class Solution {public: bool hasCycle(ListNode* head) { ListNode* fast = head, * slow = head; if (head == NULL || head->next == NULL) return false; while (fast != NULL && fast->next != NULL) { ...
算法与数据结构03-线性结构
1. 顺序表1.1 概念线性表(Linear List):由同类型数据元素构成有序序列的线性结构 表中元素个数称为线性表的长度 线性表没有元素时,称为空表 表起始位置称表头,表结束位置称表尾 线性表的结构:一段连续的存储空间、两个属性:size(表的大小),count(元素个数) 1.2 代码实现1.2.1 结构定义1234typedef struct vector { int size, count; //两个属性 int* data; //这段空间(连续的这段存储区)}vector; 1.2.2 初始化(创建)新表1234567vector* getNewVector(int n) { //创建一个新表(返回这个表头的地址) vector* p = (vector*)malloc(sizeof(vector)); //开辟顺序表本身的空间(也就是储存size,count,data这三个成员的空间) p->size = n; p->count = 0; p->data =...
算法与数据结构02-递归函数
1. 递归函数设计技巧1.1 数学归纳法带着这样的思维方式检查,可以大大减少程序错误率 基本思路: step1: 验证P(1)成立 step2: 假设P(k)成立,证明P(k+1)也成立(证明前一项正确那么后一项也正确) step3: 联合step1与step2,证明由P(1) -> P(n)成立 1.2 递归函数设计重要的三个部分 给『递归函数』一个明确的语义 实现边界条件时的程序逻辑 假设递归函数调用返回结果是正确的,实现本层函数逻辑 典型示例: 1234int f(int n){ //明确递归函数语义:f(n)用于求n的阶乘 if( n == 1 ) return 1; //实现边界条件 return f(n - 1) * n; //假设f(n-1)的实现是正确的,本层要实现阶乘就要用f(n-1)*n}
信息安全导论02-密码学基础
1. 密码学概述1.1密码学基本概念密码学的定义: 是结合数学、计算机、信息论等的综合性交叉学科 分为密码编码学(cryptography)和密码分析学(cryptanalysis) 密码编码学研究如何设计编码使信息只能被指定接收者读懂 密码分析学研究如何攻击密码系统,设计和使用密码遵守柯克霍夫准则(算法必须公开,对密钥进行保护) 密码体制组成: 明文空间M:全体明文集合 密文空间C:全体密文集合 密钥空间K:全体密钥集合 加密算法E:c = E(ke, m) 解密算法D:m = D(kd, c) 密码体制分类: 对称密码体制:加密密钥ke和解密密钥kd相同 非对称密码体制:加密密钥ke和解密密钥kd不同,也称公钥密码 密码体制设计原则: 密码算法安全强度高 安全性依赖于密钥而非算法保密性(柯克霍夫原则) 密钥空间要足够大 易于实现和使用 1.2...
英美戏剧4
一. 田纳西·威廉斯与《玻璃动物园》Tennessee Williams and The Glass Menagerie (Chinese-English Bilingual) 第一部分:田纳西·威廉斯概述一、基本信息 生平(1911-1983)/ Life (1911-1983) 原名Thomas Lanier Williams,1939年改名Tennessee WilliamsOriginally named Thomas Lanier Williams, changed to Tennessee Williams in 1939 美国最重要的战后剧作家之一One of the most important post-war American playwrights 两获普利策奖,四获纽约剧评奖和道诺森奖Won two Pulitzer Prizes and four New York Drama Critics’ Circle Awards and Donaldson Awards 被誉为美国南方文学最伟大的剧作家Acclaimed as the...
C++02-进阶
1 内存分区模型C++程序在执行时,将内存大方向划分为4个区域 代码区:存放函数体的二进制代码,由操作系统进行管理的 全局区:存放全局变量和静态变量以及常量 栈区:由编译器自动分配释放, 存放函数的参数值,局部变量等 堆区:由程序员分配和释放,若程序员不释放,程序结束时由操作系统回收 1.1 程序运行前在程序编译后,生成了exe可执行程序,未执行该程序前分为两个区域 代码区: 存放 CPU 执行的机器指令 代码区是共享的,共享的目的是对于频繁被执行的程序,只需要在内存中有一份代码即可 代码区是只读的,使其只读的原因是防止程序意外地修改了它的指令 全局区: 全局变量和静态变量存放在此. 全局区还包含了常量区, 字符串常量和其他常量也存放在此. 该区域的数据在程序结束后由操作系统释放. 1.2 程序运行后栈区: 由编译器自动分配释放,...