- 博客(16)
- 收藏
- 关注
原创 二叉搜索树的根节点插入
在标准二叉搜索树中,每个新节点都会插入到树的底层的某个地方,替换某个外部节点。这种状态并不是一个绝对的要求;也可以从根节点插入,方法是先插入到相应外部节点然后在通过旋转,转到根节点,下面给出实现: #include #include struct Tree { int item; struct Tree* l; struct Tree* r; }; struc
2012-03-15 22:03:21
827
原创 二叉搜索树
二叉搜索树是一棵二叉树,它的每个内部节点都关联一个关键字,并具有以下性质:任意节点的关键字大于或等于该节点左子树中所有节点的关键字,小于等于该节点右子树中所有节点的关键字。 实现: #include #include struct Tree { int item; structTree *l; structTree *r; }; void
2012-03-12 23:34:49
401
原创 二分搜索
二分搜索的思想是把数据项集合分成两部分,确定搜索关键字属于哪一个部分,然后集中处理那一部分。划分数据项的一种合理方式是保持数据项有序,然后在有序数组中使用下标来界定所要处理的那一部分数组。 下面给出实现: #include int* search( int a[], int l, int r,int key); int main( int argc, char* arg
2012-03-11 20:57:51
487
原创 顺序搜索
来自于一个太大范围的关键字是不能作为索引的。符号表实现的一个简单方法是把数据项按照顺序连续地存放在数组中。当要插入一个新的数据项时,就像插入排序中所做的那样,将较大的元素移动一个位置,把新的数据项放进数组中;当要进行搜索时,我们顺序地查找数组。因为数组是有序的,当遇到一个大于搜索关键字的关键字时,我们即可报告搜索失败。 基于数组的实现: static Item *st; static int
2012-03-11 10:33:21
696
原创 linux c 库函数 qsort 和bsearch
函数原型:void qsort(void *base, size_t nmemb, size_t size, int(*compar)(const void *,const void *)); base:要查找数组的首地址 nmemb:数组元素个数 size:元素大小 compare:回调函数,指明两个元素比较的方法。 例子: #include
2012-03-10 22:24:35
1176
1
原创 Libiptc库(一)
1. Iptc_init 函数原型:struct iptc_handle *iptc_init(const char*tablename); 描述:tablename是表名iptables内置支持的表名有:filter,mangle,nat函数返回一个初始化后的struct iptc_handle指针,大多数libiptc库函数都要依赖此指针。 2. iptc_first_chain
2012-03-10 17:20:31
6157
原创 关键字索引搜索
假定关键字的值是不同的小整数。在这种情况下,最简单的搜索算法是对存储在数组中的数据项进行排序,并按关键字进行索引。下面给出这种思想的伪代码: NULLitem 表示空项 Item 表示数据项的类型。 static Item *st; static int M = maxKey; //最大项 void STinit( int maxN ) { Inti;
2012-03-10 17:10:30
956
原创 读写流
1.每次读写一个字符 int getc( FILE *fp ) int fgetc( FILE *fp ) int getchar( void ) getc 和 fgetc 的区别是getc 是由宏实现的而fgetc是个函数。这就意味着: (1) getc的参数不能是有副作用的表达式。 (2) fgetc可以作为参数传递给另一个函数。 (3) getc的效率要比fge
2011-11-23 23:32:41
466
原创 请问这函数有什么问题?
char *p = NULL; char * func( int size ) { if( p == NULL ) p = (char*)malloc(size); return p; } 这个函数在多线程环境下有什么问题?
2011-11-22 23:35:22
656
2
原创 打开标准I/O流函数
打开标准I/O流 FILE *fopen(const char *path,const char *mode) FILE *fdopen(int fd, const char *mode) FILE *freopen(const char *path, const char *mode, FILE *stream) fopen:打开path指定的文件 freope
2011-11-22 23:23:19
631
原创 fsync、sync、fdatasync函数
sync、fsync、fdatasync 函数原型: int fsync( int fd ) int fdatasync( int fd ) void sync( void ) sync 函数只是将所有修改过的内容排到写入队列中,然后就返回。它并不等待实际的写入。 fsync 只对fd描述符指向的文件起作用并等待磁盘操作结束。 fdatasync 类似于fsy
2011-11-20 11:29:03
856
原创 dup、dup2函数
dup、dup2函数 函数原型: int dup( int fd ) int dup2( int oldfd, int newfd ) dup和dup2函数可以复制文件描述符。 1.dup dup复制文件描述符fd并返回新描述符,它们指向同一个文件。新描述符是系统中可用的最小的文件描述符。 2.dup2 dup2复制文件描述符
2011-11-20 10:50:30
451
原创 fcntl函数
fcntl 函数 1.fcntl 可以改变已打开文件的性质。 函数原型: int fcntl( int fd, int cmd,.../* args */) 1. cmd = F_DUPFD :复制文件描述符,fcntl找到大于或等于第三个参数的最小可用的文件描述符,并复制 fd。返回新文件描述符。失败则返回-1。 例子: #include #includ
2011-11-20 09:53:55
1290
原创 在首页上看到的一道有趣的题
#include int main( void ) { int a[4] = {1,2,3,4}; int *ptr1 = (int*)(&a+1); int *ptr2 = (int *)((int)a+1); printf("%x\n",ptr1[-1]); printf("%x\n",*ptr2);
2011-11-13 20:07:54
492
原创 判断系统是大端还是小端
大端系统: 字数据的高字节存放在低地址,而低字节存放在高地址。 小端系统: 字数据的低字节存放在低地址,高字节存放在高地址。 下面这个函数可以判断系统是大端还是小端。 int endian( void ) { union { int i; char a; }e; e.i=1;
2011-11-13 19:38:35
1000
原创 文件I/O
1.open函数 通过man查看open的帮助文档发现open有两个原型分别为: int open(const char *pahtname, int flags); int open(const char *pathname,int flags,mode_t mode); 但c语言中并没用支持重载,那为什么open有两个原型呢? 在fcntl.h文件中发现open的真正原型是这样的:
2011-11-13 17:33:56
483
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人