
algorithm
likefrank
这个作者很懒,什么都没留下…
展开
-
不用库函数,自己实现strcpy和memcpy函数;二者的区别
1.代码实现char* strcpy(char* strDest, const char* strSrc){ ASSERT(strDest != NULL && strSrc != NULL); char* strTmpD = strDest; while ((*strTmpD++ = *strSrc++) != 0) { } return strDest ;}void* mem转载 2008-09-24 21:29:00 · 1132 阅读 · 0 评论 -
strcpy ,strncpy ,strlcpy地用法
strcpy ,strncpy ,strlcpy地用法好多人已经知道利用strncpy替代strcpy来防止缓冲区越界。但是如果还要考虑运行效率的话,也许strlcpy是一个更好的方式。1. strcpy我们知道,strcpy 是依据 /0 作为结束判断的,如果 to 的空间不够,则会引起 buffer overflow。strcpy 常规的实现代码如下(来自 OpenBSD 3.9):转载 2008-09-24 21:36:00 · 654 阅读 · 0 评论 -
各种排序算法的总结和比较
1 快速排序(QuickSort)快速排序是一个就地排序,分而治之,大规模递归的算法。从本质上来说,它是归并排序的就地版本。快速排序可以由下面四步组成。(1) 如果不多于1个数据,直接返回。(2) 一般选择序列最左边的值作为支点数据。(3) 将序列分成2部分,一部分都大于支点数据,另外一部分都小于支点数据。(4) 对两边利用递归排序数列。快速排序比大部分排序算法都要快。尽管我们可以在某些特殊的情况转载 2008-09-24 21:13:00 · 31647 阅读 · 2 评论 -
将字符串里词顺序倒置
将字符串里词顺序倒置,如"Times New Roman"变为"Roman New Times"。以空格为分隔符。解决方案为:先将整个字串倒置,然后依次把倒置后串中的每一个单词倒置。这个问题解答的思路很简单,但是要考虑到很多种的情况,比如字符串的头、尾有多余的空格怎么办,如果字符串中只有空格,还有字符串中间可能会有两个以上并列的空格。程序如下: 1 void ReverseStr(char *转载 2008-10-17 15:11:00 · 734 阅读 · 0 评论 -
判断单链表是否存在环,判断两个链表是否相交问题详解
有一个单链表,其中可能有一个环,也就是某个节点的next指向的是链表中在它之前的节点,这样在链表的尾部形成一环。问题:1、如何判断一个链表是不是这类链表?2、如果链表为存在环,如果找到环的入口点?解答:一、判断链表是否存在环,办法为:设置两个指针(fast, slow),初始值都指向头,slow每次前进一步,fast每次前进二步,如果链表存在环,则fast必定先进入环,而slow后进入环,两个指针转载 2008-10-17 10:25:00 · 936 阅读 · 1 评论 -
单链表逆置,逆序输出
逆置伪代码void invert(SNode **Head){ assert(Head); assert(*Head); SNode *p,*q,*r; p=*Head; q=p->next; while(q) { r=q->next; q->next=p; p=q;原创 2008-10-17 10:34:00 · 706 阅读 · 0 评论 -
各种排序方法的综合比较
各种排序方法的综合比较结论: 排序方法 平均时间 最坏时间 辅助存储 简单排序 O(n2) O(n2) O(1) 快速排序 O(nlogn) O(n2) O(logn) 堆排序 O(nlogn) O(nlogn) O(1) 归并排序 O(nlogn) O(nlogn) O(n) 基数排序 O(d(n+rd)) O(d(n+rd)) O(rd)另外:直接插转载 2008-12-20 22:47:00 · 865 阅读 · 0 评论