自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(36)
  • 收藏
  • 关注

原创 Nginx知识随记

1,conf:配置文件;html:存储网页相关文件;log:存储日志文件;sbin:存储可执行程序2,nginx启动代码:nginx是多进程:一个master多个worker(配置文件中查看进程数,打开配置文件)3.每个进程同时监听所有server.当多个进程同时监听在一个端口:惊群(所有进程同时被唤醒挂起,但只有一个进程进行解决处理)解决:轮流监听,不同时监听。实现:用一把锁(共享内存),哪个进程有锁谁就监听处理。查看共享内存:函数中有中所有进程的共享内存4.source in..

2021-03-18 10:29:52 149

原创 函数指针

什么是函数指针在程序中定义了一个函数,在编译时系统就会为这个函数分配一段存储空间,这段存储空间的首地址为这个函数的地址。我们就可以定义一个指针变量来存放这个首地址,这个指针变量就叫作函数指针变量,简称函数指针。那么这个指针变量怎么定义呢?例如 : int(*p)(int, int);这个语句就定义了一个指向函数的指针变量 p。详细: 1.首先它是一个指针变量,所以要有一个“ * ”,即(*p);2.前面的 int 表示这个指针变量可以指向返回值类型为 int 型的函数;3.后面括号中的两个

2021-03-13 11:13:42 201

原创 c++:3.函数堆栈调用

3.函数堆栈调用c语言是结构化的语言:指的是把任务划分为多个由函数组成的小模块,通过函数共同作用完成任务要求函数调用几个问题:1.形参是否开辟内存2.函数调用完成,系统怎么回退到对应调用函数的栈帧中(函数处于栈上,每个函数对应栈上内存为栈帧)3.调用完成,栈帧回退后,程序如何知道执行下一行一.预备知识:1.1.寄存器:1.1.1定义:1.1.2分类(4个):eax,ebx,ecx,edx1.1.3栈底指针寄存器(ebp),栈顶指针寄存器(esp),下一行指令寄存器(pc)注:栈的地址

2020-08-06 21:03:52 344

原创 linux:第三节扩充:常用快捷键

linux常用快捷键一、vim1.光标的快速移动1.1当前行shift+6:移到当前行首列shift+4:移到当前行尾列上面两个也可以用左右方向键1.2文件某一行gg:移到文件第一行shift+g:移到文件最后一行num shift+g:移到第num行(很实用,编译出错,错误提示为哪个文件哪一行,直接用这个公式可以跳转到错误处)文件不是很长也可以滚动鼠标单击1.3翻页Ctrl+f:向上翻,显示后面内容Ctrl+b:向下翻,显示前面内容1.4终端当前显示页面shift+h:当

2020-08-05 22:06:52 384

原创 第三节 linux:文件系统以及文件操作命令

有一句话: linux上一切皆文件1文件系统操作系统3大模块:进程管理,内存管理,文件系统1.1定义:文件系统是操作系统在存储设备上组织管理文件的方法。1.2不同操作系统文件系统不同,简单来说linux的文件windows不能直接使用,常见操作系统对于文件系统如下:linux:EXT4(索引是文件系统)windows:NTFSU盘:FAT321.3文件系统与磁盘分区格式化1.4文件系统不同数据放在不同区块,linux文件系统分为3个区块:superblock,block,inode,

2020-08-01 11:37:36 386

原创 c++: 2.编译链接原理

编译链接原理书籍推荐:编译技术与原理(李文生)以下面代码为例:1.预编译处理内容(.i)1.1主要处理以“#”开头的表达式:例如:宏,头文件,预编译指令,具体如下:1.1.1宏:预编译删除宏定义并做文本替换,如上图的宏MAX,代码中所有MAX自动替换为201.1.2头文件:头文件打开一般还包含其他头文件(嵌套关系)。预编译递归展开头文件1.1.3预编译指令:#if 0 部分跳过,#if 1 部分保留1.2删除注释 (/* */)1.3添加行号,文件标识。方便直接跳到错误位置

2020-07-30 18:13:00 209

原创 C++ : 1.虚拟地址

