标签:
19、 蛤蟆的数据结构笔记之十九链表实现等价类寻找
本篇名言:“人生有两出悲剧:一是万念俱灰,另一是踌躇满志。”
继续来看下通过链表存储实现等价类寻找。
欢迎转载,转载请标明出处:
等价类(Equivalenceclass)在数学中,给定一个集合 X 和在 X 上的一个等价关系 ~,则 X 中的一个元素 a 的等价类是在 X 中等价于 a 的所有元素构成的集合: a= { X ; X ~ a }
输入一个size,然后初始化out和seq数组。
然后输入数值对。
Seq[i]指向结点表,而结点表包含在输入关系中直接与i等价的每个数。
然后扫描数组seq寻找第一个使得out[i] = TRUE的i,其中0<=i<n 输出seq[i]中的每个元素。
#include <stdio.h>
#include <atlalloc.h>
#define MAX_SIZE24
#define IS_FULL(ptr)(!(ptr))
#define FALSE 0
#define TRUE 1
typedef struct node *node_pointer;
typedef struct node {
intdata;
node_pointerlink;
};
void main(void)
{
short intout[MAX_SIZE];
node_pointerseq[MAX_SIZE];
node_pointerx,y,top;
inti,j,n;
printf("Enterthe size (<=%d) ",MAX_SIZE);
scanf("%d",&n);
for(i = 0;i<n;i++) {
out[i]= TRUE;
seq[i]= NULL;
}
printf("Entera pair of numbers (-1 -1 to quit):");
scanf("%d%d",&i,&j);
while(i>=0)
{
x= (node_pointer)malloc(sizeof(node));
if(IS_FULL(x)){
fprintf(stderr,"Thememory is full\n");
exit(1);
}
x->data= j;
x->link= seq[i];
seq[i]= x;
x= (node_pointer)malloc(sizeof(node));
if(IS_FULL(x)){
fprintf(stderr,"Thememory is full\n");
exit(1);
}
x->data= i;
x->link=seq[j];
seq[j]=x;
printf("Entera pair of numbers (-1 -1 to quit):");
scanf("%d%d",&i,&j);
}
for (i = 0;i < n;i++)
if(out[i]){
printf("\nNew Class:%5d",i);
out[i]= FALSE;
x= seq[i];
top= NULL;
for (;;){
while(x){
j= x->data;
if(out[j] ) {
printf("%5d",j);
y= x->link;
x->link=top;
top=x;
x= y;
}
else x= x->link;
}
if(!top)break;
x= seq[top->data];
top= top->link;
}
}
}
版权声明:本文为博主原创文章,未经博主允许不得转载。
标签:
原文地址:http://blog.csdn.net/notbaron/article/details/46688595