
数据结构,用C语言编写程序。。。。别随便复制 80
设有顺序表LA=(3,5,8,11)和LB=(2,6,8,9,11,15,20);①若LA和LB分别表示两个集合A和B,求新集合C=AUB(“并”操作,相同元素不保留)预...
设有顺序表LA= (3,5,8,11)和LB=(2,6,8,9,11,15,20);
①若LA和LB分别表示两个集合A和B,求新集合C=A U B(“并”操作,相同元素不保留) 预测输出:LC=(3,5,8,11,2,6,9,15,20)
②将LA归并到LB表中且仍保持有序(保留相同元素) 预测输出:LB=(2,3,5,6,8,8,9,11,11,15,20)
③将LA和LB归并新表LC中且变为逆序(保留相同元素) 预测输出LC=(20,15,11,11,9,8,8,6,5,3,2) 展开
①若LA和LB分别表示两个集合A和B,求新集合C=A U B(“并”操作,相同元素不保留) 预测输出:LC=(3,5,8,11,2,6,9,15,20)
②将LA归并到LB表中且仍保持有序(保留相同元素) 预测输出:LB=(2,3,5,6,8,8,9,11,11,15,20)
③将LA和LB归并新表LC中且变为逆序(保留相同元素) 预测输出LC=(20,15,11,11,9,8,8,6,5,3,2) 展开
展开全部
给你一个思路:用一个链表 a[]存放LA,链表 b[]存放LB , a.count为LA中的数据个数,
b.count存放LB中的数据个数(链表是为了方便往LB中插入LA)
①做两层循环,第一层遍历LA for (int i=0;i<a.count;i++) 第二层遍历LB for (int j=0;i<b.count;j++) 判断当a[i]!=b[j],往LB中添加一个数据,b[b.count-1]=a[i],然后b.count++(LB中总个数增加了)
② 同样做两层循环,判断a[i]>b[j],如果大于,那么把a[i]插入到b[j]后面,进入i+1的循环,遍历完就可以。
③ 可以再建一个新的链表LD,把LC的最后一个赋给LD的第一个,LC的倒数第二个给LD的第二个,最后输出LD就可以。
b.count存放LB中的数据个数(链表是为了方便往LB中插入LA)
①做两层循环,第一层遍历LA for (int i=0;i<a.count;i++) 第二层遍历LB for (int j=0;i<b.count;j++) 判断当a[i]!=b[j],往LB中添加一个数据,b[b.count-1]=a[i],然后b.count++(LB中总个数增加了)
② 同样做两层循环,判断a[i]>b[j],如果大于,那么把a[i]插入到b[j]后面,进入i+1的循环,遍历完就可以。
③ 可以再建一个新的链表LD,把LC的最后一个赋给LD的第一个,LC的倒数第二个给LD的第二个,最后输出LD就可以。
2015-10-24
展开全部
写了一个,你参考下。
#include<stdio.h>
#include<string.h>
#include<malloc.h>
typedef struct node{
int data[20];
int length;
}list;
void init(list *l)
{
l=(list*)malloc(sizeof(list));
l->length=0;
}
void creatlist(list *&l,int a[],int n)
{
int i;
l=(list*)malloc(sizeof(list));
for(i=0;i<n;i++){
l->data[i]=a[i];
}
l->length=n;
}
void print(list *l){
int i;
for(i=0;i<l->length;i++)
{
printf("%d ",l->data[i]);
}
}
int inb(list *b,int k)
{
int j;
for(j=0;j<b->length;j++){
if(b->data[j]==k){
return 1;
}
}
return 0;
}
void hebing(list *a,list *b,list *&c)
{
int i,j,k=0;
int d[20]={0};
for(i=0;i<a->length;i++){
if(!inb(b,a->data[i])){
d[k]=a->data[i];
}
}
for(j=0;j<b->length;j++){
d[k]=b->data[j];
}
creatlist(c,d,k);
}
void sort(list *&a)
{
int i,j;
int temp;
for(i=0;i<a->length-1;i++){
for(j=i+1;j<a->length;j++){
if(a->data[i]>a->data[j]){
temp=a->data[i];
a->data[i]=a->data[j];
a->data[j]=temp;
}
}
}
}
int main(){
list *a;
list *b;
list *l;
int i,n,m;
int c[20];
int d[20];
printf("输入第一个数组的元素(注意先输入数组个数):\n");
scanf("%d",&n);
for(i=0;i<n;i++)
scanf("%d",&c[i]);
printf("输入第二个数组的元素(注意先输入数组个数):\n");
scanf("%d",&m);
for(i=0;i<m;i++)
scanf("%d",&d[i]);
creatlist(a,c,n);
creatlist(b,d,m);
print(a);
print(b);
printf("排序后的第二个数组为:\n");
sort(b);
print(b);
printf("合并第一二个数组为:\n");
hebing(a,b,l);
print(l);
printf("排序合并后的数组为:\n");
sort(l);
print(l);
return 0;
}
#include<stdio.h>
#include<string.h>
#include<malloc.h>
typedef struct node{
int data[20];
int length;
}list;
void init(list *l)
{
l=(list*)malloc(sizeof(list));
l->length=0;
}
void creatlist(list *&l,int a[],int n)
{
int i;
l=(list*)malloc(sizeof(list));
for(i=0;i<n;i++){
l->data[i]=a[i];
}
l->length=n;
}
void print(list *l){
int i;
for(i=0;i<l->length;i++)
{
printf("%d ",l->data[i]);
}
}
int inb(list *b,int k)
{
int j;
for(j=0;j<b->length;j++){
if(b->data[j]==k){
return 1;
}
}
return 0;
}
void hebing(list *a,list *b,list *&c)
{
int i,j,k=0;
int d[20]={0};
for(i=0;i<a->length;i++){
if(!inb(b,a->data[i])){
d[k]=a->data[i];
}
}
for(j=0;j<b->length;j++){
d[k]=b->data[j];
}
creatlist(c,d,k);
}
void sort(list *&a)
{
int i,j;
int temp;
for(i=0;i<a->length-1;i++){
for(j=i+1;j<a->length;j++){
if(a->data[i]>a->data[j]){
temp=a->data[i];
a->data[i]=a->data[j];
a->data[j]=temp;
}
}
}
}
int main(){
list *a;
list *b;
list *l;
int i,n,m;
int c[20];
int d[20];
printf("输入第一个数组的元素(注意先输入数组个数):\n");
scanf("%d",&n);
for(i=0;i<n;i++)
scanf("%d",&c[i]);
printf("输入第二个数组的元素(注意先输入数组个数):\n");
scanf("%d",&m);
for(i=0;i<m;i++)
scanf("%d",&d[i]);
creatlist(a,c,n);
creatlist(b,d,m);
print(a);
print(b);
printf("排序后的第二个数组为:\n");
sort(b);
print(b);
printf("合并第一二个数组为:\n");
hebing(a,b,l);
print(l);
printf("排序合并后的数组为:\n");
sort(l);
print(l);
return 0;
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询