- 博客(162)
- 资源 (12)
- 收藏
- 关注
原创 CPU调度
while纯占cpu,不做输入输出操作,这种程序存在没有任何意义。大多数程序通过Io获得数据,通过cpu对数据进行处理,再通过IO将结果输出出去一、调度1.分类就绪队列里的进程让哪一个先进行1.运行态到等待态2.运行态到就绪态3.等待态到就绪态4.运行的进程退出非抢占式:1,4,自愿出让cpu自愿抢占式:2,3 抢占式的调度是被动的现在的OS一般都是抢占式的,让其他进程都有运行...
2020-08-09 09:26:55
197
原创 计算机的启动过程
阮一峰:http://www.ruanyifeng.com/blog/2013/02/booting.html结合:https://blog.csdn.net/langeldep/article/details/8788119
2020-08-09 09:23:20
155
原创 计算机启动过程(x86)
1.x86PC刚开机时CPU处于实模式,和保护模式对应,实模式的寻址CS:IP(CS左移4位+IP),和保护模式不一样!2.CS=0xFFFF;IP=0x0000;3.寻址0xFFFF0(ROM BIOS映射区),唯一有代码的地方4.检查RAM,键盘,显示器,软硬磁盘5.将磁盘 0磁道0扇区读入内存的0x7c00处(OS的引导扇区)0x7c00存放的代码就是从磁盘引导扇区读入的那512...
2020-08-09 09:21:50
1099
原创 C语言实现最小生成树之克鲁斯卡尔算法
图示难点是:当选择最后一条边时,v2-v3是5,v1-v4也是5,但是v1-v4一旦连上就会出现环且这个图不是连通图,所以在代码中如何判断环的出现和保证最小生成树是连通的?代码//定义一个结构体记录生成树一条边的起始顶点和终止顶点,还有相应的权值的信息typedef struct Edge{ int x; // start int y; // end E cost;}Edge;int cmp(const void*a, const void *b)//比较权值的大小{ re
2020-08-07 20:13:48
1327
原创 C语言实现最小生成树之普里姆算法
实现的文字说明如何实现的图示说明mst[2]=1 lowcost[2]=6 从点1到点2的权值是6以v3为终点的权值最小,把边<MST[3],3>=1加入最小生成树MST以v6为终点的权值最小,把边<MST[6],6>=4加入最小生成树MST以v4为终点的权值最小,把边<MST[4],4>=2加入最小生成树MST以v2为终点的权值最小,把边<MST[2],2>=5加入最小生成树MST当所有的数组的值都为0,说明创建成
2020-08-07 16:25:48
1237
原创 C语言实现邻接矩阵(无向图的顺序表示)
有向/无向不带权图带权图定义图的结构体#define Default_Vertex_Size 10#define T chartypedef struct GraphMtx{ int MaxVertices;//最大顶点容量 int NumVertices;//图中顶点个数 int NumEdges;//图中边的条数 T *VerticesList;//指向存有顶点的空间的指针 int **Edge;//指向存矩阵的空间的指针}GraphMtx;初始化void
2020-08-06 13:06:22
2588
原创 数据结构+算法=程序设计
文章目录程序设计:为计算机处理问题编制的一组指令集数据结构:问题的数学模型数据数据元素(数据结构中讨论的基本单位)数据结构数据结构的形式定义 (逻辑结构): 二元组 Data_Structure(D,S)逻辑结构在计算机中的表示(存储结构)元素的映像方法:二进制存储(bit)关系的映像方法:以一个有序对程序设计:为计算机处理问题编制的一组指令集数据结构:问题的数学模型和数值计算相关的的数学模型求解的问题,如建立线性代数方程,常微分偏微分方程,就是计算数学所要研究的问题。和非数值计算相关的的数学模型求
2020-08-06 12:11:24
1944
原创 C语言实现邻接表(无向图的链式表示)
V1顶点后面链着的是与他相连的边的序号(第i个单链表后的结点表示依附于顶点Vi的边)这是一个无向图,所以邻接表一共有12条边定义结构体
2020-08-05 23:01:14
2608
1
原创 C语言实现实现树和森林(孩子兄弟表示法)
因为树和森林都可以与二叉树相互转化,所以采用二叉链表的存储方式表示树和森林容易在计算机中实现共有10个节点,则有11个空指针树的二叉链表(孩子-兄弟)存储表示*fristChild指向该结点的第一个孩子节点,*nextSibling指向该结点的兄弟节点。虽然类似于二叉树的左右孩子节点指针,但是功能不同#define ElemType chartypedef struct TreeNode{ ElemType data; struct TreeNode *fristChild; st
2020-07-31 15:52:07
3782
1
原创 C语言中序遍历实现线索二叉树(二叉树的改进)
结构体#define ElemType chartypedef enum{LINK,THREAD}Tag_Type;//LINK表示指针,指向结点的左右孩子 //THREAD表示线索,指向结点的前驱(L)或后继(R)typedef struct BinTreeNode{ ElemType data; struct BinTreeNode *leftChild; struct BinTreeNode *rightChild;
2020-07-30 23:36:09
1126
原创 C语言实现二叉树(二叉链表)
文章目录定义结构体初始化先序遍历创建二叉树测试递归遍历中序前序后序非递归遍历中序前序后序其他方法定义结构体初始化先序遍历创建二叉树//1按照先序次序输入二叉树中结点的值,构造二叉链表表示的二叉树btvoid CreateBinTree_1(BinTree *bt) { CreateBinTree_1(bt, &(bt->root));//参数的传递都需要地址}void CreateBinTree_1(BinTree *bt, BinTreeNode **t) {//*t代表根节
2020-07-30 17:18:28
9263
1
原创 C语言实现数据结构——链式队列
结构体#define ElemType inttypedef struct QueueNode {//每个节点的组成 ElemType data; struct QueueNode* next;}QNode;typedef struct LinkQueue {//用于管理整个队列 QNode* front;//指针类型是节点类型,永远指向头结点 QNode* tail;//永远指向尾结点}LinkQueue;初始化void InitQueue(LinkQueue *Q) { //
2020-07-30 10:30:47
569
原创 C语言实现循环队列(队列的顺序表示的改进)
对队列的顺序表示的改进队满但是队空时font下标和rear下标也是相等的,为了区分,可以采用下面这种方式font=rear+1表示队满也可以采用设一个标志位判断空还是满入队void EnQueue(Queue *Q, ElemType x){ if(((Q->rear+1)%MAXSIZE) == Q->front)//若队满退出 return; Q->base[Q->rear] = x; Q->rear = (Q->rear+1)%MAXSI
2020-07-29 22:55:49
342
原创 C语言实现队列(队列的顺序表示)
结构体#define ElemType int#define MAXSIZE 8typedef struct Queue { ElemType *base;//这个指针指向初始化的动态分配存储空间 int front;//用于记录队头下标 int rear;//用于记录队尾下标,表示能放的下标}Queue;入队void EnQueue(Queue *Q, ElemType x) { //队列满了,rear下标指向MAXSIAZE if (Q->rear >= MA.
2020-07-29 21:57:36
620
原创 C指针与结构体
1.结构体实例声明定义了一个结构体#include <stdio.h>#include <string.h>typedef struct _person {//结构体的声明 char* name; char* title; unsigned int age;}Person;void main() { Person p;//结构体实例声明 p.name = "a";//点表示法访问其字段 p.title = "Manage"; p.age = 12;}
2020-07-27 23:42:10
306
原创 详细了解指针与字符串的关系
一、字符串字符串是以ASCII字符NUL结尾的字符序列。ASCII字符NUL表示为 \0 。1.1字符串声明:字面量、字符数组、字符指针这里主要介绍字符串字面量。(字面量就是字符串的值,整数字面量就是整数的值,字面量相对于变量而言,就是变量的值)定义字面量时会将其分配到字面量池中,字面量池中只有一个副本,通常认为字面量是不可变的大部分编译器中把字符串字面量当做常量所以应该在char *p 前面加上const修饰符,把他作为不可修改的常量1.2字符串初始化初始化char数组或不
2020-07-26 22:40:26
1447
原创 C语言实现稀疏矩阵
稀疏矩阵的压缩存储:对0元不分配定义结构体(三元组表示法)#define ElemType int typedef struct Triple {//表中每个元素都有3个分量 int i;//行下标 int j;//列下标 ElemType e;//数值};typedef struct SMatrix {//用于管理整个矩阵 Triple data[MAXSIZE];//矩阵中的每个元素 int mu;//矩阵的行 int nu;//矩阵的列 int tu;//矩阵的非零个数};
2020-07-26 20:00:15
3256
原创 C语言实现串(定长顺序表示)
思路:用一组地址连续的存储单元存储串值的字符序列#include<stdio.h>#include<string.h>#define MAXSTRLEN 20//预定义最大串长#define u_char unsigned chartypedef u_char SString[MAXSTRLEN + 1];//定义一个无符号字节型的数组,数组中每个单元能存储的数据范围为0~255//字符型所存储的数据是用来表示字符的那这个数组最多能存放多少个单元呢??串长表示方法
2020-07-25 16:34:22
666
原创 C语言字符和字符串的存储
数值在计算机中是以二进制的形式存储的。字符和字符串是先编码后再转化为二进制的形式存储,编码方式如(ASCII码,UTF8)。例如,char x=‘a’,将一个字符常量放到一个字符变量中,实际上并不是把该字符本身放到内存单元中去,而是将该字符的相应的ASCII代码放到存储单元中。C中字符表示用单引号,字符串表示用双引号,字符串是一段连续的字符。字符字符之间的相减就是ASCII码之间的相减字符整数在内存中的存储在内存中只是存储了2和5的ASCII码的值打印出a和b的值查表得知是2和5的A
2020-07-25 11:32:08
4032
原创 图解C语言指针和指针类型是什么
指针就是变量,用来存放地址的变量(存放在指针中的值都当成地址处理)通俗的讲,假设a和p都代表相同类型(如int)的变量,如何让这两个变量在内存中代表相同的地址空间呢?先定义int p,然后p=&a(在p和a的前面加上各自的符号),这个这两个变量就代表一段相同的内存空间。现在这个地址空间存的值是一个int类型(4字节)的数值(10)下面是16进制显示的数值(10转化为16进制是a,16进制每两位代表1字节),根据Cpu大小端模式,读法应该是0x 0000000a只要是个变量都会有地址,那
2020-07-24 15:11:06
1193
1
原创 C实现数据结构之链栈
在 Debug 模式下,VC 会把未初始化的栈内存上的指针全部填成 0xcccccccc ,当字符串看就是 “烫烫烫烫……”;会把未初始化的堆内存上的指针全部填成 0xcdcdcdcd,当字符串看就是 “屯屯屯屯……”定义链栈节点结构体typedef struct StackNode { ElemType data; struct StackNode* next;}StackNode, *LinkStack;*LinkStack是一个StackNode类型的指针,用于指向这个栈的首地址(代表这
2020-07-24 11:15:53
299
原创 C语言简单的交换两个数字(通过编译器真正了解指针指针的使用)
指针就是存放某样东西的地址下面是swap函数的作用简单的交换两个数字void swap(int *a,int *b) { int tmp =*a; *a = *b; *b = tmp;}void main() { int x = 2; int y = 3; swap(&x,&y); printf("x:%d\n", x); printf("y:%d\n", y);}通过编译器真正了解指针一开始发现两个变量地址相差了12个位初始化后调用swap函数
2020-07-24 00:16:38
335
原创 C语言实现顺序栈
定义顺序栈的结构体#include <stdio.h>#include <stdlib.h>#include <string.h>#define ElemType int//代表每个节点的大小,int就是4字节#define INIT_SIZE 10#define INCREAMENT INIT_SIZEtypedef struct SeqStack { ElemType* base;//类型是ElemType的指针指向这个栈 int top;//top
2020-07-23 23:31:08
280
原创 C语言实现静态链表
定义静态链表的结构体#define MAX_SIZE 30#define ElemType char//定义静态链表的节点,由数据和游标组成typedef struct StaticNode { ElemType data; int cur;}Node;//这个结构包含了30个Node类型的节点,如图所示typedef Node StaticList[MAX_SIZE];初始化cur游标指向下一个数组元素的index//引用,给main函数调用的mylist起别名,指向同一块
2020-07-23 14:49:27
299
原创 C—彻底了解结构体struct
struct + 结构体名,代表一个数据类型(类似于int,char……)struct 结构体名{在里面定义成员变量}#include <stdio.h>struct Person{ char name[10]; int age; int height;};int main(){//定义一个结构体变量p1并赋值 struct Person p1{ "a", 10, 150 }; printf("%d\n",p1.age); printf("%d",siz
2020-07-19 12:51:36
208
原创 C—函数指针与typedef
函数指针就是存储函数首地址的地址%p 是以16进制的形式输出内存地址。%x 也是以16进制的形式输出内存地址。不过%p的输出字符为8个前2个为00,%x只有6个。函数指针的声明1.先写出目标函数的原型2.将目标函数的函数名改为函数指针变量名3.为*和函数名加括号,指向函数首地址(即函数名)上图是在64位环境下编译的,下图是在x86环境编译的,x86下一个指针4个字节(两个16进制为=1字节)复杂的函数指针#include <stdio.h>void fun(){
2020-07-19 10:49:49
148
原创 C语言之回调函数
编程时各个模块(函数)从应用到底层分成多个层,确保所有的函数调用关系是从上(main函数)到下,确保单项依赖,这样上层的模块就更容易被更换回调函数就是将双向依赖改为单项依赖的工具代码实现callback调用参数(就是传进来的函数)不同的方法再如 #include <stdio.h> //返回值(*指针名)(参数列表)typedef int (*callback)(int,int);//回调函数int ADD(callback p, int a, int b){
2020-07-17 22:34:22
228
原创 下载 Centos 6.x版本
这是个技术网址可下载iso https://freecplus.net现在Centos6.x的版本国内很多镜像源都没有了。如果需要下载直接到官网下载。官网下载 https://wiki.centos.org/Download我想下载的是6.8版本 http://vault.centos.org/6.8/isos/...
2020-07-16 21:40:05
575
原创 C++面向对象多态之虚析构函数和纯虚函数
虚析构函数如果存在父类指针指向子类对象的情况,应该将析构函数声明为虚函数(虚析构函数)delete父类指针(如下面代码的cat指针)时,才会调用子类的析构函数,保证析构的完整性#include <iostream>using namespace std;struct Animal { virtual void speak() { cout << "Animal::speak()" << endl; } virtual void run() { c
2020-07-10 17:54:22
331
原创 C++面向对象之多态(虚函数的引入)
父类指针、子类指针◼ 父类指针可以指向子类对象,是安全的,开发中经常用到(继承方式必须是public)不会超出范围◼ 子类指针指向父类对象是不安全的编译不会报错,但是运行时就不一定了,因为new 的时候只申请了4个字节,而指针类型stu是8个字节多态默认情况下,编译器只会根据指针类型调用对应的函数,不存在多态多态是面向对象非常重要的一个特性同一操作作用于不同的对象,可以有不同的解释,产生不同的执行结果在运行时,可以识别出真正的对象类型,调用对应子类中的函数多态的要素子类重写父类的
2020-07-10 14:44:02
282
原创 C++面向对象之继承的本质
继承就是子类拥有父类的所有成员(变量\函数)C++中没有像Java、Objective-C的基类(即最开始的类继承自Object),只有父类和子类,子类继承自父类,父类没有继承任何一个类继承之对象内存布局下面代码,有3个依次继承的类,子类和父类中的成员在内存中是怎么排列的呢?父类的成员变量在前,子类的成员变量在后成员访问权限和继承方式class定义类成员默认privated,struct定义类成员默认publicclass定义类继承默认privated,struct定义类继承默认publi
2020-07-08 21:53:49
679
原创 C++中的命名空间
命名空间可以用来避免命名冲突Java考=靠不同目录的文件夹区别命名空间,C++不行,全部编译,发现有重复的就报错下面是C#里的命名空间,新建一个类就会有命名空间而在C++里默认是全局的命名空间:using namespace std;加上命名空间或如果只是使用自定义空间里的一个变量 可以使用 using 空间名::变量,这样以后就可以直接使用变量名解决下面的问题要在person p1 前加上命名空间,不能用std::person p1,因为std里只包含一些函数,这是我们自定义的函数
2020-07-08 17:20:57
353
1
原创 C++构造函数和析构函数(为什么要用和怎么用)
构造函数构造函数(也叫构造器),在对象创建的时候自动调用,一般用于完成对象的初始化工作特点函数名与类同名,无返回值(void都不能写),可以有参数,可以重载,可以有多个构造函数一旦自定义了构造函数,必须用其中一个自定义的构造函数来初始化对象注意通过malloc分配的对象不会调用构造函数,用new和(类 对象名这种方法)可以调用构造函数**错误结论:**默认情况下,编译器会为每一个类生成空的无参的构造函数正确理解:在某些特定的情况下,编译器才会为类生成空的无参的构造函数如当成员变量在类里已经
2020-07-08 16:26:09
2699
原创 C++面向对象的内存布局 二(堆空间)
堆空间在程序运行过程,为了能够自由控制内存的生命周期、大小,会经常使用堆空间的内存堆空间的申请\释放malloc \ freenew \ deletenew [] \ delete []注意申请堆空间成功后,会返回那一段内存空间的地址申请和释放必须是1对1的关系,不能回收一部分,不然可能会存在内存泄露现在的很多高级编程语言不需要开发人员去管理内存(比如Java),屏蔽了很多内存细节,利弊同时存在利:提高开发效率,避免内存使用不当或泄露弊:不利于开发人员了解本质,永远停留在A
2020-07-08 10:17:40
316
原创 指针(pointer)与引用(reference)
constconst是常量的意思,被其修饰的变量不可修改如果修饰的是类、结构体(的指针),放在数据类型(int)前后没有区别,其成员也不可以更改const修饰的是其右边的内容指针(point)引用(Reference)在C语言中,使用指针(Pointer)可以间接获取、修改某个变量的值在C++中,使用引用(Reference)可以起到跟指针类似的功能引用相当于是变量的别名(基本数据类型、枚举、结构体、类、指针、数组等,都可以有引用)对引用做计算,就是对引用所指向的变量做计算在定义的
2020-07-07 20:17:55
1208
原创 redis入门——数据类型介绍
注:list中保存的数据都是String,数据总量是有限的,最多232−1 2^{32}-12 32 −1个元素list具有索引的概念,但是操作数据时通常以队列的形式进行入队出队操作(或以栈的形式进行入栈出栈操作)当stop的值为-1时,获取的是全部数据list对数据进行分页操作,通常第一页的数据使的信息来自list,其他页面的数据通过数据形式进行加载————————————————版权声明:本文为CSDN博主「半壶芍药」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文
2020-07-07 14:44:19
184
原创 Ubuntu忘记密码的解决办法(任何账户都进不去系统)
Ubuntu忘记密码的解决办法ubuntu忘记root密码怎么办?如果普通用户忘记了怎么办第一种方法:无论你是否申请了root帐号,或是普通账号密码忘记了都没有问题的!1、重启ubuntu,随即长按shift进入grub菜单;2、选择第二个高级模式recovery mode进入3、进入Recovery Menu界面,选择root Drop to root shell prompt ,也就是获取root权限4、在命令行# 后面敲入 cat /etc/shadow 查看用户名(如果连用户名都忘
2020-07-07 14:42:20
3226
snifferpro.zip
2020-05-18
汇编金手指和白皮书和JCC跳转文档.zip
2020-07-07
putty ssh连接
2020-06-19
EasyUEFIQYB38.zip
2020-06-19
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人