set.rar

  • PUDN用户
    了解作者
  • Visual C++
    开发工具
  • 1KB
    文件大小
  • rar
    文件格式
  • 0
    收藏次数
  • 1 积分
    下载积分
  • 2
    下载次数
  • 2013-10-18 17:42
    上传日期
集合运算器,   要求实现集合的并、交、差、补、对称差和环积。
set.rar
  • set.cpp
    4.2KB
内容介绍
#include<stdio.h> #include<stdlib.h> #include<malloc.h> #define error 0 #define ok 1 #define LISTSIZE 100 #define increasement 10 typedef struct { char *elem; int length; int listsize; }sqlist; int initlist(sqlist &l) //初始化集合 { l.elem = (char *)malloc(LISTSIZE * sizeof(char)); if(!l.elem) exit(error); l.length=0; l.listsize=LISTSIZE; return ok; } int buildlist(sqlist &l) //建立一个集合,元素由用户输入 { char *newbase; int i; printf("请输入表长\n"); scanf("%d",&i); l.length=i; printf("请输入元素\n"); if(l.length>=l.listsize) //合法性检查 { newbase=(char *)realloc(l.elem,(l.listsize+increasement)*sizeof(char)); if(!newbase) exit(error); l.elem =newbase; l.listsize=l.listsize+increasement; } getchar(); for(i=1;i<=l.length;i++) { scanf("%c",&l.elem[i]); } return ok; } sqlist deleteelem(sqlist, char); void format(sqlist &l) //格式化一个集合,将用户创建的表中的重复元素删除 { int i,j; for(i=1;i<=l.length-1;i++) for(j=i+1;j<=l.length;j++) if(l.elem[i]==l.elem[j]) l=deleteelem(l,l.elem[j]); }//format void display(sqlist l) //显示集合中的元素 { int i; for(i=1;i<=l.length;i++) { if(i%8==0)printf("\n"); printf("a[%d]=%c ",i,l.elem[i]); } printf("\n"); } int judge(sqlist l,char x) //判断元素x是否在集合l中,若是返回位置,若不是则返回-1 { int i; int flag =-1; for(i=1;i<=l.length;i++) { if(x==l.elem[i]) { flag=i;break; } } return flag; } sqlist addelem(sqlist l,char x) //将x添加到集合l中 { char *newbase; if(l.length>=l.listsize) { newbase=(char *)realloc(l.elem,(l.listsize+increasement)*sizeof(char)); if(!newbase) exit(error); l.elem =newbase; l.listsize=l.listsize+increasement; } if(judge(l,x)==-1) { l.length++; l.elem[l.length]=x; } return l; } sqlist deleteelem(sqlist l, char x) //删除l中等于x的元素 { int i; if(judge(l,x)!=-1) { for(i=judge(l,x);i<=(l.length-1);i++) l.elem[i]=l.elem[i+1]; l.length--; } return l; } sqlist cross(sqlist l1,sqlist l2) //求l1与l2的交集 { sqlist l; initlist(l); int i; for(i=1;i<=l2.length;i++) { if(judge(l1,l2.elem[i])!=-1) l=addelem(l,l2.elem[i]); } return l; } sqlist unin(sqlist l1,sqlist l2) //求两个集合的并集合 { int i; sqlist l; initlist(l); l=l1; for(i=1;i<=l2.length;i++) if(judge(l1,l2.elem[i])==-1) l=addelem(l,l2.elem[i]); return l; } sqlist sub(sqlist l1,sqlist l2) //求l1对l2的差集 { int i;sqlist l;char *newbase; initlist(l); l.length=l1.length; while(l.length>l.listsize) { newbase=(char *)realloc(l.elem,(l.listsize+increasement)*sizeof(char)); if(!newbase) exit(error); l.elem =newbase; l.listsize=l.listsize+increasement; } for(i=1;i<=l1.length;i++) l.elem[i]=l1.elem[i]; for(i=1;i<=l2.length;i++) if(judge(l,l2.elem[i])!=-1) l=deleteelem(l,l2.elem[i]); return l; } int main() //主程序 { int i; char c; printf("******************集合运算器**********************\n"); sqlist l1;sqlist l2;sqlist l; initlist(l);initlist(l1);initlist(l2); buildlist(l1);buildlist(l2); format(l1);format(l2); sqlist l3,l4; display(l1);display(l2); printf("\n"); sqlist U;initlist(U); for(i=0;i<=127;i++) { c=i; U=addelem(U,c); } display(U); printf("输出交集\n"); l=cross(l1,l2); display(l); printf("\n"); printf("输出并集\n"); l=unin(l1,l2); display(l); printf("\n"); printf("输出差集\n"); l=sub(l1,l2); display(l); printf("\n"); printf("输出l1的补集合\n"); l=sub(U,l); display(l); printf("\n"); printf("输出对称差\n"); l3=unin(l1,l2); l4=cross(l1,l2); l=sub(l3,l4); display(l); printf("输出环积\n"); l=sub(U,l); display(l); printf("***********************谢谢使用*****************\n"); return 0; }
评论
    相关推荐