- 博客(27)
- 资源 (2)
- 收藏
- 关注
原创 不相交集ADT实现文件C语言
<br /> 起初选择使用ADT的操作来实现分配存储空间.后来发现.这样做,问题很多,以至于分析了一会没有分析出什么结果.索性直奔问题了,我的思想是好的,我承认.<br /> 上代码.<br />/* DisjiontADT.c -- 不相交集合实现文件 */#include <stdio.h>#include <stdlib.h>#include "DisjiontADT.h"/* 接口函数定义 */void InitializeAsHeight (DisjiontSet
2010-11-30 23:29:00 1090
原创 不相交集ADT头文件C语言
看第八章第二天,一个并不难的实现,我写到现在.呵呵. 主要说来,这个东西,就是表示出一些彼此不相交的集合,能够合并已知集合,能够确定某元素所在的集合.编程的代价较低.分析的问题比较让我头疼. 最近事情比较多,一件接着一件.虽然只有两件而已.总而言之,人要走正路.不要有杂念,有杂念是要有代价的.我所要做的,就是坚持学习计算机,早日摆脱这该死的工作. 虽然明早起来就不会这么豁达了,谁知道呢,这确实是锻炼,人不经事,不会成长.加油吧! 上代码,经过斟酌的代码呢.呵呵./* 8-3-11-29-23.5
2010-11-30 23:27:00 1056
原创 7-40-11-27-23.10.c
<br /> 这个堆排序使用了新的下滤函数.对于运行时间的分析,暂时进行不了,回头计算下吧.哪怕是很粗略的依赖于时钟计时器.<br />/* 7-40-11-27-23.10.c -- 第七章第四十题 */#include <stdio.h>#define SIZE 20int main (void) ;void print_array (const int * const array, const int size) ;void swap (int * const vala, i
2010-11-28 00:20:00 736
原创 7-37-11-27-22.11.c
<br /> 合并两个文本文件,这个思想很不错,我很喜欢.<br />/* 7-37-11-27-22.11.c -- 第七章第三十七题 */#include <stdio.h>int main (void) ;int main (void){ FILE * fpa, * fpb, * fpc ; char cha, chb ; fpa = fopen ("a.txt", "r") ; fpb = fopen ("b.txt", "r") ; fpc = f
2010-11-27 22:39:00 1511
原创 3排序
这个是紧接着的下一道题.发现了,其实,随着数据种类多起来,分块也就多了,这也正是快速排序的来历吧.还有呢,就是,随着数据多起来,也就是枢纽元会重复的情况下,也就会出现array[i] == array[j] == array[pivot]的时候,那样我这段代码的主循环也就无法运行了.于是,在median3 () 函数中先要将两头排好序, 以便在主循环中安全地使用前缀自增运算符. 这本书里的练习题感觉不错,只是算法分析的题做着比较吃力,相信随着数学的学习,情况会好起来吧! 贴上代码,呵呵./* 7-3
2010-11-27 00:10:00 762
原创 2排序
就是数组中数据要么是这个, 要么是那个.不错的思想,貌似简单,其实不学不可能会. 我觉得写游戏的时候会派上用场.例如,两个帮派群P,之后分组.你说呢?呵呵./* 7-31-11-26-22.22.c -- 第七章第三十一题 */#include #define SIZE 21#define FALSE 0#define TRUE 2int main (void) ;void print_array (const int * const array, const int
2010-11-26 22:41:00 680
原创 寻找第k小的元素C语言
今早凌晨写出来了下,居然都来发表博客了.后来测试发现了问题,于是删了博客.决定今天下班回来重新搞.我的严谨,真的妥协不了. 问题的关键,在于我在代码中重点标记的部分.也就是,书中给的,真不知道他是怎么想的,还是我是怎么想的呢?传递来的k值是索引,所以是从0开始的,于是左面的界 ∈ [left, i), 右面的界 ∈ (i, right).中间的是i.这是一个主要的问题. 再一个,我尝试着自始自终用一个函数解决,于是遇到了一个问题.也就是,使用三数中值分割法时数组元素个数 == 2时.经过手工模拟,添
2010-11-24 21:15:00 1244
原创 快速排序C语言
就感觉,自己对这些个排序.至少,脑袋里还没有.哎,我老是不专心呢.加油吧. 说说快速排序吧.这东西,原理就是不断地将一个数组分成3部分.保持所有数组出在这种状态,最终完成排序. 这些思想,还没有掌握.加油吧,我还能说什么? 说些这个,呵呵. 这段代码,起初不懂.后来,随着不断手工模拟,发现,采用了很多技巧.也难怪起初根本理解不了.自己试着手工按照代码上的去做,再按照自己的想法做了下,就清晰多了.确实很多技巧. 现实中,需要排序解决的问题不少.可排序算法也不多,貌似记住一些就足以满足生产活动了.
2010-11-22 02:08:00 727
原创 归并排序非递归实现C语言
话说这个东西写到凌晨3点27分,都没有写好.刚才睡醒了写完的.主要遇到的问题就是当数组大小不是2的幂的时候发生的 right_end 越界的时候.我的逻辑起初偏于复杂,后来重新组织逻辑,当发生 right_end 越界的时候, 取 size - 1 为 right_end, 并且保持前一个数组完整, 后一个数组的大小不去顾及. 这样问题就解决了. 这貌似加深了我对归并排序的理解./* 7-14-11-21-00.21.c -- 第七章第十四题 */#include #include #in
2010-11-21 13:33:00 1630
原创 归并排序递归实现C语言
<br />/* 7-13-11-20-22.33.c -- 第七章第十三题 */#include <stdio.h>#include <stdlib.h>#define SIZE 8int main (void) ;void print_array (const int * const array, const int size) ;void merge_sort (int * const array, const int size) ;void merge_sort_
2010-11-20 23:11:00 1128
原创 堆排序C语言
/* 7-11-11-19-22.12.c -- 第七章第十一题 */#include #include #define LEFTCHILD(position) ((position) * 2 + 1) /* Notice the space */#define SIZE 12int main (void) ;void print_array (const int * const array, const int size) ;void heap_sort (int
2010-11-20 00:22:00 1058
原创 希尔排序C语言
/* 7-4-11-19-19.58.c -- 第七章第四题 */#include #include #define SIZE 9int main (void) ;void print_array (const int * array, const int size) ;void shell_sort (int * array, const int size) ;int main (void){ int array[SIZE] = {9, 8, 7, 6, 5
2010-11-19 20:31:00 643
原创 插入排序C语言
终于开始接触排序了.实现可以理解,复杂度的分析对我来说很难./* 7-1-11-19-00.01.c -- 第七章第一题 */#include #include #define SIZE 9typedef int Item ;int main (void) ;void insert_sort (Item * array, const int size) ;void print_array (const Item * const array, const int s
2010-11-19 00:20:00 642
原创 盒子树实现文件C语言
/* box.c -- 盒子问题实现文件 */#ifndef GENERIC#include "box.h"#endif/* 局部函数声明 */static Box * Make_Box (const Weight capacity) ;static Box * Find_Max (Box * box) ;static Box * Find_Min (Box * box) ;static int Insert_ (BoxTree * const pbt, const
2010-11-17 00:53:00 858
原创 盒子树头文件C语言
两天时间,白天看虚拟存储器,晚上到家写这个东西,刚刚写完.缺点不少,功能实现是必须的. 这个东西,是根据习题的要求写的,关于盒子问题,所以我给它取了个名字--盒子树.呵呵. 在写代码的过程中,我希望写完之后大肆庆祝下,.可写完之后,又觉得没什么...呵呵 对于这个东西,我解释下我的分析. 总体要求,就是要求有序.于是我选择了二叉搜索树,考虑过AVL树,后来觉得新东西,还是先简单地实现下. 之后,根据编写过程中的实际情况,一点一点写.做了许多模拟,这次伪代码先出来的.虽然后来被我模块化了. 很
2010-11-17 00:52:00 955
原创 二项队列实现文件C语言
/* binomial-queue.h -- 二项队列头文件 *//* 头文件加载放在头文件是个好主意 */#include #include #define INFINITY 32767/* 数据类型定义 */typedef int Item ; // 为什么我如此喜欢 int ^ ^typedef struct node{ Item item ; struct node * left ; // 左子树 struct node * nextsibli
2010-11-15 02:54:00 1380
原创 二项队列头文件C语言
/* binomial-queue.c -- 二项队列实现文件 */#include "binomial-queue.h"/* 局部函数声明 */static SubTree Combine_Trees (SubTree t1, SubTree t2) ;static Node * Make_Node (const Item item) ;static void Recursively (const SubTree t, void (* pfun) (const Item it
2010-11-15 02:54:00 1188 4
原创 斜堆实现文件C语言
这个斜堆没有XX检测.也正因为我不明白书上说的是什么意思,才没有写出来.不过,那似乎是个理论上100%可以避免的检测.或者,至少来说,一些事实验证了代码的正确性. 希望高手指正!/* skew-heap.c -- 斜堆实现文件 */#include #include #include "skew-heap.h"/* 局部ADT声明 *//* Item1定义为指针类型在释放原空间后会造成非法的存储器引用 *//* 得到的经验教训是: 指针还是要慎用.没有理由的时候不要滥用
2010-11-12 23:52:00 965 2
原创 斜堆头文件C语言
虽然今天距昨天只有一天, 我还是成长了好多.对于昨天不懂的问题,今天搞清楚了大半.总体来说,总结起来,...都写到代码里了.还要去看数学,就不多写了.呵呵.总之,明天会更好./* skew-heap.h -- 斜堆头文件 */#define INSERT(heap, item) (heap = Insert (heap, item))#define DELETEMIN(heap, pnode) (heap = DeleteMin (heap, pnode))#define BUILD(hea
2010-11-12 23:50:00 870
原创 左式堆(不完全操作)实现文件C语言
/* lefttist_heap.c -- 左式堆实现文件 */#include #include #include "lefttist_heap.h"/* 局部ADT定义 */typedef Node Item2 ;typedef struct node2{ Item2 item2 ; struct node2 * next ;} Node2 ;typedef struct queue{ Node2 * front ; Node2 * rea
2010-11-11 21:45:00 917
原创 左式堆(不完全操作)头文件C语言
一晃又好几天没有更新博客,很是郁闷啊.这个左式堆,不想继续写下去了,写得很吃力,于是先告一段落吧.毕竟学习数据结构不是一朝一夕的事情.今后会回头来看的.贴代码./* lefttist_heap.h -- 左式堆头文件 */#define INSERT(h, x) h = Insert (h, x) /* 宏和参数之间不能有空格 */#define DELETEMIN(h) (h = DeleteMin (h))/* 数据类型定义 */typedef int Item ;t
2010-11-11 21:26:00 1067
原创 d-堆实现文件C语言
/* d-heap.c -- d-堆实现文件 */#include #include #include "d-heap.h"/* 局部函数声明 */static int Percolate_Up (const Heap * const pheap, const Item item, const int position) ;static int Percolate_Down (const Heap * const pheap, const Item item, const i
2010-11-07 18:58:00 861 2
原创 d-堆头文件C语言
半天时间,写了个d-堆的实现.还不错.加深了对优先队列的理解.贴代码./* d-heap.h -- d-堆头文件 */#define MINDATA -32678/* 数据类型定义 */typedef int Item ;typedef struct heap{ Item * array ; int capacity ; int size ; int d ;} * Heap ;/* 接口函数声明 *//* 操作: 创建并初始化一个d-堆 *
2010-11-07 18:57:00 1057
原创 二叉堆--二叉堆实现文件C语言
/* binary_heap.c -- 二叉堆实现文件 */#include #include #include "binary_heap.h"/* 局部函数声明 *//* 返回 item 在 position 位置处上滤后应该出现堆中的位置索引 */static int Percolate_Up (const Heap * const pheap, const Item item, const int position) ;/* 返回 item 在 position 位
2010-11-05 19:11:00 1171
原创 二叉堆--二叉堆头文件C语言
/* binary_heap.h -- 二叉堆头文件 */#define MINDATA -32768/* 数据类型定义 */typedef int Item ;typedef struct heap{ Item * array ; int capacity ; /* 容量 */ int size ; /* 当前数据数量 */} * Heap ;/* 接口函数声明 *//* 操作: 创建并初始化一个二叉堆 *//* 操作前: phea
2010-11-05 18:49:00 1357
原创 可扩散列--可扩散列实现文件C语言
/* extendible_hashing.c -- 可扩散列实现文件 */#include #include #include "extendible_hashing.h"/* 局部函数声明 */static char pow_base_two (const int power) ;/* 接口函数定义 */int Hash (const Item * const pitem, const char constant){ return *pitem >>
2010-11-02 21:07:00 1526
原创 可扩散列--可扩散列头文件C语言
我真够郁闷,这么久没有更新博客.罪过,罪过... 写这个可扩散列,我写出来的这个完全是个模型,限制较多,局限性也很强,大概32:1.呵呵.不过,尽管如此,拿来练手或者之前没有写过这个东西的朋友看到的话,还是很有帮助的. 大概介绍下吧,不详谈了.本来想吹一顿的,无奈写到现在,感觉很垃圾.于是不好意思大吹特吹了. 数据类型,无符号8位整数.对255以上的数据无效,想弄成负数要做的改动并不多.无奈不想再多耽搁了. 支持,初始化,插入,查找,删除,遍历,清空.还算齐全的功能. 介绍到这里吧,主要是啊,
2010-11-02 21:06:00 1792
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人