摘要: 本章为基本数据结构的一些操作,很基础,当然也很重要。数据结构必须是泛型的,但是C对于泛型的支持只有通过void*强制转换,而且这也不是万能的,比较好的书籍可以参看《C interfaces and implementions》,当然这方面的代码是很成熟的。ADT在C中的实现大致通过三种方式:静态数组、动态数组和链表。如果不使用指针,那么必须用宏来实现Stack_Type的泛型,push,pop和top的操作数类型都和Stack_Type关联。静态数组的stack实现就是简单的:#define Stack_Type int#define Stack_Size 2048//static array 阅读全文
posted @ 2012-09-03 16:02 生无所息 阅读(175) 评论(0) 推荐(0) 编辑
摘要: 1 #include 2 #include 3 #include 4 void swap(int* A,int i,int j) 5 { 6 int temp=A[i]; 7 A[i]=A[j]; 8 A[j]=temp; 9 }10 int partition(in... 阅读全文
posted @ 2012-08-31 10:58 生无所息 阅读(224) 评论(0) 推荐(0) 编辑
摘要: 计数排序C代码如下,显然这货是不能用于字符串排序的(非比较排序只有基数排序可以用来排序字符串):#include <stdio.h>#include <malloc.h>#include <assert.h>#include <stdlib.h>#define MAX 100 //取值范围k=99,为了保持main形式上的一致性,这里用了宏void counting_sort(int* A,int p,int r){ int* C=(int *)calloc(MAX,sizeof(int)); int* B=(int *)malloc(r*siz 阅读全文
posted @ 2012-08-30 11:26 生无所息 阅读(243) 评论(0) 推荐(0) 编辑
摘要: 快速排序相关C代码: 1 #include <stdio.h> 2 #include <stdlib.h> 3 #include <time.h> 4 void swap(int* A,int i,int j) 5 { 6 int temp=A[i]; 7 A[i]=A[j]; 8 A[j]=temp; 9 }10 int Partition(int* A,int p,int r)11 {12 int x=A[r-1];13 int i=p-1,j=p;14 for(;j<r-1;++j) {15 if(A[j]<=x)16 ... 阅读全文
posted @ 2012-08-27 11:34 生无所息 阅读(180) 评论(0) 推荐(0) 编辑
摘要: 1 /*-----------Heap-Sort implemented in C------------------*/ 2 3 #include <stdio.h> 4 #include <stdlib.h> 5 6 inline int left(int i) 7 { 8 //C语言中下标从0开始 9 return (i<<1)+1;10 }11 inline int right(int i)12 {13 return (i<<1)+2;14 }15 inline int parent(int i)16 {17 return (i-1)&g 阅读全文
posted @ 2012-08-23 22:54 生无所息 阅读(194) 评论(0) 推荐(0) 编辑
摘要: 这部分主要学习概率分析。在概率论的教程里面其实已经学过这些了…附录C的第一部分是排列组合的基础知识;第二部分是经典概率论;第三部分是离散随机分布的一些概念(期望、方差);第四部分介绍了两个常见的离散分布:几何分布和二项分布;最后一部分是可选内容,介绍了二项分布的尾相关的上下界。第五章主要介绍了随机算法的写法,特别强调了均匀随机的概念,引入随机变量指示器作为一个计算期望的技巧。内容小结:计数:略概率:贝叶斯公式: \[Pr\{A | B\}=\dfrac{Pr\{A\}Pr\{B|A\}}{Pr\{B\}}\] 全概率公式:Pr{B}=Pr{B|A1}+Pr{B|A2}+...+Pr{B|... 阅读全文
posted @ 2012-08-21 11:14 生无所息 阅读(289) 评论(0) 推荐(0) 编辑
摘要: 常用符号:$\Theta$表示渐近确界,O表示渐近上界,$\Omega$表示渐近下界;o表示非渐近上界,$\omega$表示非渐近下界。 下取整:$\lfloor\quad\rfloor$,上取整$\lceil\quad\rceil$ 取模运算:a mod n = a - $\lfloor a/n \rfloor$*n几个结论:$n^b=o(a^n)$(a>1),任何底大于1的指数函数比任何多项式函数增长的更快; $lg^bn=0(n^a)$(a>0),任意正的多项式函数都比多项式对数函数增长的快; 阶乘n!=$o(n^n)$,n!=$\omega(2^n... 阅读全文
posted @ 2012-08-18 19:05 生无所息 阅读(370) 评论(0) 推荐(0) 编辑
摘要: 凛冬将至。——《冰与火之歌》————————————————————————————插入排序、合并排序: 1 #include <stdio.h> 2 #include <stdlib.h> 3 #include <malloc.h> 4 #include <string.h> 5 void insertion_sort(int* array,int p,int q) 6 { 7 int j=p+1,i; 8 for(;j<q;++j){ 9 int key=array[j];10 for(i=j-1;i>=0;--i){11 ... 阅读全文
posted @ 2012-08-15 16:45 生无所息 阅读(295) 评论(0) 推荐(0) 编辑
摘要: 《learn you a Haskell》这书的结构与常见的语言入门教材完全不一样。事实上,即使学到第八章,你还是写不出正常的程序…因为到现在为止还没告诉你入口点模块怎么写,IO部分也留在了最后几章才介绍。最重要的是,没有系统的总结数据类型、操作符、语句,这些知识被零散的介绍在1-8章的例子中,换句话来说,这书其实不算是很合格的教材(代码大全那种结构才更适合),不过它重点强调了FP与其他语言的思想... 阅读全文
posted @ 2012-08-02 22:06 生无所息 阅读(12538) 评论(0) 推荐(0) 编辑
摘要: …高阶函数map :: (a->b) ->[a] ->[b],将函数f依次应用于序列[a],得到新的序列[b]。filter :: (a->bool)->[a]->[a],利用函数f过滤序列[a]。这两个函数都可用list comprehension来实现,不过在某些情况下更简洁。利用这两个函数和CF组合可以生成各种需要的函数。lambda著名的lambda表达式(C++11中引入),也就是匿名函... 阅读全文
posted @ 2012-07-22 19:54 生无所息 阅读(9624) 评论(0) 推荐(0) 编辑