C语言任意输入两个集合A,B,计算A并B,A交B,A减B,A对称差B

邮箱596241679@qq.com谢谢了!!... 邮箱 596241679@qq.com 谢谢了!! 展开
 我来答
技术蚂蚁
2012-05-12 · TA获得超过146个赞
知道小有建树答主
回答量:268
采纳率:0%
帮助的人:163万
展开全部
j
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
陈阿水_真
2012-05-04 · TA获得超过1183个赞
知道小有建树答主
回答量:557
采纳率:0%
帮助的人:150万
展开全部
你这个是数集还是字符集,还是都有呢?
追问
任意键盘字符
追答
#include
#include
#define MAX 50
tgj(char *A)
{
int i,j,k;
for(i=0;A[i]!=NULL;i++)
{
for(j=i+1;A[j]!=NULL;j++)
{
if(A[i]==A[j])
{
k=j;
do
{
A[k]=A[k+1];
k++;
}while(A[k]!=NULL);
j--;
}
}
}
}
char *ua(char *A,char *B,char *C)
{
strcpy(C,A);
strcat(C,B);
tgj(C);
return C;
}
char *uq(char *A,char *B,char *C)
{
int i,j,k=0;
for(i=0;A[i]!=NULL;i++)
{
for(j=0;B[j]!=NULL;j++)
{
if(A[i]==B[j])
{
C[k]=A[i];
k++;
}
}
}
C[k]=NULL;
tgj(C);
return C;
}
char *udg(char *A,char *B,char *C)
{
int i,j,k=0,p;
for(i=0;A[i]!=NULL;i++)
{
p=0;
for(j=0;B[j]!=NULL;j++)
{
if(A[i]==B[j])
{
p=1;
}
}
if(p==0)
{
C[k]=A[i];
k++;
}
}
C[k]=NULL;
tgj(C);
return C;
}
char *d(char *A,char *B,char *C)
{
int i,j,k=0;
strcpy(C,A);
strcat(C,B);
for(i=0;C[i]!=NULL;i++)
{
for(j=i+1;C[j]!=NULL;j++)
{
if(C[i]==C[j])
{
k=j;
do
{
C[k]=C[k+1];
k++;
}while(C[k]!=NULL);
k=i;
do
{
C[k]=C[k+1];
k++;
}while(C[k]!=NULL);
}
}
}
tgj(C);
return C;
}
main()
{
unsigned char A[MAX],B[MAX],C[MAX*2];
printf("输入A,以回车结束\n");
gets(A);
tgj(A);
printf("输入B,以回车结束\n");
gets(B);
tgj(B);
printf("A并B为%s\n",ua(A,B,C));
printf("A减B为%s\n",udg(A,B,C));
printf("A交B为%s\n",uq(A,B,C));
printf("对称差为%s\n",d(A,B,C));
getchar();
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
zhouhaibing089
推荐于2016-04-24 · TA获得超过331个赞
知道答主
回答量:80
采纳率:0%
帮助的人:96.4万
展开全部
集合是一种比较重要的数据结构,比较正规的是先定义这个数据结构:
#ifndef SET_H_
#define SET_H_

typedef struct Set {
char elements[128];
} Set;

// 初始为空
void MakeEmpty(Set *set);
// 计算元素数目
int GetSize(Set *set);
// 是否包含某元素
int Contain(Set *set,char element);
// 添加元素
void AddElement(Set *set,char element);
// 删减元素
void DeleteElement(Set *set,char element);
// 并运算
Set Join(Set *A,Set *B);
// 交运算
Set Meet(Set *A,Set *B);
// 减法运算
Set Sub(Set *A,Set *B);
// 对称差运算
Set SymmetricalSub(Set *A,Set *B);

#endif
保存这个文件为Set.h
然后再在一个C文件中对其中的函数给以实现

// file : Set.c

#include "Set.h"
#include<stdio.h>

// 初始化为空 => Done
void MakeEmpty(Set *set){
int i;
for(i=0;i<128;i++){
(*set).elements[i]=0;
}
}

// 获得大小 => Done
int GetSize(Set *set){
int Size=0;
int i;
for(i=0;i<128;i++){
if((*set).elements[i]==0)
break;
else {
Size++;
}
}
return Size;
}

// 是否包含指定元素 => Done
int Contain(Set *set,char element){
int Contain=0;
int i;
int Size=GetSize(set);
for(i=0;i<Size;i++){
if((*set).elements[i]==element){
Contain=1;
break;
}
}
return Contain;
}

// 新加一个元素 => Done
void AddElement(Set *set,char element){
int Size=GetSize(set);
int exist=0;
int count;
for(count=0;count<Size;count++){
if((*set).elements[count]==element){
exist=1;
break;
}
}
if(!exist){
(*set).elements[Size]=element;
}
}

// 删除一个元素 =>Done
void DeleteElement(Set *set,char element){
int Size=GetSize(set);
int MarkPosition=-1;
int i;
for(i=0;i<Size;i++){
if((*set).elements[i]==element){
MarkPosition=i;
break;
}
}
if(MarkPosition>=0){
for(i=MarkPosition;i<Size-1;i++){
(*set).elements[i]=(*set).elements[i+1];
}
(*set).elements[Size-1]=0;
}
}

// 并运算 => Done
// 不得不承认,该算法是最差的算法
Set Join(Set *A,Set *B){
// 以A集合为基准集合,如果A中不含有B中某元素,就把B集合中的元素加入到A
Set set=*A;
int Size=GetSize(B);
int i;
for(i=0;i<Size;i++){
if(!Contain(A,(*B).elements[i])){
AddElement(&set,(*B).elements[i]);
}
}
// 在return的时候,set这段内存就已经被释放了
return set;
}

// 交运算 => Done
Set Meet(Set *A,Set *B){
Set set;
int SizeOfA=GetSize(A);
int i;
MakeEmpty(&set);
for(i=0;i<SizeOfA;i++){
if(Contain(B,(*A).elements[i])){
AddElement(&set,(*A).elements[i]);
}
}
return set;
}

// 差运算 A-B => Done
Set Sub(Set *A,Set *B){
Set set=*A;
int Size=GetSize(B);
int i;
for(i=0;i<Size;i++){
if(Contain(A,(*B).elements[i])){
DeleteElement(&set,(*B).elements[i]);
}
}
return set;
}

// 对称差运算 => Done
Set SymmetricalSub(Set *A,Set *B){
Set set1=Join(A,B);
Set set2=Meet(A,B);
Set set=Sub(&set1,&set2);
return set;
}
这个保存为Set.c
之后就可以编写你自己的程序了,我简单的写了一个:
#include<stdio.h>
#include "Set.h"

int main(){
Set A;
Set B;
Set C;
MakeEmpty(&A);
MakeEmpty(&B);
AddElement(&A,'A');
AddElement(&A,'C');
AddElement(&A,'D');
AddElement(&B,'B');
AddElement(&B,'C');
C=SymmetricalSub(&A,&B);

printf("Now , the size of C : %d \n", GetSize(&C));
}
希望能帮到您。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 3条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式