摘要:
问题一:现在有10瓶药,合格的药每颗10克,但是有1瓶中的药不合格,每颗9克。问:称1次如何辨别哪瓶是不合格的? 答:将药瓶编号1,2,3...10,分别从中取1颗、2颗、3颗...10颗。共计55颗,用称称重,如果是正常的话,重量应为550克。如果比550克少1克,则是1号瓶不合格。如果少2... 阅读全文
摘要:
如果表够大,散列函数足够好,那么散列表在查找上具有O(1)的时间复杂度。但是我们考虑出现冲突的情况,如果使用分离链表法来处理冲突。那么链表的平均长度等于装填因子a(元素个数与散列表大小的比值)的大小。所以不成功查找的复杂度为a,成功查找的复杂度为1 + a/2。代码实现如下: 1 #include... 阅读全文
摘要:
重新实现了单链表,以指针而非哑节点的方式去指向第一个节点。代码如下: 1 /* 2 * 第二版链表实现 3 * 原先的实现,是以哑节点的方式来做链表的头部。 4 * 现在我们使用一个指针来做链表的头部,节约一个struct Node的空间 5 */ 6 7 #includ... 阅读全文
摘要:
尽管ISO C99使用了非常简单的并且具备移植性的样例描述了rand函数和srand函数的实现。但是在具体的C语言函数库的实现上,由于考虑到运行效率以及线程安全,代码就稍微多了一些。这里以glibc 2.18为例。在stdlib目录下,我们找到rand.c,内容如下:1 /* Return a ra... 阅读全文
摘要:
我们在编程实现算法的过程中,往往需要使用到随机数。由于计算机是一台以逻辑为基础的机器,没法做到真正的随机(大概量子计算机可以?)。所以计算机生成的是伪随机数,供我们使用。我们使用C语言的rand函数,生成的也是伪随机数。一个简单的示范如下: 1 #include 2 #include 3 #in... 阅读全文
摘要:
在C语言的头文件time.h中,定义了日期和时间操作的数据类型和操作。在此处,我们参考MinGW(Minimalist GNU for Windows)中的time.h。首先我们看看time.h所声明的数据类型: 1 typedef long clock_t; 2 3 typedef ... 阅读全文
摘要:
代码实现如下: 1 #include 2 #include 3 #include 4 5 #define MIN (1 left); 23 MakeEmpty(t->right); 24 free(t); 25 } 26 return... 阅读全文
摘要:
代码如下: 1 #include 2 #include 3 4 typedef int itemType; 5 typedef struct QueueRecord* queue; 6 7 /* 对于size大小的数组,如果没有额外的变量记录大小,而仅仅通过front和rear... 阅读全文
摘要:
队列的链表实现比数组实现要难一些。队列的链表实现比栈的链表实现也要难一些。代码如下: 1 #include 2 #include 3 4 typedef int itemType; 5 struct Node; 6 struct Queue; 7 typedef struct N... 阅读全文
摘要:
代码如下: 1 #include 2 #include 3 4 #define EMPTY_STACK (-1) 5 #define MIN_STACK_SIZE (3) 6 7 typedef int itemType; 8 struct Node; 9 typedef ... 阅读全文