一.虚拟地址1.1虚拟地址由来:计算机发展两个阶段:实模式和保护模式实模式:程序直接加载到内存。安全保护机制弱,恶意程序可通物理地址的跳转对正常程序恶意篡改保护模式:程序不是直接加载到内存而是通虚拟地址空间映射到内存。此时为虚拟地址,跳转也是在虚拟地址范围内1.2虚拟定义:存在,看得见,它是物理的存在,看不见,它是透明的不存在,看得见,它是虚拟的不存在,看不见,它被删除1.3虚拟地址空间大小:32位操作系统和64位区别:位指的是最大寻址能力,即计算机一次能处理的最大数据的比特位的个数

2020-07-30 17:16:51 623

原创 排序9:链表排序

预备知识:前面8种排序的总结:前面1-8种排序是顺序表排序,若数据存放在链式结构,前面的几种排序有的也可以用。1.1单链表:①插入,希尔,快排,堆排序:可以但复杂②基数排序可以但很少用③冒泡,选择,归并,排序合适。首选冒泡1.2双向链表快排最合适(最快)2.(带头节点)单链表冒泡排序代码//先引用单链表头文件//链表冒泡排序代码void ListSort(List plist){ int len = GetLength(plist); int tmp;

2020-07-25 11:00:27 111

原创 排序8:基数排序

基数排序1.原理设10个原数据,以及10个队列如下以每个数据的个位数字进队:再从左往右依次出队(注:队列是先进先出原则)以十位数字进队再依次出队以百位数字进队再依次出队原数据有序2.代码//链式队列(c语言中得自己写,c++库里有可以直接调用)typedef struct Node{ int data; struct Node*next;}Node;typedef struct HNode{ Node *front;//队头 Node *rear;

2020-07-18 11:27:42 144

原创 排序7:归并排序**

7.归并排序**7.1原理设原数据为:两个数字一组之间归并:(二路归并),谁小谁下来(需要新数组放排序后数据)再4个数字一组,比较l1与l2数字谁小谁下来且下标后移,直到l1>h1或,l2>h2;剩余没下来的数字再下来再8个数字,16个数字…一组,直到整体有序,因此快7.2代码//每次归并void Merge (int *arr,int len,int gap)//时间复杂度O(n),空间复杂度O(n)需要额外数组brr{ int low1=0; int high

2020-06-21 11:51:28 246

原创 排序6:堆排序

排序6:堆排序6.1概念以及分类6.1.1树(学堆需要的基础)度的概念:出度(树中一个数字下面的数如:上图2的出度为4,4的出度为0),入度(上一个数)二叉树:整个树中最多有两个分叉(出度)子节点,父节点:2,3是1的孩子节点分别为左孩子,右孩子。1是2,3的父节点(或双亲节点),2是4,5的父节点。叶子结点:4,5,6,8出度为0成为叶子结点6.1.2堆大根堆:父节点均大于子节点小根堆:父节点均小于子节点例1:线性1 2 3 4 5 6 7 8画成树,数字从左向右,从上到下安排到各个

2020-06-21 11:39:49 283

原创 排序5:选择排序

