自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

杨博东的博客

yangbodong dot cn

  • 博客(182)
  • 资源 (7)
  • 收藏
  • 关注

原创 /etc/passwd 和 /etc/shadows 详解

linux操作系统上的用户如果需要登录主机,当其输入用户名和密码之后: 首先在/etc/passwd文件中查找是否有你的账号,如果没有无法登录,如果有的话将该用户的UID和GID读出来,此外将此用户的shell设置也一并读出。然后根据UID到/etc/shadow文件中去寻找相应用户的密码,如果匹配一致进入shell控制的阶段。下面我们详细解释这两个文件: 一:/etc/passwd

2016-02-27 09:39:57 8437

原创 回溯法的典型问题 八皇后 马踏棋盘 迷宫

所谓回溯就是”一条路走到黑,不通退几步,能走则走,啥时走完啥时了!”一:八皇后 八皇后问题是一个经典的问题,在一个8*8的棋盘上放置8个皇后,每行一个并使其不能互相攻击(同一行、同一列、同一斜线上的皇后都会自动攻击)。#include<iostream>#include<cmath>#define INIT -10000 //定义初始化数据using std::cout;using s

2016-02-26 21:47:07 2080

原创 c++ 算法 next_permutation

遇到这个算法是在大牛写的10行的8皇后问题中,下面首先给出这个10行就解决了8皇后的NB代码,我目前还是没有看懂对于皇后不在同一列的判断,因为他巧妙的用了移位操作。 #include<iostream>#include<algorithm>#include<bitset>#include<numeric>#include<utility>int main() { int i =

2016-02-26 16:30:00 1176

原创 布尔运算 逻辑运算 移位运算

