C语言求两个顺序表的并集

作者&投稿:葛贾 (若有异议请与网页底部的电邮联系)
C语言 求两个有序顺序表的并集~

楼上写得比较好,pf。
#include

int MergeArray(int* arr1, int len1, int* arr2, int len2, int** arrRst)
{
*arrRst = new int[len1+len2];
int* arrRstt = *arrRst;
if (*arrRst != 0)
{
int *p = arr1;
int i = 0;

int i1 = 0,i2 = 0;
while(i1<len1 || i2<len2)
{
p = arr1;
while (*p<=*arr2 && i1<len1)
{
arrRstt[i] = *p;
++i;
++p;
++i1;
}
arr1 = p;

p = arr2;
while (*p<=*arr1 && i2<len2)
{
arrRstt[i] = *p;
++i;
++p;
++i2;
}
arr2 = p;
}
}
else
{
return 0;
}

return len1+len2;
}

int main()
{
int a1[10] = {1,3,5,6,8,9,23,123,145,156};
int a2[10] = {2,4,5,6,7,8,9,343,346,2342};
int* rst;

int t = MergeArray(a1,10,a2,10, &rst);

for (int i=0;i<t;i++)
{
printf("%d", rst[i]);
if ((i+1)%5==0)
{
printf("
");
}
}
delete []rst;
scanf("%d", &t);
return 0;
}

C语言求两个顺序表的并集函数为:
void fun(int a[],int b[],int n,int m,int c[]){
int i=0,j=0,k=0;
for (k=0;k<n+m;k++){
if(i>=n||a[i]>b[j]) {c[k]=b[j];j++;continue;}
if(j>=m||a[i]<b[j]) {c[k]=a[i];i++;continue;}
}
}
void main(){
int a[10],b[10],c[20];
printf("input a");
for(i=0;i<10;i++)scanf("%d",a+i);
printf("input b");
for(i=0;i<10;i++)scanf("%d",b+i);
fun(a,b,10,10,c);
for(i=0;i<20;i++)printf("%d ",c[i]);
}

#include<stdio.h>
#define maxsize 100 //宏定义常量表示线性表的最大长度
struct Sqlist
{
int elem[maxsize]; //线性表占用的数组空间
int last; //记录线性表中最后一个元素在数组elem[]中的位置
};

void initlist(Sqlist &L) //初始化线性表
{
L.last=0;
}

void unionlist(Sqlist &la,Sqlist &lb) //求集合la和lb的并集
{
int i,j,e;
for(i=0;i<lb.last;i++)
{
e=lb.elem[i]; j=0; //用e记录线性表lb中的元素
while((j<la.last)&&(la.elem[j]!=e)) j++; //扫描顺序表la,直到找到值为e的元素,或扫描到表尾还没找到
if(j==la.last)
{
la.elem[la.last]=e;la.last++; //将lb中值不为e的元素加入到la中,表长为la,lb去掉相同元素后的两表长之和
}
}
}

void main()
{
int i;
char c;
struct Sqlist la,lb;
printf("初始化顺序表\n");
initlist(la);
initlist(lb);
printf("请输入集合a的元素\n");
for(i=0;i<maxsize;i++)
{
scanf("%d%c",&la.elem[i],&c); //输入la的各元素,各元素之间用空格分开
la.last++;
if(c=='\n') //当输入Enter时结束输入
break;
}
printf("请输入集合b的元素\n");

for(i=0;i<maxsize;i++)
{
scanf("%d%c",&lb.elem[i],&c);
lb.last++;
if(c=='\n')
break;
}
unionlist(la,lb);
printf("集合a与b的并集为:\n");
for(i=0;i<la.last;i++)
printf("%-4d",la.elem[i]);
printf("\n");
}
你的链表长度没有随着链表元素的增加而增加,我改过了,你试下,祝好运

C语言求两个顺序表的并集函数为:
void fun(int a[],int b[],int n,int m,int c[]){
int i=0,j=0,k=0;
for (k=0;k<n+m;k++){
if(i>=n||a[i]>b[j]) {c[k]=b[j];j++;continue;}
if(j>=m||a[i]<b[j]) {c[k]=a[i];i++;continue;}
}
}
void main(){
int a[10],b[10],c[20];
printf("input a");
for(i=0;i<10;i++)scanf("%d",a+i);
printf("input b");
for(i=0;i<10;i++)scanf("%d",b+i);
fun(a,b,10,10,c);
for(i=0;i<20;i++)printf("%d ",c[i]);
}

void fun(int a[],int b[],int n,int m,int c[]){
int i=0,j=0,k=0;
for (k=0;k<n+m;k++){
if(i>=n||a[i]>b[j]) {c[k]=b[j];j++;continue;}
if(j>=m||a[i]<b[j]) {c[k]=a[i];i++;continue;}
}
}
void main(){
int a[10],b[10],c[20];
printf("input a");
for(i=0;i<10;i++)scanf("%d",a+i);
printf("input b");
for(i=0;i<10;i++)scanf("%d",b+i);
fun(a,b,10,10,c);
for(i=0;i<20;i++)printf("%d ",c[i]);
}

我没看完,但是我想提一个问题。就是我感觉这个算法是不是不是很好哦。。直接把一个顺序表的元素通过双重循环,作比较,然后输出不是很好吗?

求一个C语言程序 要求两个集合的交集 并集 笛卡尔乘积 在线等_百度...
答:把集合A,B的元素分别用数组存取,∩ for(i=0,k=0,i<A的长度,i++)for(j=0,j<B的长度,j++)if(A[i]==B[j]){C[k++]=A[i];再跳出j循环,回到i,反正不是break那个C存交} 同样∪用循环,首先把A中的全部放入D中,B中的元素如果C中有,不写入D中,没有写入D中,或者去看D...

C语言求两集合并集,并集存放到C集合中,但是int C,int *csize,csize是...
答:csize是指向int类型的指针

试用静态链表存储结构,写出求两集合A和B的并集AUB的代码。
答:q=head2->next;while(q){ if(p->data==q->data){ s=(linklist)malloc(sizeof(linknode));s->data=p->data;r->next=s;r=s;break;} q=q->next;} p=p->next;} r->next=NULL;return head;} linklist bingji(linklist head1,linklist head2) //求两个集合的并集 { linklist...

