當前位置:首頁 » 編程語言 » c語言集合運算

c語言集合運算

發布時間: 2022-10-21 11:31:41

c語言 集合運算

Deletetable函數有兩個地方把pcollelm寫成了collelm
Addition函數體第4行沒加分號
Addition函數中3次調用AppendToTable時都寫了3個參數,但AppendToTable只聲明了2個參數
Multiply的返回類型寫了collelm,應該是pcollelm
Multiply的函數參數是x,y,但函數體裡面寫的是a,b
Multiply里調用AppendToTable時,p的前面不用寫類型
main的第3行,p=collp;改成p=&collp;
main裡面case 2調用Deletetable時,第一個參數是Collelm類型的colla,但Deletetable對應的參數類型是Collelm *

❷ C語言編程 集合運算演示系統 代碼

尚缺存、取文件部分,其他部分都有,如交、並、差運算,排序等,需要的話,請追問。

❸ 數據結構 用c語言寫的 集合的並、交和差運算的程序

可以用二個一維數組,
再用兩個for循環來判斷結果:交,並,差
在for循環中,用一個if來判斷一下,是不是a[0]==b[j],只要有相等的,就令之放在c[0]
這就是交集!!

並集就好求吧,
只要令c[i]=a[i],再來一個就是c[i+j+1]=b[j](因為我這里是考慮j=0開始的,然後自加差就是在交上改動一下就可以了,只要是a[0]!=b[j],就把它放到c[]這個數組裡面去~!!!!

1:並集的程序。

求集合LA和集合LB的並集

#define NULL 0

struct JD
{ int data;
struct JD *next;
};

int find(int number,struct JD *h)
{ while(h->data)
{ if(h->data!=number)
{ h=h->next;
continue;
}
else
return 0;
}
return 1;
}

struct JD * make()
{ struct JD *h=NULL,*p=NULL;
int number,tf;
h=(struct JD *)malloc(sizeof(struct JD));
scanf("%d",&h->data);
p=h;
while(p->data)
{ p->next=(struct JD *)malloc(sizeof(struct JD));
p=p->next;
p->data=0;
scanf("%d",&number);
tf=find(number,h);
if(tf)
p->data=number;
else
continue;
}
return h;
}

void print(struct JD *h)
{ while(h->data)
{ printf("%d ",h->data);
h=h->next;
}
}

struct JD * change(struct JD *la,struct JD *lb)
{ struct JD *h,*p,*s,*q;
int number,tf;
p=lb;
while(p->data)
{ number=p->data;
tf=find(number,la);
p=p->next;
if(tf)
{ s=(struct JD *)malloc(sizeof(struct JD));
s->data=number;
s->next=la;
la=s;
}
else
continue;
}
return la;
}

void del(struct JD *h)
{ struct JD *p=h->next;
while(h->data)
{ free(h);
h=p;
p=p->next;
}
free(h);
}

main()
{ struct JD *la,*lb;
printf("\n\nGive the number to LA :\n\n");
la=make();
printf("\nLA is: ");
print(la);
printf("\n\nGive the number to LB :\n\n");
lb=make();
printf("\nLB is: ");
print(lb);
la=change(la,lb);
printf("\n\n\nThe new LA=LA||LB is: ");
print(la);
del(la);
del(lb);
printf("\n\n\nPass any key to exit...!\n");
getch();
}

********** 程序運行結果 **********
Give the number to LA :
1↓
2↓
3↓
5↓
0↓

LA is: 1 2 3 5

Give the number to LB :

6↓
7↓
3↓
2↓
9↓
0↓

LB is: 6 7 3 2 9

The new LA=LA||LB is: 9 7 6 1 2 3 5

--------------------------------------------------
Pass any key to exit...!

❹ 如何用C語言做出「完成集合運算的並集,交集,補集」

可以手寫平衡樹,來完成c++ stl中的set功能,即可實現幾何的交並補運算~

❺ c語言 集合的差,交,並,笛卡爾積的運算。例如A={2,3,4,5,6,7,8}B={2,3,4,5,11,25}

交:C={2,3,4,5} 就是既屬於A的又屬於B的那部分
並:C = {2,3,4,5,6,7,8,11,25} 兩個集合的整合去掉重復的。A+B-AB(AB:公共部分)
差:C= {6,7,8}就是屬於A但是不屬於B的那部分
笛卡爾乘積:這個得出的集合就多了:舉個例子。。假設集合A={a,b},集合B={c,d}則兩個集合的笛卡爾積為{(a,c),(a,d),(b,c),(b,d)}

❻ C語言求集合運算

可以用線性表模擬集合,把兩個線性表中一樣的數提取出來就是交集,所有元素組成的就是並集,還可以用C++重載運算符實現+就求並集之類的。

❼ 編寫程序,實現兩個集合的交運算(用C語言)

#include<stdio.h>
#include<string.h>
intjiaoji(intA[],intB[],inta,intb)
{
inti,j,t;
t=a;
for(i=0;i<a;i++)
for(j=0;j<b;j++)
{
if(A[i]==B[j])
{
A[t]=B[j];
t++;
}
}
for(i=0;i<t-a;i++)
{
A[i]=A[a+i];
}
returnt-a;
}
intmain()
{
intA[50],B[50],a,b,t;
printf("請輸入A的元素個數: ");
scanf("%d",&a);
printf("請輸入A的元素: ");
for(inti=0;i<a;i++)
scanf("%d",&A[i]);
printf("請輸入B的元素個數: ");
scanf("%d",&b);
printf("請輸入B的元素: ");
for(inti=0;i<b;i++)
scanf("%d",&B[i]);
t=jiaoji(A,B,a,b);
for(inti=0;i<t;i++)
printf("%d",A[i]);
return0;
}

❽ 檢索:集合運算 C語言

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
typedefstructset
{
int*array;
intlen;
}Set;

Set*new_set(intlen)
{
Set*s=(Set*)malloc(sizeof(structset));
s->len=len;
s->array=(int*)malloc(sizeof(int)*len);
memset(s->array,0,sizeof(int)*len);
returns;
}
voiddelete_set(Set**s)
{
free((*s)->array);
free(*s);
*s=NULL;
}

intis_belong_to_set(Set*a,intn)
{
inti;
for(i=0;i<a->len;i++)
{
if(n==a->array[i])
return1;
}
return0;
}

Set*set_diff(Set*a,Set*b)
{
inti=0,clen=0;
Set*c=new_set(a->len);
c->len=clen;
for(i=0;i<a->len;i++)
{
if(!is_belong_to_set(b,a->array[i]))
{
c->array[clen]=a->array[i];
clen++;
c->len=clen;
}
}
returnc;
}

Set*set_union(Set*a,Set*b)
{
inti,clen=0;
Set*c=new_set(a->len+b->len);
c->len=clen;
for(i=0;i<a->len||i<b->len;i++)
{
if(i<a->len)
if(!is_belong_to_set(c,a->array[i]))
{
c->array[clen]=a->array[i];
clen++;
c->len=clen;
}
if(i<b->len)
if(!is_belong_to_set(c,b->array[i]))
{
c->array[clen]=b->array[i];
clen++;
c->len=clen;
}
}
returnc;
}

voidsort(Set*a)
{
inti,j;
for(i=0;i<a->len;i++)
for(j=i+1;j<a->len;j++)
if(a->array[i]>a->array[j])
{
intt=a->array[i];
a->array[i]=a->array[j];
a->array[j]=t;
}
}

intmain()
{
intalen=0,blen=0,i;
Set*a,*b,*c;
scanf("%d",&alen);
a=new_set(alen);
for(i=0;i<alen;i++)
scanf("%d",&a->array[i]);
scanf("%d",&blen);
b=new_set(blen);
for(i=0;i<blen;i++)
scanf("%d",&b->array[i]);
Set*s1=set_diff(a,b);
Set*s2=set_diff(b,a);
c=set_union(s1,s2);
sort(c);
for(i=0;i<c->len;i++)
printf("%d",c->array[i]);
printf(" ");
delete_set(&a);
delete_set(&b);
delete_set(&c);
delete_set(&s1);
delete_set(&s2);
}

❾ 單鏈表表示的集合交,並,差運算,設計採用定義集合,用集合運算表達式求值的方式進行。C語言實現。

#include<stdio.h>
#include<stdlib.h>
typedef
struct
LNode//
定義結構體類型指針
{
char
data;
struct
LNode*next;
}*pointer;
void
readdata(pointer
head)//
定義輸入集合函數
{
pointer
p;
char
tmp;
scanf("%c",&tmp);
while(tmp!='\n')
{
p=(pointer)malloc(sizeof(struct
LNode));
p->data=tmp;
p->next=head->next;
head->next=p;
scanf("%c",&tmp);
}
}
void
pop(pointer head)//定義輸出集合函數
{
pointer
p;
p=head->next;
while(p!=NULL)
{
printf("%c",p->data);
p=p->next;
}
printf("\n");
}
void
or(pointer head1,pointer head2,pointer head3)//定義集合的交集函數
{
pointer
p1,p2,p3;
p1=head1->next;
while(p1!=NULL)
{
p2=head2->next;
while((p2!=NULL)&&(p2->data!=p1->data))
p2=p2->next;
if((p2!=NULL)&&(p2->data==p1->data))
{
p3=(pointer)malloc(sizeof(structLNode));
p3->data=p1->data;
p3->next=head3->next;
head3->next=p3;
}
p1=p1->next;
}
}
void main()//主函數
{
int x;
printf("(輸入數據,按回車鍵結束\n");
pointerhead1,head2,head3;
head1=(pointer)malloc(sizeof(structLNode));
head1->next=NULL;
head2=(pointer)malloc(sizeof(structLNode));
head2->next=NULL;
head3=(pointer)malloc(sizeof(structLNode));
head3->next=NULL;printf("請輸入集合A:\n");
readdata(head1);//調用輸入集合函數
printf("請輸入集合B:\n");
readdata(head2);//調用輸入集合函數A:
printf("1.交集2.結束\n");
do
{
printf("請選擇序號\n");
scanf("%d",&x);
switch(x)
{
case1:
or(head1,head2,head3);//調用交集函數
printf("集合A為:");
pop(head1);
printf("集合B為:");
pop(head2);
printf("兩集合的交集C=A∩B:");
pop(head3);
head3->next=NULL;
break;
case2:
break;
default:
gotoA;
}
}while(x!=2);
}

❿ 用c語言編寫兩個集合的運算

記得採納哦

集合

#include "stdafx.h"

#include <stdio.h>

int fun(int a,int M[])//判斷元素是否在集合里 在返回1 不在返回0

{

int i=0;

for(i=0;M[i]!=0;i++)

if(a==M[i]) return 1;

return 0;

}

void get(int M[])//輸入集合元素

{

int i=0;

printf(" ");

do

{

scanf("%d",&M[i++]);

}

while(M[i-1]!=0);

}

void print(int M[])//列印集合

{

int i=0;

printf(" ");

while(M[i]!=0)

{

printf("%d ",M[i++]);

}

printf(" ");

}

void clear(int M[])

{

int i=0;

do

{

M[i++]=0;

}

while(M[i]!=0);

}

void fun_sum(int A[],int B[],int C[])//集合A和集合B的並集

{

int i,j;

for(i=0;A[i]!=0;i++)

{

C[i]=A[i];

}

for(j=0;B[j]!=0;j++)

{

if(!fun(B[j],C)) C[i++]=B[j];

}

}

void fun_sub(int A[],int B[],int C[])//集合A和集合B的差集

{

int i,j=0;

for(i=0;A[i]!=0;i++)

{

if(!fun(A[i],B)) C[j++]=A[i];

}

}

void fun_J(int A[],int B[],int C[])//集合A和集合B的交集

{

int i,j=0;

for(i=0;A[i]!=0;i++)

{

if(fun(A[i],B)) C[j++]=A[i];

}

}

int main(int argc, char* argv[])

{

int A[50]={0},B[50]={0},C[100]={0};

printf("請輸入集合A以0結束 ");

get(A);

printf("請輸入集合B以0結束 ");

get(B);

fun_sum(A,B,C);

printf("集合A與集合B的並: ");

print(C);

clear(C);

fun_sub(A,B,C);

printf("集合A與集合B的差: ");

print(C);

clear(C);

fun_J(A,B,C);

printf("集合A與集合B的交: ");

print(C);

return 0;

}

熱點內容
隨機啟動腳本 發布:2025-07-05 16:10:30 瀏覽:525
微博資料庫設計 發布:2025-07-05 15:30:55 瀏覽:24
linux485 發布:2025-07-05 14:38:28 瀏覽:304
php用的軟體 發布:2025-07-05 14:06:22 瀏覽:754
沒有許可權訪問計算機 發布:2025-07-05 13:29:11 瀏覽:431
javaweb開發教程視頻教程 發布:2025-07-05 13:24:41 瀏覽:698
康師傅控流腳本破解 發布:2025-07-05 13:17:27 瀏覽:240
java的開發流程 發布:2025-07-05 12:45:11 瀏覽:685
怎麼看內存卡配置 發布:2025-07-05 12:29:19 瀏覽:283
訪問學者英文個人簡歷 發布:2025-07-05 12:29:17 瀏覽:834