数据结构
文章平均质量分 83
Golden_Shadow
做一名优秀的游戏程序员
展开
-
3排序
这个是紧接着的下一道题.发现了,其实,随着数据种类多起来,分块也就多了,这也正是快速排序的来历吧.还有呢,就是,随着数据多起来,也就是枢纽元会重复的情况下,也就会出现array[i] == array[j] == array[pivot]的时候,那样我这段代码的主循环也就无法运行了.于是,在median3 () 函数中先要将两头排好序, 以便在主循环中安全地使用前缀自增运算符. 这本书里的练习题感觉不错,只是算法分析的题做着比较吃力,相信随着数学的学习,情况会好起来吧! 贴上代码,呵呵./* 7-3原创 2010-11-27 00:10:00 · 776 阅读 · 0 评论 -
不相交集ADT头文件C语言
看第八章第二天,一个并不难的实现,我写到现在.呵呵. 主要说来,这个东西,就是表示出一些彼此不相交的集合,能够合并已知集合,能够确定某元素所在的集合.编程的代价较低.分析的问题比较让我头疼. 最近事情比较多,一件接着一件.虽然只有两件而已.总而言之,人要走正路.不要有杂念,有杂念是要有代价的.我所要做的,就是坚持学习计算机,早日摆脱这该死的工作. 虽然明早起来就不会这么豁达了,谁知道呢,这确实是锻炼,人不经事,不会成长.加油吧! 上代码,经过斟酌的代码呢.呵呵./* 8-3-11-29-23.5原创 2010-11-30 23:27:00 · 1092 阅读 · 0 评论 -
不相交集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 · 1113 阅读 · 0 评论 -
partial path compression.偏路径压缩C语言
<br /> 不同于路径压缩,偏路径压缩使得访问路径上的节点整体向上移动.很好.<br />/* 8-14-12-03-00.30.c -- 第八章第十四题 */SetType Find (DisjiontSet gather, const Item item) ;SetType Find (DisjiontSet gather, const Item item){ Item temp, i, j ; if (gather[item] < 0) return item原创 2010-12-03 00:34:00 · 1078 阅读 · 3 评论 -
将图读进邻接表头文件C语言
/* adjacenty_list.h -- 邻接表头文件 */#include /* 数据类型定义 */typedef char Name ;typedef struct vertex{ Name name ; struct vertex * next ;} Vertex ;typedef struct adjacency_list{ Vertex * list ; int * indegree ; int capacity ;} * Adjac原创 2010-12-08 00:45:00 · 1218 阅读 · 0 评论 -
将图读进邻接表实现文件C语言
<br />/* adjacenty_list.c -- 邻接表实现文件 */#include <stdio.h>#include <stdlib.h>#include "adjacenty_list.h"/* 局部函数声明 */Vertex * Make_Vertex (const Name vertex) ;/* 接口函数定义 */int CreateAdjacent_List (Adjacent_List * const padj, const int ca原创 2010-12-08 00:46:00 · 1341 阅读 · 0 评论 -
栈头文件C语言
<br />/* Stack_ADT.h -- 栈模型头文件 *//* 数据类型定义 */typedef char Name ;typedef struct stack_node{ Name name ; struct stack_node * next ;} Stack_Node ;typedef Stack_Node * Stack ;/* 接口函数声明 *//* 操作: 初始化一个栈 *//* 操作前: pstack 指向一个栈 *//*原创 2010-12-08 01:01:00 · 6555 阅读 · 0 评论 -
栈实现文件C语言
<br />/* Stack_ADT.c -- 栈模型实现文件 */#include <stdio.h>#include <stdlib.h>#include "Stack_ADT.h"/* 局部函数声明 */ static Stack_Node * Make_Node (const Name * const panme) ;/* 接口函数定义 */int InitializeStack (Stack * const pstack){ *pstack =原创 2010-12-08 01:01:00 · 906 阅读 · 0 评论 -
拓扑排序C语言
<br /> 这个,主要体现的是思想.问题在一开始就被定义在了一道已知的习题上,所以并没有什么通用性.实现中,如果在栈中存储名字的同时存储索引,那么,将会省去很多次函数调用.而且,散列在我这个实现中也没有发挥作用,我会去实现的.<br /> 基本的思路,就是这样,理解得还算不错,哈哈.<br /> 可喜可贺的是,好几天没有写代码了.冷不丁一写,成功率出奇地高.和专心程度有关吗?加油吧.留给自己的时间不多了,每一天都要努力!<br />/* 9-3-12-07-20.06.c -- 第九章第三题 */原创 2010-12-08 01:17:00 · 1639 阅读 · 0 评论 -
单发点无权最短路径C语言
/* adjacenty_list.c -- 邻接表实现文件 */#include #include #include "adjacenty_list.h"/* 局部函数声明 */Vertex * Make_Vertex (const Name vertex) ;/* 接口函数定义 */int CreateAdjacent_List (Adjacent_List * const padj, const int capacity){ int lenth_li原创 2010-12-10 21:22:00 · 880 阅读 · 0 评论 -
配合Dijkstra算法的二叉堆头文件C语言
<br />/* binary_heap.h -- 二叉堆头文件 */#include "new_adjacenty_list.h"/* 数据类型定义 */typedef Vertex * Heap_Item ;typedef struct binary_heap{ Heap_Item * heap ; int capacity ; int current ;} * Binary_Heap ;/* 接口函数声明 *//* 操作: 创建并初始化一个二原创 2010-12-13 00:32:00 · 1004 阅读 · 0 评论 -
邻接表生成模型实现文件C语言
<br />/* new_adjacenty_list.c -- 邻接表实现文件 */#include <stdio.h>#include <stdlib.h>#include "new_adjacenty_list.h"/* 局部函数声明 */static Adjoin_To_Vertex * Make_Adjoin_To_Vertex (const Hash_Table * const pht, const Name name, const int cvw) ;/*原创 2010-12-13 00:34:00 · 914 阅读 · 0 评论 -
散列冲突次数测试C语言
用来模拟使用线性探测法散列,平方探测法散列,双散列发生冲突的次数. 可指定随机序列大小,可反复生成随机序列.可指定表的大小,并可更改表的大小.方便对各种长度随机数序列,各种大小的表进行模拟测试.实现思想就是用表的指定大小创建一个数组,并将所有元素初始化为0.进行模拟时,根据随机序列中的所有数值依次计算出在表中的索引,如果表中该索引的元素为0,将该元素置为OCCUPANCY,否则冲突计数器++,并尝试下一次模拟插入.重复此过程,之后返回冲突计数器的值,释放表的空间. 代码写的比较臃肿,模块性较好.有优原创 2010-10-23 14:42:00 · 1370 阅读 · 0 评论 -
两个多项式相乘后合并同类项并以指数从低到高顺序排序并打印C语言
说成难以置信,简直难以置信.因为我这种能力的人,居然还敢说难以置信.真的难以置信. 这个东西,写了大约6小时?我本想更快的,但结构却跟我想得相差甚多. 原本以为自己的指针使用得炉火纯青了,但这么说话确实显得没什么程度.我对内存不熟悉,怎么能深刻地理解指针呢?不过我还是不担心,因为我的书就快看到内存部分了,呵呵. 我想精简操作,并没有像写ADT那样写出那么多分工那么明确的函数,而是强调快速,高效.无论是对机器,还是对我. 我的思路,比较聪明吧.因为我目前还没学很多东西,呵呵.这算是对我自己的嘲笑吗原创 2010-10-24 20:59:00 · 3493 阅读 · 0 评论 -
单发点赋权最短路径C语言
<br /> 话说,这个东西我写了前前后后4天有余, 光今天就写了10小时.终于写完了.感触颇多啊.!<br /> 新的数据结构需要以前的数据结构结合使用,我沿着思路,进行设计,之后开始动笔,呵呵.开始写,就是.<br /> 从Hash表,到邻接表,再到二叉堆,磕磕绊绊,自己写得比较着急,结果我还没有那么熟练,无法快速完成.能够完成,我就已经很高兴了.呵呵.<br /> 很多概念,是随着写代码灵光起来的.写着写着,想起来书上原来有讲过,呵呵.<br /> 对于Hash表和二叉堆的理解,总是在渐渐深原创 2010-12-13 00:30:00 · 961 阅读 · 0 评论 -
配合Dijkstra算法的Hash表头文件C语言
<br />/* hash.h -- 哈希表头文件 */enum KindOfEntry {LEGITIMATE, EMPTY, DELETED} ;#define PRIME (7)#define FAILED (-2)#define NUL ('/0')#define FALSE (0)#define TRUE (1)/* 数据类型定义 */typedef char Name ;typedef struct cell{ Name name ;原创 2010-12-13 00:31:00 · 908 阅读 · 0 评论 -
配合Dijkstra算法的Hash表实现文件C语言
<br />/* hash.c -- 哈希表实现文件 */#include <stdio.h>#include <stdlib.h>#include "hash.h"/* 局部函数声明 */static int Get_A_Prime (const int number) ;static int Is_A_Prime (const int number) ;static int Square (const int i) ;/* 接口函数定义 */int H原创 2010-12-13 00:32:00 · 839 阅读 · 0 评论 -
配合Dijkstra算法的二叉堆实现文件C语言
<br />/* binary_heap.c -- 二叉堆实现文件 */#include <stdio.h>#include <stdlib.h>#include "binary_heap.h"/* 局部函数声明 */static int Percolate_Up (const Binary_Heap * const pbh, const int index) ;static int Percolate_Down (const Binary_Heap * const pbh,原创 2010-12-13 00:33:00 · 1263 阅读 · 0 评论 -
邻接表生成模型头文件C语言
<br />/* new_adjacenty_list.h -- 邻接表头文件 */#include <stdarg.h>#include "hash.h"#define INFINITY (~(1 << 31))#define NEGATIVEINFINITY (-INFINITY - 1)/* 数据类型定义 */typedef struct adjoin_to_vertex{ int hash_value ; int cvw ; struct adjo原创 2010-12-13 00:34:00 · 881 阅读 · 0 评论 -
一棵树流出的最大流问题C语言
<br /> 确定一棵树流出的最大流,即树叶可以流入的最大流量的和,也就是整棵树流出的流量.<br /> 树中每一个非叶节点的流出流量 = min (流入流量, 路径容量).<br /> 知道了这些,自然的方式使用递归,就可求解出该问题.<br /> 很遗憾,我是在看了答案之后才写出的这些.<br /><br />/* 9-12-12-15-15.53.c -- 第九章第十二题 *//* Pseudocode */FlowType FindMaxFlow (const Tree T, F原创 2010-12-15 16:23:00 · 973 阅读 · 0 评论 -
Dijkstra改进算法C语言
<br />/* 9-10(b)-12-13-20.26.c -- 第九章第十题(b) */#include <stdio.h>#include <stdlib.h>#include "binary_heap.h"int main (void) ;int new_dijkstra (const Adjacenty_List * padj, const Hash_Table * const pht, const int start) ;int main (void){原创 2010-12-13 22:20:00 · 1376 阅读 · 0 评论 -
配合Kruskal算法的二叉堆头文件C语言
<br />/* binary_heap_for_kruskal.h -- 二叉堆头文件 */#include "new_adjacenty_list.h"/* 数据类型定义 */typedef struct edge{ int v_hash_value ; int w_hash_value ; int weight ;} Edge ;typedef struct binary_heap{ Edge * heap ; int capacity ;原创 2010-12-19 23:18:00 · 865 阅读 · 0 评论 -
配合Kruskal算法的二叉堆实现文件C语言
<br />/* binary_heap_for_kruskal.c -- 二叉堆实现文件 */#include <stdio.h>#include <stdlib.h>#include "binary_heap_for_kruskal.h"/* 局部函数声明 */static int Percolate_Up (const Binary_Heap * const pbh, const int index) ;static int Percolate_Down (const原创 2010-12-19 23:19:00 · 743 阅读 · 0 评论 -
字谜游戏(a)C语言
下班到家,吃了口咸菜,之后看了会书,就去睡觉了,因为太困了.(T T...真辛苦.哈哈) 0:40几分醒来了,起来写代码了.. 写了个大概,一道习题的一部分,今天完成了,只不过还不够详细,今天下班回来给完善下.无奈啊,我要每天都写出点东西才安心,所以,这个不成熟的作品,也要贴出来.不过没关系,到今天晚上或者明天凌晨,我就改好了,呵呵. 这个的话,眼前通过了几个词汇量词典的测试.下班回来,重新定义一下表,完善下ADT,再模块化下,这样就放心了. 不多说,贴代码./* 5-13(a)-10-28-0原创 2010-10-28 04:23:00 · 1944 阅读 · 2 评论 -
最小生成树Prim算法C语言
<br /> 本来在写kruskal算法,觉得不要让自己太透支了,毕竟年轻的本钱很容易挥霍光掉.昨天我就没脱衣服睡了一夜.<br /> 还要5.30起来,而且一干就是一天呢.最近闹心工作的事,写了会代码,才感觉好多了.不然脑袋里老是这些,烦死了.<br /> 我在忍耐,一直在忍耐.就是为了,我的忍耐能够换来周围环境的默默"支持",也就是,没人制止我.<br /> 也许是我的忍耐不够,也许是我处事轻浮,总之,境况不好.无论如何,亲人我要顾及,自己也要顾及.实在到万不得已的时候,我还是会选择为了代码放弃原创 2010-12-19 01:36:00 · 1894 阅读 · 0 评论 -
最小生成树Kruskal算法C语言
<br />/* 9-18(b)-12-19-00.49.c -- 第九章第十八题 */#include <stdio.h>#include <stdlib.h>#include "binary_heap_for_kruskal.h"#include "disjiont_set.h"#define SIZE (10)int main (void) ;void kruskal (const Adjacenty_List * const padj, const Hash_Ta原创 2010-12-19 23:14:00 · 2384 阅读 · 0 评论 -
配合Kruskal算法不相交集合头文件C语言
<br />/* disjiont_set.h -- 不相交集合ADT头文件 */#define HEIGHT (0)#define OOS (1 << 31)/* 数据类型定义 */typedef int SetItem ;typedef SetItem SetType ;typedef SetItem * Disjiont ;/* 接口函数声明 *//* 操作: 按高度创建并初始化一个不相交集合 *//* 操作前: d 是一个不相交集合变量, ca原创 2010-12-19 23:20:00 · 860 阅读 · 1 评论 -
配合Kruskal算法不相交集合实现文件C语言
<br />/* disjiont_set.c -- 不相交集合实现文件 */#include <stdio.h>#include <stdlib.h>#include "disjiont_set.h"/* 接口函数定义 */int Initialize_D (Disjiont d, const int capacity){ int i ; if (capacity <= 0) return 0 ; d[0] = capacity ; for (i原创 2010-12-19 23:20:00 · 888 阅读 · 0 评论 -
无向图割点搜索C语言
<br /> 这个用来找到一个无向图中的所有割点,实现方式从简,例程正确.<br /> 这个算法,对有向图是行不通的.<br /> 通过一次深度优先搜索计算number[], 而后一趟后序遍历计算low[]来实现.<br /> 说真的,我是基本不懂.代码还是写出来了,有点印象,日后好也有个参考.<br />/* 9-21-12-23-08.55.c -- 第九章第二十一题 */#include <stdio.h>#include "new_adjacenty_list.h"#defi原创 2010-12-23 10:17:00 · 1154 阅读 · 0 评论 -
字谜游戏(b)C语言
这个版本出炉比较快,还yeah乎着呢,呵呵. 思想,就是,记录下单词的所有前缀,这样可以减少扫描次数. 我的实现方式,新建一个文件存放所有单词的所有前缀,之后同单词一起装进表中.添加一个指示域来指示表中的字符串是单词还是前缀.之后在主循环中先进行单词判断,而后进行前缀判断.如果当前的字符串不是单词并且也未作为前缀出现在表中,那么就跳出当前方向的循环./* 5-13(b)-10-28-21.17.c -- 第五章第十三题 */#include #include #include #原创 2010-10-28 22:07:00 · 2621 阅读 · 0 评论 -
最大生成树算法C语言
<br /> 只是将算法的主例程边的权值改为异号的,即可完成这个算法.我的初衷是将最小堆改成最大堆.但事实证明,这是行不通的.贴代码.<br />/* 9-20-12-22-11.16.c -- 第九章第二十题 */#include <stdio.h>#include <stdlib.h>#include "binary_heap_for_kruskal.h"#include "disjiont_set.h"#define SIZE (10)int main (void)原创 2010-12-22 11:25:00 · 2171 阅读 · 0 评论 -
可扩散列--可扩散列头文件C语言
我真够郁闷,这么久没有更新博客.罪过,罪过... 写这个可扩散列,我写出来的这个完全是个模型,限制较多,局限性也很强,大概32:1.呵呵.不过,尽管如此,拿来练手或者之前没有写过这个东西的朋友看到的话,还是很有帮助的. 大概介绍下吧,不详谈了.本来想吹一顿的,无奈写到现在,感觉很垃圾.于是不好意思大吹特吹了. 数据类型,无符号8位整数.对255以上的数据无效,想弄成负数要做的改动并不多.无奈不想再多耽搁了. 支持,初始化,插入,查找,删除,遍历,清空.还算齐全的功能. 介绍到这里吧,主要是啊,原创 2010-11-02 21:06:00 · 1831 阅读 · 0 评论 -
可扩散列--可扩散列实现文件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 · 1559 阅读 · 0 评论 -
链表实现文件C语言
<br />/* linked_list.c -- 链表实现文件 */#include <stdio.h>#include <stdlib.h>#include "linked_list.h"/* 局部函数声明 */static Linked_List_Node * Make_Node (const Linked_List_Item li1, const Linked_List_Item li2) ;/* 接口函数定义 */int Initialize_L (Li原创 2010-12-25 15:17:00 · 1738 阅读 · 0 评论 -
栈数组实现头文件C语言
<br /> 数组的栈,好久没有写了.这次的写,加深了理解,更加深刻地体会到例程中的技巧与实用.<br />/* stack.h -- 栈头文件 */#define EMPTY_TOP (-1)/* 数据类型定义 */typedef int Stack_Item ;typedef struct stack{ Stack_Item * array ; int capacity ; int top ;} * Stack ;/* 接口函数声明 */原创 2010-12-25 15:20:00 · 2268 阅读 · 0 评论 -
反转一个邻接表C语言
<br /> 反转一个邻接表,没有考虑权值.是为另一个例程服务的一个函数.贴出来吧.<br />int Reverse_A (Adjacenty_List * const padj, const Hash_Table * const pht){ Name name ; Adjoin_To_Vertex * scan, * new_vertex, * temp_1, * * temp_2 ; int w, i, capacity = (*padj) -> capacity ; for原创 2010-12-24 19:58:00 · 814 阅读 · 0 评论 -
寻找强连通分支C语言
<br /> 这东西,写了8小时.比较慢了.实现是一步一步地完成的.方法概述如下:<br /> 1.对原图进行一次深度优先搜索,以后序对各顶点标号.<br /> 2.将原图反转.<br /> 3.在新图中,按照顶点标号从大到小的顺序对所有顶点逐个检查,并进行深度优先搜索.每一次调用深度优先搜索之后,下次调用时到调用结束阶段,声场的深度优先搜索树中的所有节点是强联通的.<br /> 这个的原理书上说得我看不懂.我理解就是,新图中能够访问到的,在原图中以反向也能够访问到.于是所构成的集合是强连通的.至原创 2010-12-24 20:10:00 · 1127 阅读 · 0 评论 -
链表头文件C语言
<br /> 因为眼前有个例程要使用链表,索性写了一个链表,纯洁的链表其实写得很少.写了一次,感觉又是受益匪浅.<br />/* linked_list.h -- 链表头文件 *//* 数据类型定义 */typedef int Linked_List_Item ;typedef struct linked_list_node{ Linked_List_Item v ; Linked_List_Item w ; struct linked_list_node * next原创 2010-12-25 15:17:00 · 6257 阅读 · 0 评论 -
栈数组实现实现文件C语言
<br />/* stack.c -- 栈实现文件 */#include <stdio.h>#include <stdlib.h>#include "stack.h"/* 接口函数定义 */int Initialize_S (Stack * const pstack, const int capacity){ if (capacity <= 0) return 0 ; *pstack = (struct stack *) malloc (sizeof (stru原创 2010-12-25 15:24:00 · 944 阅读 · 0 评论 -
寻找双连通分支C语言
<br /> 话说这个东西,写了不下12小时.我坚持写完了,并且写对了.我很高兴.<br /> 通过写这个东西,加强了对寻找割点问题的认识,从而认识,并明白了寻找双连通分支的过程.<br /> 我想要说明的是,深度优先搜索,深度优先.从 (v, w) 开始的深度优先搜索, 在回到调用 (v, w) 的那次调用之前, (w, v) 已经被处理过.这保证一条边不会入栈两次.同时, 也同时可以避免已被作为背向边处理的 (v, w) 入栈.这都是通过 if (!Find_L (pli, w, index))原创 2010-12-27 01:02:00 · 1390 阅读 · 0 评论