数据结构c语言版顺序表求助 是c语言版!
答:include <stdio.h>#include <stdlib.h>#define MaxSize 50//定义顺序表 typedef struct{ int list[MaxSize]; int listLength;}list; //初始化顺序表 void initList(list *l){ l->listLength = 0;}//输出顺序表void printList(list *l){ int i; for(i = 0;i < l->listLength;i++...

C语言大神 麻烦帮忙写个程序
答:/ 输入两组数据,1.将两组数据读入两个集合 2.将两个集合的数分别从小到大排序(选择或者冒泡皆可)3制作一个菜单,让用户在程序执行时可以选择:(1)求两集合交集 (2)求两集合并集 (3)求两集合相减结果(如{1,2,3} - {1,4} = {2,3})该程序要用到函数的调用,数组做函数参数。/...

c语言啊!啊啊啊
答:可以用结构{int num, data[20];}来定义“集合”。写这样几个函数:1,判断一个数在不在集合里;2,把一个数加入到集合里。3,把A,B集合的交集写进C集合。4,把A,B的合集写进C集合。5,把A-B写进C集合。(A里面不属于B的数)然后再写主程序 ...

数据结构,链表的并集操作。
答:int listlength(Linklist L)//求链表的长度 { int length=0;Lnode *p=L->next;while (p){ ++length;p=p->next;} return length;} void unionlist(Linklist La,Linklist Lb,Linklist Lc) //重复的数字不要,并集 { Linklist pa,pb,pc;int Lalength = listlength(La);int Lblength =...

c语言,做这样的.c文件 : 输入2组数,并求出交集和并集,谢谢大家
答:int a[10],b[10];for(int i=0;i<10;i++)scanf("%d",&a[i]);//类似地输入b //交集即找到相同的 for(int i=0;i<10;i++)for(int j=0;j<10;j++)if(a[i]==b[j])printf(a[i]);//类似地,并集,相同的只输出一个,跳过一个,即不执行操作语句 ...

高分求助c语言中的错误 (本人是新手)
答:printf("请输入第二个集合\n");for(j=0;j<5;j++)scanf("%d",&b[i]); --->scanf("%d",&b[j]);程序太长, 你改改上面试试,看看是不是你要的结果 --- 如果还不行,建议你单步执行看看, 程序的东东,自己调试出来才有成就感 ...

请教大一C语言编程,谢谢了!
答:include <stdlib.h> include <malloc.h> include <memory.h> / 两个文件:data1.txt和data2.txt,两个文件中都有很多数字,用空格隔开。如:45 78 85 45 63 21 47 86 运行程序,计算这两个文件中数字的交集,并且排好序,存放在jiao.txt中;计算这两个文件中数字的并集,并且排好序,存放...