- 博客(22)
- 收藏
- 关注
转载 图的常用存储结构----邻接表
实现方法:1、动态建表Method:对于每个读入的边建立一个邻接表节点的对象,加入到相应的邻接表中,同时动态申请内存。Property:(1)对于无向图的邻接表,每个顶点度就是该顶点的邻接表中节点数。(2)对于有向图,第i个链表(邻接表)中的节点数是vi节点的出度;求其入度需要遍历整个邻接表或者建立你邻接表。(3)对于同一个图,输入边的顺序不同,其邻
2016-04-02 10:50:34 636
转载 fgets、gets和scanf的区别
gets()从stdin流中读取字符串,直至接受到换行符或EOF时停止,并将读取的结果存放在buffer指针所指向的字符数组中。换行符不作为读取串的内容,读取的换行符被转换为null值,并由此来结束字符串。 注意:gets函数可以无限读取,不会判断上限,所以程序员应该确保buffer的空间足够大,以便在执行读操作时不发生溢出。如果溢出,多出来的字符将被写入到堆栈中,这就覆盖了堆栈原
2015-12-22 16:23:02 638
转载 C语言预处理命令总结大全
C程序的源代码中可包括各种编译指令,这些指令称为预处理命令。虽然它们实际上不是C语言的一部分,但却扩展了C程序设计的环境。本节将介绍如何应用预处理程序和注释简化程序开发过程,并提高程序的可读性。ANSI标准定义的C语言预处理程序包括下列命令:#define,#error,#include,#if,#else,#elif,#endif,#ifdef,#ifndef,#undef,#line,#p
2015-12-16 14:08:43 423
转载 linux中$$、$!、$?等的含义
$$Shell本身的PID(ProcessID)$!Shell最后运行的后台Process的PID$?最后运行的命令的结束代码(返回值)$*所有参数列表。如"$*"用「"」括起来的情况、以"$1 $2 … $n"的形式输出所有参数$@所有参数列表。如"$@"用「"」括起来的情况、以"$1" "$2" … "$n" 的形式输出所有参数$#添加到Shell的
2015-12-16 14:02:17 6078
原创 Linux编程中 #define _XOPEN_SOURCE的作用
glibc是GNU发布的libc库,即c运行库。glibc是linux系统中最底层的api,几乎其它任何运行库都会依赖于glibc。glibc除了封装linux操作系统所提供的系统服务外,它本身也提供了许多其它一些必要功能服务的实现。由于 glibc 囊括了几乎所有的unix通行的标准,可以想见其内容包罗万象。glibc 所实现全部或部分规范下的功能有:1.ISO C: C语言
2015-11-26 09:50:42 2634
转载 优先队列的使用
在优先队列中,优先级高的元素先出队列。标准库默认使用元素类型的第一种用法:priority_queueint> qi;通过故示例1中输出结果为:9 6 5 3 2第二种方法:在示例1中,如果我们要把元素从小到大输出怎么办呢?这时我们可以传入一个比较函数,使用functional.h函数对象作为比较函数。priority_queue
2015-10-30 10:08:38 344
转载 kmp算法
一、KMP算法原理介绍字符串匹配是计算机的基本任务之一。举例来说,有一个字符串"BBC ABCDAB ABCDABCDABDE",我想知道,里面是否包含另一个字符串"ABCDABD"? 许多算法可以完成这个任务,Knuth-Morris-Pratt算法(简称KMP)是最常用的之一。它以三个发明者命名,起头的那个K就是著名科学家Donald Knuth。
2015-10-08 10:41:45 418
转载 new operator,operator new,placement new
c++中new的三种形态:new operator,operator new,placement new,new operator/delete operator就是new和delete操作符,而operator new/operator delete是函数。一、new operatornew (不可以被重载)执行过程:1、通过operator new申请内存2、使用placeme
2015-09-15 11:04:39 382
原创 git服务器的简单搭建
搭建git服务器需要一台运行linux的机器,我的机器的系统是Ubuntu 14.04,下面以我的机器为例介绍下git服务器的搭建过程,最后介绍一个新项目的创建过程。一、搭建git服务器需要安装的软件:git、openssh-server、openssh-client其中openssh-server和opensssh-client使git能够使用SSH协议在客户端和服务器间传输文件。$
2015-08-21 11:24:15 397
转载 Linux命令后台执行的方法
当进程不是守护进程时,不能简单地在命令行后添加一个&,当终端关闭时,该进程也随之关闭。因为通常在终端起动的进程其父进程是终端进程。当终端关闭时,其所有子进程也随之关闭。使进程在后台执行需要使用nohup命令:nohup command > out.log 2>&1 &nohup的作用是将进程的父进程设置为1,即init进程,这样终端关闭时,不会影响该进程。使用2>&1将标准错
2015-06-26 17:49:03 384
转载 c/c++代码如何相互调用
注意这里的C调用C++或者C++调用C意思是.c文件中调用.cpp文件中代码,或者相反。集成开发环境如VC++6.0或者vs都是以文件后缀来区别当前要编译的是C代码还是C++代码,然后采用响应的编译、调用协议等。使用extern "C" 主要是因为C编译器编译函数时不带参数的类型信息,只包含函数的符号名字。如 int foo( float x )C编译器会将此函数编译成类似
2015-06-23 15:05:52 488
转载 献给在这个世界上摇摆不定的朋友们
朋友看中一台电脑,需要9000元。他每月的收入只有2000.老婆对他说,你疯了,你买了就离婚。他问我怎么办。我说,你配不上那个电脑。连自己喜欢的东西都没勇气去争取你将来在社会上还能混成啥样?他咬咬牙买了。为了还债他开始不停的兼职。终于在一个月内还清了所有的余款。他的妻子并没有因为他的疯狂而离开他。他的妻子把他带进了车市,说:老公,我们贷款买了这辆宝马吧。他一开始吓死了。以为老婆是疯了。1年后他还清
2015-05-09 18:28:10 336
原创 diff patch用法
diff和patch是linux下常用的命令,diff用来把两个文件的差异形成一个文件,而patch用diff输出的文件作为输入,可以实现版本的升级(打补丁)。下面简单介绍diff和patch的用法。补丁。一、单个文件diff -uN from_file(源文件) to_file(目的文件) >to_file.patchpatch -p0 patch -RE -
2015-05-09 11:08:06 578
原创 C语言二维数组作为函数参数传递
一、二维数组存放方式二维数组中元素排列的顺序是按行存放的,即在内存中先顺序存放第一行的元素,再存放第二行的元素...二、二维数组作为函数参数二维数组作为函数参数,实参可以直接使用二维数组名,在被调用函数中队形参数组定义可以指定所有维数的大小,也可以省略第一维的大小说明,如:void f(int a[3][4]);void f(int a[][4]);它们是合法且等价,也可
2015-05-06 15:06:11 8807 1
原创 从键盘输入文件结束符方法
从键盘向程序输入数据序列,输入文件结束符的方法:windows:Ctrl+Z,EnterUnix、Mac OS X:Ctrl+D如可用上面提到的文件结束符来结束如下的循环:int sum = 0, value = 0;while (cin >> value) sum += value;
2015-04-19 10:09:56 901
转载 递归与尾递归
1、递归 简单的来说递归就是一个函数直接或间接地调用自身,是为直接或间接递归。一般来说,递归需要有边界条件、递归前进段和递归返回段。当边界条件不满足时,递归前进;当边界条件满足时,递归返回。用递归需要注意以下两点:(1) 递归就是在过程或函数里调用自身。(2) 在使用递归策略时,必须有一个明确的递归结束条件,称为递归出口。递归一般用于解决三类问题: (1)数据的定
2015-04-15 18:27:56 740
转载 计算机经典书籍
1、JavaJava编程语言(第三版)---Java四大名著----JamesGosling(Java之父)Java编程思想(第2版)----Java四大名著----BruceEckelJava编程思想(第3版)----Java四大名著----------------BruceEckelJAVA2核心技术卷I:基础知识(原书第7版)---Java四大名著-----C
2015-04-14 23:02:46 619
原创 vim配置
前段时间,参考了网上的一些资料,把我的vim配置了下(我用的是Ubuntu 14.04),今天来把它总结下,最后的配置效果如下,我的.vimrc文件内容在文章最后。一、vim配置文件全局的vim配置文件是/etc/vim/vimrc,个人用户的vim配置文件是~/.vimrc。在启动vim时,当前用户的~/.vimrc文件会被自动读取,该文件可以包含对vim的一些设置,实现一些基本
2015-04-14 17:03:01 610
原创 c语言函数名和宏定义冲突
c标准库中有这样的代码:int tolower(int);#define tolower(c) _Tolower[(int)(c)]在tolower.c中有这样的代码:int (tolower)(int){ return (_Tolower[c]);}也就是在函数定义的时候在函数名外加了一对括号,我们知道当函数名和宏名冲突时,宏名会掩盖函数名,而加的括号可以阻止翻译程序识别和展开宏
2015-04-13 12:41:27 3093
原创 宏展开
在c标准库中,d的实现中,有这样一段代码:#define _STR(x) _VAL(x)#define _VAL(x) #x刚看到时觉得这段代码不就相当于:#define _STR(x) #x后来发现自己理解错了,现对其进行说明。1、宏定义中使用的#、##、\#:将其后边的宏参数进行字符串化操作。##:连接符,用来将2个token连接为一个token,即将宏定义的2个形参连接为一
2015-04-12 15:01:15 1780
原创 linux下使用gcc生成静态库和动态库及其使用
本文将将介绍如何在linux下使用gcc生成静态库和动态库,以及如何使用库。一、简单说明库是二进制可执行代码,可以被操作系统载入内存执行。linux下的库有2种:静态库和动态库,它们的区别在于代码被载入的时刻不同,静态库的代码在编译过程中已经被载入可执行程序,因此最终生成的可执行文件比较大,在运行时比较占内存,不过相对快些;动态库的代码是在可执行程序运行时才载入内存的,因此最终生成的可执行
2015-04-11 22:51:59 525
原创 段错误 (核心已转储)
今天在Ubuntu上使用c语言写程序,出现了“段错误 (核心已转储)”。所谓段错误就是访问了不可访问的内存,段错误常由以下几种情况引起:1、访问系统数据区2、内存越界如数组越界3、栈溢出C语言中,函数参数的值,局部变量存放在栈中。windows中栈的大小是1M(我的vs2013是这样,可通过“项目”->“属性”->“链接器”->“系统”->“堆栈保留大小”查看和设置)。li
2015-04-10 21:00:04 1530
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人