数据结构---并查集 这段时间自己做了几次笔试题,好几次都遇到了有关于并查集求解的问题。然而因为自己对于并查集的不熟悉导致的结果都很不美好,所以决定深入学习一下并查集。1、并查集的概念并查集是由一个数组、两个函数(查找一个数的根、合并路线)组成,常用来解决一些不相交集合的合并与查找问题。2.并查集实现原理(下文给的图的n都取值为10)(1)元素初始化给定n个元素组成的一个数组,数组的下标依次为0,1...
动态内存管理 1、了解内存 2.C语言动态内存管理C语言使用malloc/calloc/realloc在堆上进行空间开辟,使用free进行空间释放; malloc和free都声明在头文件 stdlib.h 中2.1malloc(1)函数原型:void* malloc(size_t size)(2)参数:内存空间的长度(3)返回值:返回值是一个指向开辟空间的起始地址的一个指针如...
三种页面置换算法 1、为什么要有页面置换算法程序运行过程中,有时要访问的页面不在内存中,而需要将其调入内存。但是内存已经无空闲空间存储页面,为保证程序正常运行,系统必须从内存中调出一页程序或数据送到磁盘对换区,此时需要一定的算法来决定到低需要调出那个页面。通常将这种算法称为“页面置换算法”。2.页面置换算法的分类2.1 最佳置换算法(OPT)(1)实现原理:每次选择未来长时间不被访问的或者以后永不使...
进程间通信---信号量 1.基本概念(1)临界资源:系统内某些资源一段时间内只能被一个进程使用,称这样的资源为临界资源。(2)临界区:在进程中涉及到互斥资源的程序段称为临界区。(3)进程互斥:某些资源在被一个进程访问时,其他进程要想访问就必须等待,当资源被访问完了之后才可以被其他进程访问。(4)进程同步:多个进程相互配合共同完成一项工作。(5)互斥实例火车票售票例子:有两个进程A进程、B进程,...
死锁 1. 死锁的定义(1)概念一个进程组内的每一个进程都在等待仅由该组进程内的其他进程才能引发的事件,那么该进程是死锁的。如:小A与小B一起去吃饭,桌子上只有两根筷子。小A拿一根筷子,小B拿起另一根筷子,当菜上桌时,小A需要小B的那根筷子才能够迟到饭,小B需要小A的那根筷子才能吃到饭,但是他们彼此又都不愿意将自己的筷子给对方,从而两人就会无休止的等下去,都吃不了饭。这种现象就是死锁。...
面向对象特性之继承 1.继承的概念1.1 为什么要有继承在C++中,每一个类都有属于自己的成员函数与成员变量,但有的时候有两个类的成员函数与成员变量相同,为了避免对此重复定义相同的类,引入继承,子类只需继承父类的成员函数与变量即可1.2 继承的定义在创建一个类时,不需要重新编写成员函数与成员变量,只需要指定新建的类继承了一个已有的类即可;已有的类是父类(基类),新建的类是子类(派生类);继承是...
C语言---小算法 题目:1元钱一瓶汽水,喝完后两个空瓶换一瓶汽水,问:你有20元钱,最多可以喝到几瓶汽水?分析:一元钱一瓶水,则N元钱就可以买N瓶水; 假设有N个空瓶,则可以换的N/2瓶水,则此时有空瓶N/2+N%2; 当空瓶的数量小于2的时候,无法再换水int main(){ int money = 20; int s = money; while (money >...
C++---引用的基础知识 1.引用1.1 定义引用就是变量的别名(并没有重新定义一个变量),通过将声明符写成&d的形式来定义引用类型。需注意的是:一个变量可以有多个别名; 引用的变量必须初始化; 引用只能在初始化的时候使用一次,不能再引用改变其他变量如下所示,已定义变量a,b与c相当于a的别名,即a可以叫b,也可以叫c;b、c与a指向同一块空间,当其中一个改变时,其他的值也跟着改变in...
C++基础知识(命名空间、重载、缺省参数) 一、类型分类类型分类: 基础类型 自定义类型二、命名空间1.命名空间相当于全局域,用{}括起来一个文件,用namespace给这个文件命名。 std是C++库里的文件,它的使用有两种方法,一种是using namespace std,一种是std::cout<<i<<std::endl(::是域作用解析符)。2....
应用层---HTTP协议 应用层应用层是TCP/IP协议分层的最顶层模型,它的作用是维持好应用程序之间的沟通,维护好特定的协议。 如简单电子邮件传输(SMTP),文件传输协议(FTP),网络远程访问协议(Telnet)等。应用层协议分为两种,一种是根据客户要求自己对数据格式约定的自定制应用层协议;另一种是应用层知名协议,即已被他人定义好且十分好用的应用层协议,其中HTTP协议就是其中一种。HTTP协议-超文本传...
TCP与UDP的比较 TCP与UDP的对比1、协议段格式不同(1)UDP的报头有8字节,TCP的报头有20个字节,UDP比TCP更为简单(2)UDP有16位UDP长度能确认报文长度,而TCP只有4位首部长度,无法确认报文长度,容易发生粘包问题(3)UDP的报头有源端口号、目的端口号、16位UDP长度、16位校验和;而TCP的报头不仅有源端口号、目的端口号、16位校验和,还有32位序号和确认序号、4位首部...
进程间通信---共享内存 1.什么是共享内存在物理空间申请一块内存,这块内存通过页表映射到对个进程的共享存储映射区,一进城可通过页表向这个内存里写数据,一进城可通过页表从这块内存中拿数据。这个可被多个进程所能利用的内存称为共享内存。内存映射到共享他们的进程的地址空间,则数据的传输不再涉及内核,所以共享内存是最快的IPC方式。2.共享内存的特点(1)共享内存是双向通信(全双工)。(2)共享内存是IPC...
传输层---TCP协议 1.TCP协议段格式源端口号/目的端口号:知道数据从哪进程中来,要到哪个进程中去32位序号/32位确认序号:传输数据时按字节进行编号,序号保证数据按序到达,而双方都需要确认,所以有序号和确认序号4位首部长度:将报头与有效载荷进行分离。4位表示的最大数据是15,则头部最大长度=15*4=60。6位标志位: URG:紧急指针标志位 ACK:确认标志位。ACK=1...
进程间通信-消息队列 1.消息队列的概念消息队列其实就是一个链表,往消息队列写数据解释向链表里插入一个消息节点,从消息队列里拿数据就是访问该节点,访问完删除该节点。一个消息队列由标识符来标识2.消息队列函数2.1 msgget函数---打开或创建消息队列头文件:#include<sys/ipc.h> #include<sys/ipc.h>函数实现 ...
进程间通信---管道 1.进程间通信介绍 (1) 进程间通信(IPC):多个进程间进行信息交流 (2) 进程间通信的方式:管道、消息队列、共享内存、信号量、socket等; (3) 进程间通信的目的: 数据传输:一个进程将他的数据发给另一个进程 资源共享:多个进程间共享同样的资源 通知事件:一个进程给另一个进程发消息,通知他发生了什么事...
TCP协议客户端与服务器端一般的通信过程 服务器初始化 (1)调用socket,创建文件描述符 (2)调用bind,将文件描述符与ip/port连接起来。若端口号已被占用,则bind失败 (3)调用listen,声明该文件描述符是服务器的一个文件描述符,为之后的accept做准备 (4)调用accept,并处于阻塞状态,等待客户端连接 建立连接 (1)调用socket,创建文件描述符 ...
异常 处理错误的方法传统处理异常的方法1.中断程序 2.返回错误码 3.调用一个预先设置的出现错误时需要调用的函数—-回调函数 #include<iostream> #include<stdio.h> #include<errno.h> void Test() { FILE* fout=fopen("test.c","...
排序算法的比较 插入排序直接插入排序void insertsort1(int* a, int n){ assert(a); int i = 0; int end = 0; int tmp = 0; for (i = 0; i < n-1; ++i) { end =...
vector的基本使用 vector是STL最常见的容器,它是一种顺序容器,可以随机访问。vector是一块连续分配的内存,与数组较为相似。不同之处在于数组是静态分配内存,确定大小之后不能改变;vector是动态分配内存,可根据自身元素的不断增多而进行的增容。1.声明头文件要使用vector,必须添加头文件,而且如果没有命名空间using namespace std的声明,每次在使用vector时vector的前...
面向对象的特性---多态 多态 1.虚函数:在类的成员函数前加virtual即构成虚函数。作用是通过基类的指针与引用调用派生类的成员函数 2.多态的概念 多态即多种形态,通过调用不同的函数实现不同的功能。 如买票机制,不同的对象买票的制度也不同,如普通人买全票,学生可买半价票等。 3.多态的条件 (1)虚函数的...