當前位置:首頁 » 編程語言 » c語言數據集合操作的實現
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

c語言數據集合操作的實現

發布時間: 2022-04-28 17:31:10

1. 怎樣用語言c語言實現集合的合並,交集

通過你描述的問題,正確的交集代碼如下:
void
bing(char
a[],char
b[],int
m,int
n)
{
char
d[400];
int
i=0,j=0,s=m;
for(i=0;i<m;i++)
d[i]=a[i];
for(i=0;i<n;i++){
for(j=0;j<m;j++)
{
if(b[i]==a[j])
break;
}
if(j==m)
d[s++]=b[i];
}
cout<<"集合並集是:";
for(i=0;i<s;i++)
cout<<d[i]<<"
";
}

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;

}

3. 如何用C語言做出「完成集合運算的並集,交

定義兩個數組存放這兩個集合,再定義一個數組存放它們的集合,用類似冒泡排序的演算法,遍歷數組1中的第一個元素和數組2中每一個元素,若有相同的,則把這個元素放入第三個數組,繼續遍歷,知道數組1遍歷完所有元素,那數組3中的元素,即為兩個數組(集合)的交集。

4. 用C語言實現集合的並集

用兩個數組表示集合元素
對於AUB=C
先把A的數據
復制到C裡面
然後
遍歷B數組,每個元素和A對比,如果存在
則略過,否則添加到C中。
等到的C
即為並集

5. 怎麼用C語言實現多個文件進行匯總到一個文件功能

看你的匯總依據了。
如果不需要數據處理
只是單純性的集合起來
那麼可依次打開每個文件,然後寫入到一個新文件中。
如果需要數據處理
就需要先打開一個文件,提取並統計需要匯總的數據
再打開第二個,提取,並疊加到第一個的數據上
以此類推
最後一次性寫入。
這個要麻煩的多。

6. 怎樣用C語言實現集合的並交呢

#include<stdio.h>
#include<stdlib.h>

typedef struct pointer{
char dat;
struct pointer *link;
} pointer;

void readdata(pointer *head)
{ //讀集合
pointer *p;
char tmp;
printf("input data ('0' for end):");
scanf("%c",&tmp);
while(tmp!='0')
{
if((tmp<'a')||(tmp>'z'))
{
printf("輸入錯誤!必須為小寫字母!\n");
return;
}
p=(pointer *)malloc(sizeof(struct pointer));
p->dat=tmp;
p->link=head->link;
head->link=p;
scanf("%c",&tmp);
}
}

void disp(pointer *head)
{ //顯示集合數據
pointer *p;
p=head->link;
while(p!=NULL)
{
printf("%c ",p->dat);
p=p->link;
}
printf("\n");
}

void bing(pointer *head1,pointer *head2, pointer *head3)
{ //計算集合1與集合2的並
pointer *p1,*p2,*p3;
p1=head1->link;
while(p1!=NULL)
{
p3=(pointer *)malloc(sizeof(struct pointer));
p3->dat=p1->dat;
p3->link=head3->link;
head3->link=p3;
p1=p1->link;
}
p2=head2->link;
while(p2!=NULL)
{
p1=head1->link;
while((p1!=NULL)&&(p1->dat!=p2->dat))
p1=p1->link;
if(p1==NULL)
{
p3=(pointer *)malloc(sizeof(struct pointer));
p3->dat=p2->dat;
p3->link=head3->link;
head3->link=p3;
}
p2=p2->link;
}
}

void jiao(pointer *head1,pointer *head2, pointer *head3)
{ //計算集合1與集合2的交
pointer *p1,*p2,*p3;
p1=head1->link;
while(p1!=NULL)
{
p2=head2->link;
while((p2!=NULL)&&(p2->dat!=p1->dat))
p2=p2->link;
if((p2!=NULL)&&(p2->dat=p1->dat))
{
p3=(pointer *)malloc(sizeof(struct pointer));
p3->dat=p1->dat;
p3->link=head3->link;
head3->link=p3;
}
p1=p1->link;
}
}

main()
{
pointer *head1,*head2,*head3;
head1=(pointer *)malloc(sizeof(struct pointer));
head1->link=NULL;
head2=(pointer *)malloc(sizeof(struct pointer));
head2->link=NULL;
head3=(pointer *)malloc(sizeof(struct pointer));
head3->link=NULL;
printf("輸入集合1:\n");
readdata(head1);
getchar();
printf("輸入集合2:\n");
readdata(head2);
printf("集合1為:\n");
disp(head1);
printf("集合2為:\n");
disp(head2);
printf("集合1與集合2的並為:\n");
bing(head1,head2,head3);
disp(head3);
head3->link=NULL;
printf("集合1與集合2的交為:\n");
jiao(head1,head2,head3);
disp(head3);
}

7. C語言求集合運算

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

8. 如何利用c語言實現集合的運算

這種集合問題,一般是使用鏈表來處理。
比如說有兩個鏈表list1,list2,它們分別用來存儲集合A,B
如果要對A,B進行並運算,
那麼可以首先定義一個新的鏈表list3,然後讓list1和list2的值進行循環的比較,如果有相同的值,那麼就將這個值放入list3中,直到沒有相同的值為止。
大致的演算法就是這樣了。

9. 數據結構 用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...!

10. 如何用C語言表示離散數學上的集合,並輸出輸入

最簡單的是bit set(又稱為Bit array、bit vector),例如用 typedef unsigned bitset[N / sizeof(unsigned)]表示一個集合(其全集的元素量為N),每個bit代表某個元素是否存在於該集合中。

這個數據結構的好處是,可用位操作(&、|、~)實現並集、交集、補集,非常適合計算機運作。

缺點是空間和時間復雜度和全集的元素數量 N 成正比,而不是集合實際的元素量。例如全集是32位整數,每個集合就需要2^32 bit = 512MB的空間。如果集合中的元素比較少,可以使用有序序列,例如排序數組(Sorted array)、二叉查找樹等實現集合。它們的缺點是修改集合不是常數時間。

數據類型關鍵字

short:修飾int,短整型數據,可省略被修飾的int。(K&R時期引入)

long:修飾int,長整型數據,可省略被修飾的int。(K&R時期引入)

long long:修飾int,超長整型數據,可省略被修飾的int。(C99標准新增)

signed:修飾整型數據,有符號數據類型。(C89標准新增)

unsigned:修飾整型數據,無符號數據類型。(K&R時期引入)

restrict:用於限定和約束指針,並表明指針是訪問一個數據對象的初始且唯一的方式。