1:四种布尔运算&,|,^,~&:相当于&&,表示”与”运算。一假则假。 |:相当于||,表示”或”运算。一真则真。 ^:表示”抑或”,相同状态则为假。 ~:表示”非”,相当于!。 运算 结果 a [01101001] b [01010101] ~a [10010110] ~b [10101010] a&b [01000000] a|b [

2016-02-26 15:34:46 4365 1

原创 c++ 关联容器

c++ 第十一章:关联容器 2:在c++中,顺序容器和关联容器之间本质的区别在于:关键字,关联容器中的元素是按照关键字来保存的,顺序容器中的元素是按照它们在容器中的位置来保存的。3:我们可以按照关键字是否有序或者是否允许重复关键字来区分关联容器。关键字有序:map,set,multimap,multiset,它们按照有序存储的。关键字无序:unordered_map,unordered_set

2016-02-25 19:10:08 866

原创 c++ 泛型算法

1:c++的算法库中有超过100个算法,这些算法均不会直接操作底层的元素,他们是通过操作迭代器规定的范围来实现的。3:只读算法,操作两个序列的算法,写容器的算法,插入迭代器,拷贝算法(1):只读算法如”std::find”,”std::count”之类的算法,不会改变元素的值。对于只读取而不改变元素的算法,通常最好使用cbegin()和cend(),但是如果计划了使用算法返回的迭代器来改变元素的值,

2016-02-25 19:04:40 1014

原创 c++ 顺序容器

2:c++标准库中的顺序容器,所有顺序容器都提供了快速顺序访问元素的能力。 但是在两方面还是有性能上的折中,一是向容器中添加或从容器中删除元素的代价,二是非顺序访问容器中元素的代价。 类型 含义 缺点 vector 可变大小数组。支持快速随机访问 在尾部之外的位置插入或者删除可能比较慢 deque 双端队列支持快速访问 list 双向链表,只支持双向

2016-02-20 11:36:44 1262 2

原创 c++ IO库

1:为了支持使用宽字符的语言,标准库定义了一组类型和对象来操作wchar_t类型的数据。宽字符版本的类型和函数的名字以w开头。宽字符版本和普通的char版本定义在同一个头文件中,例如头文件fstream定义了ifstream和wifstream。2:标准库能使我们忽略不同类型流之间的差异是通过继承机制实现的。3:IO对象无拷贝或者赋值。所以我们不能将IO对象作为函数形参或者返回值,一般用引用的形式。

2016-02-20 11:30:43 1027

原创 c++ 类

1:成员函数的声明必须在类的内部,但是它的定义既可以在类的内部,也可以在类的外部。 2:this成员函数通过一个名为this的指针的额外的隐式的参数来访问调用它的那个对象。例如调用一个成员函数的时候,用请求该函数的对象地址初始化this,例如,如果调用f.func(),编译器负责将f的地址传给func的隐参数。func本来没有参数,但是现在就相当于func(&f)。 3:常量成员函数: std

2016-01-28 02:43:15 577

原创 有关unsigned和有符号类型的区别

相信大家对于unsigned这个玩意并不陌生,但是有的时候却会被它搞懵,比如下面:#include<iostream>using std::cout;using std::cin;using std::endl;int main(int argc,char *argv[]){ char a = 255; char b = 256; unsigned char c = 2

2016-01-22 18:32:28 968

原创 C++ IO基础

一:c++I/O处理,按照数据输入输出的过程,形象的将其看做流。数据在流中进行传播。 所有的流有两个基类:ios和streambuf类 streambuf:提供对缓冲区的基本操作,设置缓冲区等 ios:记录流的状态,支持对streambuf的输入/输出的格式化/非格式化操作。istream和ostream的操作:istream1:>> : 返回的是引用,所以可以连续使用。int a,b,

2016-01-22 11:09:57 760

原创 linux&c 进程控制 课后习题

(声明:本篇博客只是博主自己的理解,加以整理,目的是总结刚学过的进程知识,不一定绝对正确,非常愿意听客官您提出宝贵意见。)Q1:进程中的全局数据段(全局变量),局部数据段(局部变量),静态数据段的分别位于哪个内存地址空间? 答:对于进程的概念,我把它理解一个可执行程序进行的实体,我们c语言代码在变成可执行文件的过程中都会经历下面4步(以我们大家接触的第一个c语言程序“helloworld”为例)

2016-01-18 23:01:35 887

原创 RedHat 7.0 下 FTP 服务的安装,启动,配置,以及虚拟用户的建立

一:ftp服务的安装,启动和启用。 1:vim /etc/sysconfig/selinux 改为disabled后重启 :需要先关闭selinux加强防火墙。 2:yum install vsftpd lftp -y systemctl start vsftpd :安装服务并且启动服务。 3:firewall

2016-01-17 19:31:32 7309

原创 typedef的用法 单向链表的查找、增加、删除、销毁。

一:typedef的用法。 写一个数据结构(计算机存储数据的一种方式,是抽象的,可以人为组织,提高算法效率),我们需要注意:接口友好,模块化,规范命名等方面,在接口友好方面,typedef是非常好用并且标准及人性化的。/*定义一个叫student的结构体*/struct student{ int Id; char name[20]; };struct st

2016-01-17 19:15:32 1726 2

原创 简单理解函数声明(以signal函数为例)

这两天遇到一些声明比较复杂的函数,比如signal函数,那我们先简单说说signal函数的用法:(参考《c陷阱与缺陷》) signal:几乎所有c语言程序的实现过程中都要用到signal函数,作为捕获不同步的一种方式。我们用户要调用signal函数,可以这样使用,首先在头文件中加入:#include<signal.h> ,然后我们可以这样调用signal函数:signal(signal typ

2016-01-17 19:10:07 1028

原创 指针与数组,指针与函数,指针与字符串

一:指针与数组首先我想解释清楚指针与数组名的关系,由下面的代码引入问题,不知道大家有没有好奇过为什么它们三个是一样的?#include<stdio.h>int main(int argc,char *argv[]){ int a[5] = {1,2,3,4,5}; printf("%p %p %p\n",a,&a,&a[0]); return 0;} 那我们在看下面代

2016-01-17 19:04:01 893

原创 const int * p 和 int const * p 和 int * const p 的区别

首先注意,const int * p 和int const *p 是一样的,并且不管是不是*p,即使const int i和int const i也是一样的,所以我们接下来只讨论int const * p和int * const p的不同对于这种问题,我们只用将const 的位置固定,然后再看后面的东西,一般规则是后面的东西不能在进行赋值或者修改

2016-01-14 16:19:13 3764 7

原创 哈夫曼原理应用--压缩文件

一:思路由于用java中的.read()方法读文件返回值是一个0-255之间的数,因此记录下每一个数字出现的频率并将它作为权值就可构建一棵哈夫曼树,根据构建的哈夫曼树我们获得相应字符的编码,然后通过将二进制8位一组转换成一个字符存储,这样就可以使空间变为2进制码文件的1/8,但是由于二进制本身就将文件扩大,因此压缩不是很理想。大约压缩40%-60%;。二:遇到的问题1:压缩之后存入的实际上是二进制转

2015-12-24 18:11:32 1154

原创 Java学习笔记:GUI基础

一:我们使用到的java GUI的API可以分为3种类: 组件类(component class)容器类(container class)辅助类(helper class)1:组件类:组件类是用户用来创建界面的,Component类的实例可以显示在屏幕上,Component类是包含容器类的所有用户界面的根类,JComponent是轻量级组件类的根类。 2:容器类: 容器类 说明

2015-12-17 22:39:41 731

原创 排序算法 快速排序 归并排序 堆排序

一:插入排序思想:在对整个数组循环for(i = 0;i < n;i++)的过程中,保证此时走到的i位置的前面已经是一个有序序列,所以对于i位置的处理就是由i位置依次向前,找到第一个不满足大于此时i位置的元素的位置,插入即可。 #include<stdio.h>void Insert(int a[],int n) //a是待排序数组,n是数组大小{ int i,j;

2015-12-14 18:45:21 1655

原创 执行新程序 execve()

新程序的执行一:execve()之所以叫新程序的执行,原因是这部分内容一般发生在fork()和vfork()之后,在子进程中通过系统调用execve()可以将新程序加载到子进程的内存空间。这个操作会丢弃原来的子进程execve()之后的部分,而子进程的栈、数据会被新进程的相应部分所替换。即除了进程ID之外,这个进程已经与原来的进程没有关系了。 举个例子:在shell(shell也是一个进程)中执行

2015-12-06 20:26:01 8264 1

原创 图邻接表存储 深度优先和广度优先遍历

邻接表    是图的常用储存结构之一。邻接表由表头结点和表结点两部分组成,其中图中每个顶点均对应一个存储在数组中的表头结点。如图: 下面直接上代码:#include<stdio.h>#include<stdlib.h>#include"my_queue.h"int visit[MAXSIZE] = {0}; //作为输出判断数组AdjList *build_Gra

2015-11-27 20:18:06 2696 1

原创 文件与文件系统的压缩与打包 tar gzip bzip2

1:linux下常见的压缩文件后缀: .gz .zip .bz2 打包后的: .tar.gz .tar.zip .tar.bz2 2:gzip: 压缩:gzip file 解压:gunzip file.gz 3:bzip2:压缩:bzip2 file 解压: bunzip2 file.bz2 4:下面说说tar: 假设我们现在有这么几个文件,file1 file2 file3

2015-11-25 10:50:17 987

原创 Linux磁盘与文件系统管理

1:简单说说磁盘以及分区的构成,我们知道,磁盘由盘面,磁头,磁臂构成,假设磁盘盘面上只有一层,我们将盘面一圈圈的划分,然后以原点为中心,连一条线出去,某个圈上被截出来的部分就是扇区,整个一个圈就是一个柱面,我们经常说的分区其实就是以柱面为单位的,0磁道1扇区(一个扇区一般情况下为512字节)的MBR记录了操作系统内核文件的位置,占446字节,然后分区表占用66字节. Linux的Ext文件系统 i

2015-11-25 10:48:56 946

原创 Linux文件与目录管理 cp od chattr lsattr

1:在shell脚本中,一定要使用绝对路径。 2:在根目录下,.和..是完全相同的两个目录。 3:cd - 就相当于撤销,表示回到前面状态所在的目录。 4:mkdir -m 700 test 加”-m”参数可以指定权限。 5:将某个目录(比如/home)加入PATH中我们可以:PATH = “$PATH”:/home 6:有时我们ls的时候,会看到在目录后面会加上一些* = | 等,他们表

2015-11-25 10:46:33 582

原创 哈夫曼树的构建 哈夫曼编码

哈夫曼树:给定n个权值作为n的叶子结点,构造一棵二叉树,若带权路径长度达到最小,称这样的二叉树为最优二叉树,也称为哈夫曼树(Huffman Tree)。哈夫曼树是带权路径长度最短的树,权值较大的结点离根较近。 哈夫曼编码:在数据通信中,需要将传送的文字转换成二进制的字符串,用0,1码的不同排列来表示字符。例如,需传送的报文为“AFTER DATA EAR ARE ART AREA”,这里用到的字符

2015-11-22 22:48:17 2363

原创 非递归创建二叉树 先序 中序 后序遍历

思想:用”栈”来消除递归。主要是建立的过程,刚开始卡到了如果遇到’#’,那么在else中间出栈之后还需要读一个元素,这样在遇到连续的”#”之后,退栈并不能达到合适的位置,最后听了“巅峰”的建议,还是设置了flag,解决了问题,下面解释下建立过程的思想: 1:正常情况下以先序的方式输入串。一个一个字符读取;如果第一个字符不为“#”,先将它入栈,即我们的根。 2:初始化flag = 0,如果没

2015-11-22 17:11:50 1763 1

原创 三元组创建矩阵 一次定位快速转置 矩阵的加法、减法、乘法

首先说说我们经常见到或者使用的矩阵: (1):三角矩阵:对角线一侧的元素没有限制,另一侧全为0或者常数c。常见的有上三角矩阵和下三角矩阵。 (2):对角矩阵:对角矩阵是指有效元素集中在对角线两侧,我们常用的三对角矩阵来将矩阵的压缩。三对角矩阵指的是三条对角线以外的元素均为0。 (3):稀疏矩阵:指的是矩阵中非零元素的个数低于矩阵中元素总个数的%25。 正是因为稀疏矩阵的这个性质,我们才可以将

2015-11-22 16:51:12 4092

原创 字符串的简单处理

其实我认为计算机存储的东西有两类,一类是数据,一类是字符串,我不想将字符与数据看做一个东西,对于字符需要处理的地方非常多,比如匹配,替换,删除,修改等等,下面我总结下自己今天写的有关字符串处理的几个函数: StrAssign(chars); //构建一个串S StrCopy(&S,chars); //将chars串拷贝给S StrLength(S,&ret); //ret的值就是数组

2015-11-19 08:23:26 596

原创 栈和队列的应用之"表达式求值"和"魔王语言"

一:魔王语言[问题描述] 有一个魔王总是使用自己的一种非常精练而又抽象的语言讲话,没有人能听得懂,但他的语言是可以逐步解释成人能听懂的语言,因为他的语言是由以下两种形式的规则由人的语言逐步抽象上去的: (1) α -> β1β2…βm (2)(θδ1δ2…δn)->θ δn θδn-1…θδ1 θ 在这两种形式中,从左到右均表示解释。试写一个魔王语言的解释系统,把他的话解释成人能听得

2015-11-14 23:38:54 990

原创 父进程等待子进程结束 waitpid wait

我们一直在强调一个概念就是进程是一个程序执行的实例,是内核在虚拟概念下创建的实体,它实例化的体现在用户态就是程序代码和代码使用的变量(存储空间),在内核态就是内核为我们每个进程所保存的数据结构(状态信息)等。 当一个进程由于某种原因停止时,内核并不是直接将为它保存的状态信息从内核移除,相反,进程会一直被保持在一种已经终止的状态,直到被它的父进程回收,当父进程回收已经终止的子进程时,内核会将子进程的

2015-11-09 17:02:08 18133

原创 命令与文件的查询 which whereis locate find

一:whichwhich查找脚本文件也就是我们的系统命令 用法:which [command] 默认根据我们PATH路径去查找,但是不同的用户肯定设置不同的PATH,所以就像普通用户查找不到一些/sbin/下的命令是正常的。但是有的命令我自己可以用,但是查找不到就奇怪了,比如”cd”命令,实际上它是bash内置命令。student@student:$ type cdcd is a shell b

2015-11-09 09:47:40 635

原创 CSAPP学习笔记(异常控制流1)

1:诸如子进程结束之后父进程需要被告知,有时候应用程序需要系统调用,内核通过上下文切换将控制从一个进程切换到另一个进程,还有一个进程发送信号到另一个进程时接收者转而到它的信号处理函数去执行等等,我们的操作系统,甚至硬件无时无刻不在发生“突变”,我们把这种突变叫做异常控制流。即ECF(Exceptional Control Flow),它发生在计算机系统的各个层次。 2:为什么要理解异常控制流:

2015-11-08 21:53:58 662

原创 CSAPP学习笔记(第一,二章)

1:文本文件指的是ASCII码文件,二进制文件指的是除文本文件以外,其他文件。 2:区分数据对象的唯一判别方法是数据的上下文。 3:描述一下一个hello.c文件的处理过程。首先hello.c文件我们叫做源代码,经过预处理 gcc -E hello.c -o hello.i 处理一些宏,#define的预定义等,我们可以在hello.i的最底部找到我们helloworld的简单几行代码,编译之后

2015-11-08 21:52:53 635

原创 JAVA学习笔记(33-53)

33:java中的多维数组,以二位为例: 创建方法:int[][] a = new int[2][3]; 建立一个5*5的数组。 或者下面的建立方法也可以: int[][] c = { {1, 2, 3}, {4, 5, 6}, }; 获取长度:以c数组为例: c.length = 2 原因是此

2015-11-08 21:35:47 566

原创 JAVA学习笔记(1-32)

1:数据的输入中,也需要提前声明变量。java区分大小写,注意保留字的问题,注意分号。 2:用import调用一个类。用new新建一个对象,相当于c中的malloc。 3:用final定义一个宏,相当于#define PI 3.1415926 用final表示为:final double PI 3.1415926 注意:需要加入类型。 4:java中的单字节被 byte代替。 5:变量的赋值

2015-11-08 21:28:29 740

原创 一张图说懂java中 private default protected public 的区别

private:修饰完全隐藏类的成员,这样,就不能从类的外边直接访问他们,我们提供set和get方法,保证类中数据域的安全。default:指默认修饰符,什么都不加,实际上它限制的范围就是一个包内可以访问。如果不在一个包内,即使继承关系任然是不能访问的。protected:经常需要允许子类访问定义在父类中的数据和方法,但是不允许非子类访问这些数据和方法,这种情况下就可以使用protected,它允许

2015-11-08 21:03:08 10194 1

原创 "递归"实现"约瑟夫环","汉诺塔"

一:约瑟夫环问题是由古罗马的史学家约瑟夫提出的,问题描述为:编号为1,2,….n的n个人按顺时针方向围坐在一张圆桌周围,每个人持有一个密码(正整数),一开始任选一个正整数作为报数上限值m,从第一个人开始按顺时针方向自1开始报数,报到m时停止报数,报m的那个人出列,将他的密码作为新的m值,从他顺时针方向的下一个人开始重新从1报数,数到m的那个人又出列;如此下去,直到圆桌周围的人全部出列为止。一般情况下

2015-11-05 08:42:44 1194

原创 什么是进程?

我们以”HelloWorld.c”这个最简单的c语言程序为例来给大家介绍到底什么是进程。 程序就是最简单的”HelloWorld.c”,我们想要运行它,执行”gcc HelloWorld.c -o HelloWorld”之后,再./HelloWorld,屏幕上就会显示”Hello World!”的输出了,现在我们将这个过程细化,我们知道一个c语言程序的执行过程分为以下几步:预处理->编译->汇编-

2015-11-01 18:55:15 757

原创 idea 显示行号

File->Settings->Editor->General->Appearence->Show Line Number选中之后“Apply”,然后OK就好了。

2015-10-25 13:03:28 786

ncurses_programs代码示例

ncurses是最早的SystemVRelease4.0(SVr4)中CURSES的一个克隆。这是一个可自由配置的库,完全兼容旧版本的curses。简而言之,它是一个管理应用程序在字符终端显示的函数库。当后面提到curses的时候,同时也可以和NCURSES互换。

2017-12-28

axel多线程下载神器

axel多线程下载神器

2017-01-07

mysql-connector-c++-1.1.7-linux-glibc2.5-x86-64bit.rpm

mysql-connector-c++-1.1.7-linux-glibc2.5-x86-64bit.rpm 安装只需: rpm -ivh mysql-connector-c++-1.1.7-linux-glibc2.5-x86-64bit.rpm 即可

2017-01-07

ntfs-3g源码

ntfs-3g源码

2017-01-07

cJSON规范代码加注释

cJSON源码经过格式化之后的资源,易于阅读。

2017-01-02

dosbox-0.74 无bug修复版(内含.EXE文件)

这是修复bug的dosbox-0.74,RedHat系列用户需要安装的可以直接安装,并且内含DEBUG.EXE,LINK.EXE,MASM.EXE。

2016-10-25

Json jar包

详细的java Json jar包。可以在自己的java项目中尽情的使用了。

2016-06-29

空空如也

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

TA关注的人

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