码迷,mamicode.com
首页 > 其他好文 > 详细

19、 蛤蟆的数据结构笔记之十九链表实现等价类寻找

时间:2015-06-30 10:36:57      阅读:91      评论:0      收藏:0      [点我收藏+]

标签:

19、 蛤蟆的数据结构笔记之十九链表实现等价类寻找

         本篇名言:“人生有两出悲剧:一是万念俱灰,另一是踌躇满志。

         继续来看下通过链表存储实现等价类寻找。

  欢迎转载,转载请标明出处:

 

1.  等价类

等价类(Equivalenceclass)在数学中,给定一个集合 X 和在 X 上的一个等价关系 ~,则 X 中的一个元素 a 的等价类是在 X 中等价于 a 的所有元素构成的集合: a= { X ; X ~ a }

2.  实现

输入一个size,然后初始化out和seq数组。

然后输入数值对。

Seq[i]指向结点表,而结点表包含在输入关系中直接与i等价的每个数。

然后扫描数组seq寻找第一个使得out[i] = TRUE的i,其中0<=i<n 输出seq[i]中的每个元素。

   技术分享     

 

3.  源码

#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;

                            }

                   }

}

 

 

版权声明:本文为博主原创文章,未经博主允许不得转载。

19、 蛤蟆的数据结构笔记之十九链表实现等价类寻找

标签:

原文地址:http://blog.csdn.net/notbaron/article/details/46688595

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!