5.选择排序5.1原理设原数据为 3 0 1 7 5找出最小值:0,与第一个值3交换:03175排除0,剩余数据找出最小值1与第一个值(排除0)交换:01375重复以上步骤最终有序5.2代码void SelectSort(int *arr,int len){ int minindex;//最小值下标 for(int i=0,int len-1;i++) { minindex=i; for(int j=i+1;j<len;j++) {

2020-06-20 11:38:09 140

原创 排序3:冒泡排序 ;排序4:快速排序

冒泡排序 快速排序交换类的排序有快速排序,冒泡排序3.冒泡排序**3.1原理设原数据为 5 2 9 1第一趟从第一个数字5开始arr[j]>arr[j+1]交换,小于等于不交换5>2交换:2 5 9 15<9 不交换: 2 5 9 19>1交换: 2 5 1 9最大数字9已经到最后第二趟2<5不交换:2 5 1 95>1交换: 2 1 5 9由第一趟可知9已经最大,不用5与9再比较第三趟2&

2020-06-20 11:35:36 195 1

原创 排序2:希尔排序

排序2:希尔排序shell排序本质也是一种插入排序,是先分组然后采用直接插入排序。因此也称为缩小增量排序2.1直接插入排序与希尔排序对比 :前者时间复杂度O(n^2) 则100个数据需要10000次循环;后者若分为10组:100个数据分为10组,每组先有序:10 ^ 2 乘 10=1000次,再插入排序,而插入排序越有序越快,插入排序时时间复杂度小于O(n ^ 2),假设为O(n ^ t),(t<2)而 1000+O(n ^ 2)< O(n ^ 2),因此希尔排序更快2.2

2020-06-19 10:54:24 170

原创 排序1:插入排序

排序1:插入排序(以从小到大排序为例)重点关注各种排序时间复杂度,空间复杂度,已经有序的时间空间复杂度,稳定性的对比1.1原理:(举例说明更清晰)设原数据: 5 9 4 7 21.2代码 void InsertSort(int *arr,int len){ int tmp; int i; int j; //从前往后找位置 for( i=1;i<len;i++) { tmp=arr[i]; for(j=0;j<i;j++) {

2020-06-18 20:24:46 161

原创 linux 第二节 基础操作命令:pwd ls cd clear/reset

1.终端(terminal):输入命令的环境1.1打开终端①桌面鼠标右键–>open in terminal②桌面applications–>system tools–>terminal③桌面applications同行黑色小电脑图标(有的没设置没有)1.2界面终端界面字体放大:ctrl + shift + “+”;缩小:ctrl+“-”2.基础命令(只介绍一部分常用,命令体系很庞大,可使用帮助手册:man+命令可显示该命令详细信息)①pwd:显示当前所在位置的绝对路径

2020-06-13 21:27:57 245

原创 linux “ls -l”命令显示属性详解图

2020-06-13 20:56:26 488

原创 Linux 目录名简介

Linux系统的目录结构:倒状树形状linux目录简介1./bin : (binary 二进制 )这个目录沿袭了UNIX系统的结构,存放着使用者最经常使用的命令。 Linux通过命令操作,/bin放系统命令对应的程序文件(二进制文件),执行该文件对应命令生效,在/bin下面的命令可以被root和一般账号使用注:/bin 、 /sbin 、 /usr/bin 、 /usr/sbin 的区别/bin(binary):/基本的系统命令的二进制执行文件目录,主要用于具体应用/sbin(system

2020-06-11 16:21:34 283

原创 第一节 linux基础知识

第一节 linux基础知识一、Linux系统与Windows区别1.前者基于命令行操作,即通过输入命令控制,更专业;后者通过鼠标点击图形化界面来操作,方便且界面漂亮2.前者完全开源,Linux内核版本(什么是内核版本后面会讲)源码公开;后者不开源3.前者使用于大型服务器集群(例如:阿里云);后者主要用于个人电脑二、linux版本2.1分类内核版本:内核是系统的心脏,是运行程序和管理像磁盘和打印机等硬件设备的核心程序,Linux内核官方网站http://www.kernel.org/发行版

2020-06-08 21:23:22 190

原创 C语言:获取键盘键值(ascii码值)大小

键值大小键盘键值:键盘上按键对应程序中的数值,即ASCII值,如:键盘上a的键值为97,b为98获取途径两个:1.上网查(但有的ASCII表没有,需另外单个查询 ,例如:方向键的键值:↑,↓,←,→)2. 函数 _kbhit() 注意:函数以 " _ "开头,不可少方向键都有两个键值: 上箭头键值为224和72 ;下箭头:224和80; 左箭头224和75 ;右箭头224和77 //获取键盘键值,通过该程序可以得到方向键的键值 int main() { in

2020-05-19 22:03:49 4961

原创 C语言:伪随机数问题以及解决方案

伪随机数rand()以及解决方案1.rand()函数作用:产生随机数值,函数范围:0 ~ 32767举例:int x = rand() //随机产生0~32767内的数字x理解伪随机数:用一个程序举例:int main(){ for(int i=0; i<10; i++) { printf("%4d",rand()); } printf("\n"); return 0;}执行结果:随机产生10个数,但每次10个随机数都一样,称为伪随机数为什

2020-05-19 21:49:21 1574

原创 数据结构:线性表示意图

线性表基本结构示意图线性表分为顺序表和链表1.顺序表1.1定长顺序表1.2不定长顺序表2.链表2.1带头结点单链表(指针plist指向头结点)2.2不带头结点单链表2.3单向循环链表(带头结点)2.4双向循环链表(带头结点)...

2020-05-15 20:41:39 1216

原创 数据结构:顺序表与单链表区别

顺序表与单链表区别(以不定长顺序表和带头结点单链表为例)不定长顺序表:单链表(带头结点):线性表分为顺序表和链表顺序表:1.顺序存储,必须占用一片连续存储单元;可将顺序表简单理解为数组,其空间是连续的储存单元。 elem是指向顺序表内存地址的指针,listsize是顺序表总大小,length为当前存放有效数据个数。若在末尾插入数据8,只能在下标4处插入,不能中间空几个存储单元插入数据。2.不便插入删除数据(插入删除位置及后面数据需要均向后或前移动一位),除了尾插尾删(不用移动);例如在上

2020-05-15 19:26:10 1948

原创 斐波那契数列——递归法时间复杂度计算

斐波那契数列——递归法时间复杂度计算画图:以F(6)为例:斐波那契数列到第六个数停止每个节点运行都会开辟空间,使用时间为了方便计算,把第五层的f(2)和f(1)放在第四层最右边,不会影响时间复杂度计算第n层节点个数:2^n 个前n层节点个数:1+2+4+……+2^n = (2 ^ n) - 1F(6)有4层,推理:F(n) 有 n-2层则F(n)一共有节点数 (2 ^ (...

2020-04-23 21:17:53 20732 9

原创 八皇后

八皇后问题假设将八个皇后放在国际象棋盘上(8*8正方形),两两之间无法攻击(任意两个不可在同一行,同一列或同一斜线上)

2020-04-19 22:47:15 116

原创 结构体的初始化

结构体的初始化在结构体外面:定义变量同时可以初始化。 形式如下:1.变量的初始化:数据类型 变量名=初始化值;例如,定义整型变量a,并给其初始化值10的语句如下int a=10;2.数组的初始化,需要通过一常量数据列表,对其数组元素分别进行初始化,形式如下:数据类型 数组名称〔数组长度〕={初始化值1,初始化值2,…, 初始化值n};例如,定义长度为5的整型数组,并对其初始化 :...

2020-04-19 11:36:33 4087

原创 计算机系统和操作系统

计算机系统和操作系统概念计算机系统:指用于数据库管理的计算机硬软件及网络系统。按人的要求接收和存储信息,自动进行数据处理和计算,并输出结果信息 。操作系统:是用户与机器的接口,方便用户、管理和控制计算机软硬件资源的系统软件(或程序集合)。组成计算机系统组成:硬件系统和软件系统。硬件系统:借助电、磁、光、机械等原理构成的各种物理部件的有机组合,是系统赖以工作的实体。软件系统:各种程序和...

2020-04-14 22:40:58 3139

原创 编译器与集成开发环境

编译器(Compiler)为什么要编译器:先了解可执行程序Executable Program:简单来说为双击后就可以直接运行的程序,其内部是二进制形式 计算机指令和数据的集合 ,CPU 可以直接识别, 但是对于程序员,它们非常难理解和使用。因此编译器出现,在中间搭建桥梁,本质为一个语言翻译软件概念:简单讲,编译器就是将"一种语言(通常为高级语言)"翻译为"另一种语言(通常为低级语言)"的程序...

2020-04-14 22:16:29 713

原创 c语言提高质量(上)

对高质量c编程(林锐)总结(上)1—5章软件开发人员需对程序正确性、健壮性、可靠性、效率、易用性、可读性(可理解性)、可扩展性、可复用性、兼容性、可移植性等质量属性了解并应用第一章 文件结构1.版权版权和版本的声明位于头文件和定义文件的开头(参见示例 1-1),主要内容有:(1)版权信息。(2)文件名称,标识符,摘要。(3)当前版本号,作者/修改者,完成日期。(4)版本历史信息...

2020-04-13 22:47:23 282

原创 复杂的符号混合(eg:指针数组,数组指针,指针函数,函数指针...)

复杂的符号混合(eg:指针数组,数组指针,指针函数,函数指针…)当各种符号混合在一起,不容易分辨其本质,主要从两方面入手:1.运算符优先级2.主要组成部分://数组:长度,数据类型//指针:指向的内容//函数:参数列表,返回值(C标准规定:函数名本身也表示函数的入口地址)举例:①int * p1[10];优先级:[ ] > * ,因p1与[ ]结合,p1[ ]为数组,p1本...

2020-04-03 21:39:52 202

原创 时间,空间复杂度

理解时间,空间复杂度 在接触时间复杂度,空间复杂度的概念以来,只是大概知道是用来判断代码占用时间和空间多少。时间,空间复杂度越低,代码越好。本篇文章用来明确时间空间复杂度的概念。书上时间复杂度的概念为:算法中最基本的操作执行次数与问题规模n之间的关系。空间复杂度:算法执行过程中所需额外空间与问题规模n之间的关系直接看书上的概念不好理解,我在理解后认为其中重点应该关注的是“关系”二字:实...

2020-03-24 20:34:52 171

原创 两个数字交换不用第三个变量

交换函数注意:虽然不用第三方变量的写法感觉很牛,但是在复杂的程序环境中容易出现bug(下面会举例bug)并且技巧性越强的代码bug越不好找;因此只需掌握不用第三个变量的思路,平时最好用第三个变量来交换两个数字1.常用,最好理解:用第三方变量协助交换(相当于一瓶可乐,一瓶雪碧交换,用一个空瓶子实现)void Swap(int *p1 , nt *p2){int tmp = *p1;...

2020-03-21 19:13:13 1330

原创 指针基础*p ;**pp

指针基础目录:1. 定义指针2. 指针初始化3.高阶指针(二级指针)4.二级指针的本身与指向5.区分char str[ ] = “abc” 与 char *str = “abc”6.打印指针的值:%p定义:常说指针就是地址(例如: 给变量a和b分配内存时,a和b在内存的位置不同,即a和b的地址不同,指针就是保存变量的地址,所以指针又叫地址变量)定义指针:数据类型 * 变量...

2020-03-13 22:43:55 2866

原创 **数字与字符串转换**

数字与字符串转换目录1.数字与字符转换 2.十进制数字转字符串3.字符串转十进制数字4.字符串转十六进制数字(1)数字与字符转换:5+‘0’=‘5’ ‘5’-‘0’=5(2)十进制数字转字符串 123–>“123”库函数:itoa()自定义:`思路:取个位转为字符,丢个位(逆序),再字符串翻转(逆置)逆置思路:两个指针一个从头向尾,一个从尾向头,交换void StrR...

2020-03-13 21:06:27 163

原创 常用数字处理

本文主要讨论C语言比较基础的数字处理主要掌握思路,熟练代码1.输入数字,判断有几位#include<stdio.h>int Count(){ char a[20];//数字不超20否则越界 int i; printf("输入一个数不多于20位"); for(i=0;i<20;i++) { scanf("%c",&a[i]);//指...

2020-03-09 23:24:00 327

原创 可见性和生存期

可见性编程中可见性又叫作用域,是一个对象能够看到或者能够引用另一个对象的能力。我个人理解为对象可以发挥作用的范围。比如:从小到大:函数中的参数其作用域在()中;块中的标示符作用域是自声明处起,限于块中类作用域作用于特定的成员名除以上,还有文件作用域,始于声明,终于文件尾部注意;1.标识符先声明再引用2.同一作用域不能有同名标识符3.嵌套式的作用域有同名标识符,外层在内层不可见...

2020-03-09 20:01:58 193

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除