C语言 集合运算

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言 集合运算相关的知识,希望对你有一定的参考价值。

#include "stdio.h"
#include "conio.h"
#include <stdlib.h>
#include "process.h"
typedef struct Collelm
int number;
struct Collelm *next;
Collelm,*pcollelm;
void table()

printf("请选择\n");
printf("1:添加元素\t2:删除元素\n");
printf("3:求并集\t4:求交集f\n");
printf("5:显示主菜单\n");

void display(pcollelm p)

while(p->next!=NULL)
printf("%d\t",p->number);


void AppendToTable(pcollelm x,int number) /*向集合中添加元素number*/

pcollelm pr,tail;
tail=x;
while(x->number!=0)
pr=(pcollelm)malloc(sizeof(Collelm));
scanf("%d",x->number);
while(tail->next!=NULL)
tail=tail->next;
tail->next=pr;
tail=tail->next;


void Deletetable(collelm x,int number)

collelm p1,p2;
p1=x;
p2=x;
for(;p2!=NULL;p1=p1->next,p2=p1->next)

if(p2->number==number)
p1->next=p2->next;
break;

else
printf("未找到要删除的元素\n");



pcollelm Addition(pcollelm a,pcollelm b,pcollelm collp) /*求两集合的并集*/

pcollelm pa,pb,p;
pa=a;
pb=b;
p=collp
for(pa;pa!=NULL;pa=pa->next)
for(pb->number;pb!=NULL;pb=pb->next)
if(pa->number==pb->number)
AppendToTable(pa,pa->number,p);
break;

else
AppendToTable(pa,pa->number,p);
AppendToTable(pb,pb->number,p);



return p;

collelm Multiply(pcollelm x,pcollelm y,pcollelm collp) /*求两集合的并集*/

pcollelm pa,pb,p;
pa=a;
pb=b;
for(pa->number;pa!=NULL;pa=pa->next)
for(pb->number;pb!=NULL;pb=pb->next)
if(pa->number==pb->number)
AppendToTable(pcollelm p,pa->number);
break;

else
continue;


return p;

void main()

Collelm colla,collb,collp;
pcollelm p;
p=collp;
int n,num;
char c,a;
table();
printf("请选择\n");
scanf("%d",&n);
switch(n)
case 1:
printf("请选择添加元素的集合,以#结束添加\n");
while(c!='#')
scanf("%c",&a);
switch(a)
case 'a':
printf("请向集合%c中输入元素,以0结束\n",'a');
while(num!=0)
scanf("%d",&num);
AppendToTable(&colla,num);

break;
case 'b':
printf("请向集合%c中输入元素,以0结束\n",'a');
while(num!=0)
scanf("%d",&num);
AppendToTable(&colla,num);

break;
default :c='#';
break;


break;
case 2:
printf("请输入要删除的元素,以0结束\n");
while(num!=0)
scanf("%d",num);
Deletetable(colla,num);

break;
case 3:
printf("所求并集为:\n");
Addition(&colla,&collb,&collp);
display(&collp);
break;
case 4:
printf("所求交集为:\n");
p=Multiply(&colla,&collb,&collp);
display(p);
break;
case 5:
table();
break;
default :
break;


有什么错误,麻烦了

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 *
参考技术A 好长的代码,然后最后写一句“有什么错误”了事,真是酷毙了!! 参考技术B 改的我吐血了,你写的也太随意了 参考技术C 这个5分。狠难搞定

没事抽空学——c语言指针操作基础概念

  • 指针基础

    理解指针的最佳方法是画图,学习使用基本指针,不要产生空指针。

技术分享

  • 存储控件分配

    存储控件分配是指在内存预留空间的过程。就像一个虚拟菜谱一样,指针对应菜名,其所指的内存空间中的数据对应实际的菜。

  • 数据集合与指针的算术运算

    数据集合主要指结构和数组。指针的算术运算定义指针的计算规则。指向结构的指针对于建立数据结构起着至关重要的作用。在c中,数组和指针一样,都是以指针算术运算方法进行运算的。

  • 作为函数参数的指针

    通过这种方式,可以按照传递应用的方法传递函数参数。在c语言中,传递数组或大型结构时,使用指针是一种普遍而高效的方法。

  • 指向指针的指针

    不是指向具体变量的指针,其作为函数的参数来传递是非常普遍的。

  • 泛型指针与类型转换

    泛型指针和类型指针转换是用来跨越和覆盖c语言的类型系统的途径。泛型指针指向某一数据而不需要理会具体类型。类型转换允许临时地改变数据的类型。

  • 函数指针

    指针指向可执行代码段或者指向调用可执行代码段的信息快,而不是指向某种具体数据。它们把函数当作一小段数据来存储和管理。

以上是关于C语言 集合运算的主要内容,如果未能解决你的问题,请参考以下文章

计算机c语言中啥是关系的投影运算

C语言编程 集合子集问题

用c语言解决集合中关于子集的问题

R语言:集合运算

使用C语言编写程序,实现顺序表的基本运算——插入和删除。

没事抽空学——c语言指针操作基础概念