看第八章第二天,一个并不难的实现,我写到现在.呵呵.
主要说来,这个东西,就是表示出一些彼此不相交的集合,能够合并已知集合,能够确定某元素所在的集合.编程的代价较低.分析的问题比较让我头疼.
最近事情比较多,一件接着一件.虽然只有两件而已.总而言之,人要走正路.不要有杂念,有杂念是要有代价的.我所要做的,就是坚持学习计算机,早日摆脱这该死的工作.
虽然明早起来就不会这么豁达了,谁知道呢,这确实是锻炼,人不经事,不会成长.加油吧!
上代码,经过斟酌的代码呢.呵呵.
/* 数据类型定义 */
typedef int Item ;
typedef Item SetType ;
typedef SetType * DisjiontSet ;
/* 接口函数声明 */
/* 操作: 按高度初始化一个不相交集和 */
/* 操作前: gather 是一个不相交集合, size 是指示不相交集合的大小 */
/* 操作后: 除将第一个集合数据域设置为集合的实际大小外, 将所有集合数据域被初始化为HEIGHT */
void InitializeAsHeight (DisjiontSet gather, const int size) ;
/* 操作: 按大小初始化一个不相交集合 */
/* 操作前: gather 是一个不相交集合, size 指示不相交集合的大小 */
/* 操作后: 除将第一个集合数据域位置为集合的实际大小外, 所有集合数据域被初始化为SIZE */
void InitializeAsSize (DisjiontSet gather, const int size) ;
/* 操作: 按树的高度求并两个集合 */
/* 操作前: gather 是一个已初始化的不相交集合, root1, root2 是两个集合类型的变量 */
/* 操作后: 如果集合类型在 gather 中, 按高度求并 root1 集合和 root2 集合, 返回1; 否则返回0 */
int SetUnionAsHeight (DisjiontSet gather, SetType root1, SetType root2) ;
/* 操作: 按树的大小求并两个集合 */
/* 操作前: gather 是一个已初始化的不相交集合, root1, root2 是两个集合类型的变量 */
/* 操作后: 如果集合类型在 gather 中, 按大小求并 root1 集合和 root2 集合, 返回1; 否则返回0 */
int SetUnionAsSize (DisjiontSet gather, SetType root1, SetType root2) ;
/* 操作: 根据一个不相交集合和一个数据, 查找并返回该数据所在集合类型, 并进行路径压缩 */
/* 操作前: gather 是一个已初始化的不相交集合, item 是一个Item类型变量 */
/* 操作后: 如果 item 所在集合在 gather 中, 找到并返回 item 所在集合的类型, 并进行路径压缩; 否则返回 OOS */
SetType Find (DisjiontSet gather, const Item item) ;