- 博客(216)
- 资源 (34)
- 收藏
- 关注
转载 Linux进程模型
-------------原文链接:http://www.cnblogs.com/biyeymyhjob/archive/2012/08/01/2617884.html-----------------------------------Linux进程通过一个task_struct结构体描述,在linux/sched.h中定义,通过理解该结构,可更清楚的理解linux进程模型。 包含进
2015-01-31 09:52:25 2685 1
原创 数据结构基础(21) --DFS与BFS
DFS 从图中某个顶点V0 出发,访问此顶点,然后依次从V0的各个未被访问的邻接点出发深度优先搜索遍历图,直至图中所有和V0有路径相通的顶点都被访问到(使用堆栈). //使用邻接矩阵存储的无向图的深度优先遍历template void Graph::DFS(){ stack iStack; showVertex(0); vertexList[0]->wasVi
2015-01-14 15:54:52 2767 3
原创 数据结构基础(20) --图的存储结构
图的结构定义 图是由一个顶点集 V 和一个弧集 E构成的数据结构。 Graph = (V , E ) 其中,E = {| v,w∈V 且 P(v,w)} 表示从 v 到 w 的一条弧,并称 v 为弧尾,w 为弧头。谓词 P(v,w) 定义了弧 的意义或信息。 由顶点集和边集构成的图称作无向图。 如果”弧”是有方向的,则称由顶点集和弧集构成的图为有向图。 邻接矩阵 定义
2015-01-14 15:50:08 2443 1
原创 数据结构基础(19) --堆与堆排序
完全二叉树 首先让我们回顾一下完全二叉树的两个性质: 性质1:具有n个结点的完全二叉树的深度为[logn](向下取整)+1。 性质2:若对含 n 个结点的完全二叉树从上到下且从左至右进行 1 至 n 的编号,则对完全二叉树中任意一个编号为 i 的结点: (1) 若 i=1,则该结点是二叉树的根,无双亲,否则,编号为 [i/2](向下取整)的结点为其双亲结点; (2) 若 2i>n,
2015-01-13 20:19:47 2789 1
原创 数据结构基础(18) --哈希表的设计与实现
哈希表 根据设定的哈希函数 H(key)和所选中的处理冲突的方法,将一组关键字映射到一个有限的、地址连续的地址集 (区间) 上,并以关键字在地址集中的“映像”作为相应记录在表中的存储位置,如此构造所得的查找表称之为“哈希表”。 构造哈希函数的方法1. 直接定址法(数组) 哈希函数为关键字的线性函数H(key) = key 或者 H(key) = a*key + b 此法仅适合于:地址集合
2015-01-13 20:10:50 11788 4
原创 数据结构基础(17) --二叉查找树的设计与实现
二叉排序树的特征二叉排序树或者是一棵空树,或者是具有如下特性的二叉树: 1.每一元素都有一个键值, 而且不允许重复; 2.若它的左子树不空,则左子树上所有结点的值均小于根结点的值; 3.若它的右子树不空,则右子树上所有结点的值均大于根结点的值; 4.它的左、右子树也都分别是二叉排序树。二叉排序树保存的元素构造template class Element{public:
2015-01-11 15:15:46 3116 1
原创 数据结构基础(16) --树与二叉树
树的基本术语 1.结点:{数据元素+若干指向子树的分支} 2.结点的度:分支的个数(子树的个数) 3.树的度:树中所有结点的度的最大值 4.叶子结点:度为零的结点 5.分支结点:度大于零的结点(包含根和中间结点) 6.(从根到结点的)路径:由从根到该结点所经分支和结点构成; 7.结点的层次:假设根结点的层次为1,则根的孩子为第2层,如果某节点在第L层,则其子树的根在L+1层。 8.树的深度:树中叶
2015-01-11 14:59:07 2685 1
原创 数据结构基础(15) --基数排序
基数排序是一种借助“多关键字排序”的思想来实现“单关键字排序”的内部排序算法。实现多关键字排序通常有两种作法: 最低位优先法(LSD) 先对K[0]{基数的最低位}进行排序,并按 K(0) 的不同值将记录序列分成若干子序列之后,分别对 K[1] 进行排序,..., K[d-1]依次类推,直至最后对最次位关键字排序完成为止。 最高位优先法(MSD) 先对 K[d-1]{基数的最高位
2015-01-11 10:57:22 4960 1
原创 数据结构基础(14) --链式队列的设计与实现
链式队列是基于单链表的一种存储表示, 其形状如下图所示: (队列的队头指针指向单链表的第一个结点, 队尾指针指向单链表的最后一个结点, 注意没有无用的空[头/尾]节点) 用单链表表示的链式队列特别适合于数据元素变动比较大的情况, 而且不存在队列满而产生溢出的情况; 链式队列结点构造:[这次我们将节点构造成了类LinkQueue的嵌套类]struct ChainNode{ C
2015-01-10 20:37:23 2761 1
原创 数据结构基础(13) --链式栈的设计与实现
采用链式存储的栈成为链式栈(或简称链栈), 链栈的优点是便于多个栈共享存储空间和提高其效率, 且不存在栈满上溢的情况(因为链栈是靠指针链接到一起,只要内存够大, 则链栈理论上可以存储的元素是没有上限的); 与顺序栈相比, 由于顺序栈是采用的数组实现, 因此一旦数组填满, 则必须重新申请内存, 并将所有元素”搬家”, 而链栈则省略了这一”耗时耗力”的工作, 但却需要付出附加一个指针的代价;
2015-01-06 19:38:16 3092 1
原创 数据结构基础(12) --双向循环链表的设计与实现
双向链表的操作特点: (1) “查询” 和单链表相同; (2)“插入” 和“删除”时需要同时修改两个方向上的指针。 但是对于双向循环链表则在表尾插入非常的迅速, 只需O(1)的时间,因为有指向前面的指针, 因此双向循环链表会很容易的找到位于表尾的元素,因此双向循环链表比较适用于频繁在表尾插入的情况.空链表:双向循环链表节点构造:class DoubleListNode{priv
2015-01-06 19:19:17 3233 1
原创 数据结构基础(11) --循环链表的设计与实现
循环链表:最后一个结点的指针域的指针又指回第一个结点的链表; 循环单链表与单链表的区别在于:表中最有一个节点的指针不再是NULL, 而改为指向头结点(因此要对我们原来的MyList稍作修改), 从而整个链表形成一个环. 因此, 循环单链表的判空条件不再是头结点的指针是否为空, 而是他是否等于头结点; 其实如果只是单纯的实现循环链表对单链表的性能提升是不明显的, 反而增加了代码上实
2015-01-05 20:50:12 3260 1
原创 数据结构基础(10) --单链表迭代器的设计与实现
为了向 STL 致敬(O(∩_∩)O~), 我们模仿STL中的list的迭代器, 我们也自己实现一个MyList的迭代器, 以供遍历整个链表的所有元素:首先:Node节点需要做如下修改(注意后缀有+的代码)//链表节点template class Node{ friend class MyList; friend class ListIterator; //+ te
2015-01-05 20:44:44 3187 2
原创 数据结构基础(9) --单链表的设计与实现(2)之高级操作
链表的链接: 将第二条链表的所有内容链接到第一条链表之后, 其完整实现代码与解析如下://链表的链接template void MyList::concatenate(const MyList &list){ if (isEmpty())//如果自己的链表为空 { first = list.first; return ; }
2015-01-05 20:35:04 2499 1
原创 数据结构基础(8) --单链表的设计与实现(1)之基本操作
链表简介数组的缺点: 1.元素插入:除了在数组的末尾插入元素之外,在数组的其他任何位置插入元素都需要进行数组元素的频繁移动(插入位置之后的元素都需往后移动), 时间复杂度约为O(N); 2.数组的删除:除了在数组的末尾删除元素之外,在数组的其他任何位置删除元素都需要进行数组元素的频繁移动(删除位置之后的元素都需往前移动), 时间复杂度也为O(N); 链表的特点: 由于在链表中插
2015-01-05 20:31:07 3402 2
原创 数据结构基础(7) --循环队列的设计与实现
队列 队列简称队, 也是一种操作受限的线性表, 只允许在表的一端进行插入, 而在表的另一端进行删除.其特点为”先进先出(FIFO)”,故又称为先进先出的线性表,简单队列如图所示: 循环队列 顺序队列有一个先天不足, 那就是空间利用率不高, 会产生”假溢出”现象,即:其实队列中还有空闲的空间以存储元素, 但我们在判断队列是否还有空间时, 队列告诉我们队列已经满了, 因此这种溢出并不是真正
2015-01-03 20:46:17 4029 1
原创 数据结构基础(6) --顺序栈的设计与实现
栈是一种只允许在一端进行插入或删除操作的线性表.其特点为:先进后出(FILO)/后进先出(LIFO); 栈 VS. 队列 栈和队列都是动态集合, 但在栈中, 可以去掉的是最近插入的那一个,:栈实现了一种后进先出(last-in, first-out)的策略;类似的, 在队列中, 可以去掉的元素总是在集合中存在时间最长的那一个:队列实现了先进先出(first-in, first-out)的策略
2015-01-03 20:07:46 3568 1
原创 数据结构基础(5) --归并排序
归并排序的基本思想: 将两个或两个以上的有序子序列”归并”为一个有序序列:假定待排序表含有n个记录, 则可以看成是n个有序的子表, 每个子表长度为1, 然后两两归并, 得到[n/2]个长度为2或1的有序表,; 再量量归并, ...., 如此重复, 直到合并成为一个长度为n的有序表为止, 这种排序方法称为2-路归并排序.如图为一个2-路归并拍下的一个示例:/**说明: 将有序的记录序列 in
2015-01-03 19:50:00 2892 1
原创 数据结构基础(4) --快速排序
快速排序是最流行的,也是速度最快的排序算法(C++ STL 的sort函数就是实现的快速排序); 快速排序(Quicksort)是对冒泡排序的一种改进。由C. A. R. Hoare在1962年提出。它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数
2015-01-03 14:08:02 3152 3
原创 数据结构基础(3) --Permutation & 插入排序
Permutation(排列组合)排列问题: 设R = {r1, r2, ... , rn}是要进行排列的n个元素, Ri = R-{ri}; 集合X中元素的全排列记为Permutation(X), (ri)Permutation(X)表示在全排列Permutation(X)的每一个排列前加上前缀ri得到的排列.R的全排列可归纳定义如下: 当n=1时,Permutation(R)={r},r是集合
2015-01-01 11:44:23 2518 3
原创 数据结构基础(2) --顺序查找 & 二分查找
顺序查找适用范围: 没有进行排序的数据序列缺点: 速度非常慢, 效率为O(N)//实现template Type *sequenceSearch(Type *begin, Type *end, const Type &searchValue)throw(std::range_error){ if ((begin == end) || (begin == NULL) || (end
2015-01-01 10:44:25 3296 1
原创 数据结构基础(1) --Swap & Bubble-Sort & Select-Sort
Swap的简单实现//C语言方式(by-pointer):template bool swapByPointer(Type *pointer1, Type *pointer2){ //确保两个指针不会指向同一个对象 if (pointer1 == NULL || pointer2 == NULL) { return false; }
2015-01-01 10:36:24 2939 3
原创 重装Windows后修复Linux引导
装了双系统(Windows和Linux)的机器重新安装Windows后会导致Linux的引导丢失而无法进入原先的Linux系统[其原因是Windows会覆盖原先MBR中的Linux的BootLoader-GRUB]。这种情况可以通过修复引导而重新找回Linux。 以Ubuntu14.04为例;首先找到一张Linux的安装盘,放入光驱后重启电脑。进入BIOS让电脑从光盘启动,然后进入Live C
2014-10-20 10:23:09 7965
原创 gdb学习(二)[第二版]
查看运行时数据print - 查看变量值 ptype – 查看变量类型 #ptype i #ptype “aaa” 打印字符串”aaa”的类型 #ptype array 打印数组array的类型 #ptype main 打印main函数的类型 print array – 查看数组 #p arr1 #p arr1[2] 查看数组arr2第三个元素值 #p &arr1[2] 打印数组元素的地
2014-10-12 22:19:31 2985 1
原创 gcc学习(二)[第二版]
头文件与库文件1、概要 在使用C语言和其他语言进行程序设计的时候,我们需要头文件来提供对常数的定义和对系统及库函数调用的声明。 库文件是一些预先编译好的函数集合,那些函数都是按照可重用原则编写的。它们通常由一组互相关联的用来完成某项常见工作的函数构成。比如用来处理屏幕显示情况的函数(ncurses库)和数据库访问例程(dbm库)等。 2、使用库的优点: 1)模块化开发 2)可重用性 3)可维护性
2014-10-12 17:14:30 2775
转载 Linux程序分析工具介绍—ldd,nm
原文件链接:http://blog.csdn.net/statdm/article/details/7759100
2014-10-12 16:59:28 3070
原创 gcc学习(一)[第二版]
gcc简介1、 gcc是GNU Compiler Collection的缩写。最初是作为C语言的编译器(GNU C Compiler),作者为Richard Stallman,是GNU项目的奠基者;现在已经支持多种语言,如C、C++、Java、Pascal、Ada、COBOL语言等 。 2、主要特征: gcc是一个可移植的编译器,支持多种硬件平台,甚至对Don Knuth 设计的 MMIX 这类
2014-10-12 12:56:22 5562 1
原创 gdb学习(一)[第二版]
概述 gdb是GNU debugger的缩写,是编程调试工具。 功能 1、启动程序,可以按照用户自定义的要求随心所欲的运行程序。 2、可让被调试的程序在用户所指定的断点处停住 (断点可以是条件表达式)。 3、当程序停住时,可以检查此时程序中所发生的事。 4、动态改变程序的执行环境。 示例:gcc -Wall -g simple.c -o simple #一定要记得加上-g选项,以便生成调试信息
2014-10-11 21:02:26 4346
原创 Makefile学习(三)[第二版]
make常用内嵌函数1、函数调用 $(function arguments) #$引用的结果就是函数生成的结果 2、Makefile下常用的函数 1)$(wildcard PATTERN) #匹配当前目录下的文件 例如:src=$(wildcard *.c) #匹配当前目录下所有的.c文件 2)$(patsubst PATTERN,REPLACEMENT,TEXT) #模式替换函数 例如:$
2014-10-10 18:09:04 2740
原创 Linux下的tree命令 --Linux下目录树查看
Linux下的tree命令--Linux下目录树查看 有时我们需要生成目录树结构,可以使用的有ls -R,但是实际效果并不好 这时需要用到tree命令,但是大部分Linux系统是默认不安装该命令的,需要自己安装一下;tree的常见用法: tree -a #显示所有 tree -d #仅显示目录 tree -L n #n代表数字..表示要显示几层... tree -f #显示完整路
2014-10-10 12:09:29 44108
原创 Makefile学习(二)[第二版]
复杂实例#示例1:在上一个示例的基础上再增加一个可执行文件03test[修改之处已标红].PHONY: clean all CC = gcc CFLAGS = -Wall -gBIN = 01test 02test 03testSOURCES = $(BIN:=.c)OBJECTS = $(BIN:=.o) all: $(BIN) 01test: 01test.o02test: 02test.o
2014-10-10 11:23:05 2604
原创 Makefile学习(一)[第二版]
简介 1)make:利用 make 工具可以自动完成编译工作。这些工作包括:如果仅修改了某几个源文件,则只重新编译这几个源文件[make通过比对相应的.c文件与.o文件的时间];如果某个头文件被修改了,则重新编译所有包含该头文件的源文件。利用这种自动编译可大大简化开发工作,避免不必要的重新编译。 2)Mackfile:make工具通过一个称为 Mackfile 的文件来完成并自动维护编译工作。Ma
2014-10-10 11:13:27 3571
原创 Linux下top命令详解
Linux下top命令详解 top命令是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况,类似于Windows的任务管理器。top是一个动态显示过程,即可以通过用户按键来不断刷新当前状态.如果在前台执行该命令,它将独占前台,直到用户终止该程序为止. 比较准确的说,top命令提供了实时的对系统处理器的状态监视.它将显示系统中CPU最“敏感”的任务列表.该命令可以按CPU使用
2014-10-08 20:40:12 4321 2
原创 Shell编程入门(第二版)(下)
流程控制语句三、select/in[较少用]格式:[python] view plaincopy select [变量] in [关键字] do command 1 ... ... command n done #select把关键字中的每一项做成类似表单,以交互的方式执行do和done之间的命令 示例-
2014-09-29 12:00:12 2942
原创 Shell编程入门(第二版)(中)
变量测试语句-test作用:用来测试变量是否相等,是否为空,文件类型等。格式: test 测试条件 或 [] #范围:整数,字符串,文件 1)整数测试: test int1 -eq int2 测试整数是否相等 test int1 -ge int2 测试int1是否>=int2 test int1 -gt int2 测试int1是否>int2 test int1 -le
2014-09-28 21:19:56 2766
原创 Shell编程入门(第二版)(上)
简单的示例Shell程序示例1.#!/bin/bash#This is to show what a shell script looks likeecho "Our first example"echo # This inserts an empty line in output.echo "We are currently in the following directory."/b
2014-09-28 18:46:04 3773
原创 Linux用户管理案例(第二版)
批量添加用户1、按照/etc/passwd文件格式编写用户信息文件users.info xiaofang01::1001:503::/home/xiaofang01:/bin/bash #注意不能有空行,不然会报错 2、newusers 3、pwunconv #取消shadow password功能 4、以[用户名:密码]的格式编写密码文件passwd.info 5、chpasswd 6
2014-09-27 10:05:23 3289
原创 用户管理实用命令(第二版)
用户管理实用命令pwck #检测/etc/passwd文件 #如果对/etc/passwd进行了误操作,他就会提示 vipw #编辑/etc/passwd文件,他与VI的唯一不同,会锁定/etc/passwd文件 id #查看用户id和组信息 finger [username] #查看用户详细信息[有时需要自己安装] su 切换用户 #加了–同时会有环境变量与宿主目录的切换【加了- ,-左右都
2014-09-27 07:00:47 2658
原创 Linux用户管理命令(第二版)
添加用户1、useradd -设置选项 用户名 【-D 查看缺省参数 】 选项: u: UID 【必须是系统中没有的】 g:缺省所属用户组GID[最好有] G: 指定用户所属多个组【可以指定这个用户所属的部门等】 d: 宿主目录【可以任意指定】 s: 命令解释器Shell 【必须是包含在/etc/shells文件中的】 c:描述信息【可以用于描述该用户是谁,有什么权限,最好要有】 e
2014-09-26 21:04:03 2426
原创 Linux特殊权限分析(第二版)
SetUID[权限值=4]问题:为什么普通用户可以修改自己的密码?ll $(which passwd) 1、SetUID:当一个可执行程序/命令具有SetUID 权限,用户执行这个程序时,将以这个程序的所有者的身份执行。 2、加SetUID权限: chmod u+s [filename] 或 chmod 4755 [filename] #SetUID权限值=4 E.g. chmod u+s $(
2014-09-26 16:53:05 2982
epoll封装与测试代码
2015-03-11
Socket 类封装 改进版
2015-03-09
est_for_shutdown_and_close源代码
2015-03-09
test_for_shutdown_and_close
2015-03-09
Socket-类封装
2015-02-28
echoServer定长包与添加报头版本
2015-02-27
基于多进程的P2P聊天程序
2015-02-27
echoserver多进程版
2015-02-26
ShmFifo源代码(C++版)
2015-02-10
shmfifo源代码(C语言版)
2015-02-10
C++ 标准模版库
2013-10-20
codeblocks12.10汉化包
2013-08-09
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人