设有线性表LA=(3,5,8,11)和LB=(2,6,8,9,11,15,20),若LA和LB分别表示两个集合A和B,求新聚合C=A并B(即相同

kuaidi.ping-jia.net  作者:佚名   更新日期:2024-07-04
数据结构(C语言版)设有线性表LA(3,5,8,110)和LB(2,6,8,9,11,15,20)求新集合???????

#include
#include
#define list_init_size 100
#define listincrement 10

typedef struct
{ int *elem;
int length;
int listsize;
} sqlist;

int initsqlist (sqlist *l)//初始化
{
l->elem=(int *)malloc(list_init_size*sizeof(int));
if(!l->elem)
exit(0);
l->length=0;
l->listsize=list_init_size;
return 0;
}

int listinsert_sq(sqlist *l,int i,int e)//插入一个元素
{
int *p,*q;
if(il->length+1)
exit(0);
q=&(l->elem[i-1]);
for(p=&(l->elem[l->length-1]);p>=q;--p)
*(p+1)=*p;
*q=e;
++l->length;
return 0;
}

void add(sqlist *l,int e)//添加到最后
{
listinsert_sq(l,l->length+1,e);
}


void disp(sqlist *l)
{
int i;
for(i=0;ilength;i++)
printf("%d ",l->elem[i]);
printf("
");
}

int find(sqlist *l,int e)//查找元素是否存在
{
int i,t=-1;
for(i=0;ilength;i++)
if(l->elem[i]==e)
{t=i;break;}
return t;
}

void opt_1(sqlist *la,sqlist *lb)//(相同元素不保留)
{
int i,j;
for(i=0;ilength;i++)
{
j = find(la,lb->elem[i]);
if(j==-1)
listinsert_sq(la,la->length+1,lb->elem[i]);
}
}

void sort(sqlist *la) //排序
{
int i,j,k;
for(i=0;ilength;i++)
for(j=i+1;jlength;j++)
{
if(la->elem[i]>la->elem[j])
{
k = la->elem[i];
la->elem[i] = la->elem[j];
la->elem[j] = k;
}
}
}

void opt_2(sqlist *la,sqlist *lb)//(相同元素保留)
{
int i,j;
for(i=0;ilength;i++)
{
j = find(la,lb->elem[i]);
if(j!=-1)
listinsert_sq(la,j+1,lb->elem[i]);
else
listinsert_sq(la,la->length+1,lb->elem[i]);

}
sort(la);
}



int main()
{
sqlist La,Lb;

initsqlist(&La);
add(&La, 3);
add(&La, 5);
add(&La, 8);
add(&La, 11);

initsqlist(&Lb);
add(&Lb, 2);
add(&Lb, 6);
add(&Lb, 8);
add(&Lb, 9);
add(&Lb, 11);
add(&Lb, 15);
add(&Lb, 20);

disp(&La);
disp(&Lb);

opt_1(&La,&Lb);//操作(相同元素不保留)
disp(&La);


La.length = 0; //重新初始化La
add(&La, 3);
add(&La, 5);
add(&La, 8);
add(&La, 11);

opt_2(&La,&Lb);//操作(相同元素保留)
disp(&La);

return 0;
}


输出:
3 5 8 11
2 6 8 9 11 15 20

3 5 8 11 2 6 9 15 20
2 3 5 6 8 8 9 11 11 15 20

依次用LB中的值和LA中的所有值比较,都不相等就加入到LA中。

相同元素不保留!

#include <stdio.h>

#define listincrement 10

l->elem=(int *)malloc(list_init_size*sizeof(int));

if(!l->elem)

exit(0);

l->length=0;

l->listsize=list_init_size;

return 0;

int listinsert_sq(sqlist *l,int i,int e)//插入一个元素

int i,t=-1;

for(i=0;i<l->length;i++)

if(l->elem[i]==e)

{t=i;break;}

return t;

}

void opt_1(sqlist *la,sqlist *lb)//(相同元素不保留)

void sort(sqlist *la) //排序

{

int i,j,k;

for(i=0;i<la->length;i++)

int i,j;

for(i=0;i<lb->length;i++)

{

j = find(la,lb->elem[i]);

if(j!=-1)

listinsert_sq(la,j+1,lb->elem[i]);

else

opt_1(&La,&Lb);//操作(相同元素不保留)

}

输出:

3 5 8 11

2 6 8 9 11 15 20

3 5 8 11 2 6 9 15 20

2 3 5 6 8 8 9 11 11 15 20

线性表

中数据元素之间的关系是一对一的关系,即除了第一个和最后一个数据元素之外,其它数据元素都是首尾相接的(注意,这句话只适用大部分线性表,而不是全部。比如,循环链表逻辑层次上也是一种线性表(存储层次上属于链式存储,但是把最后一个数据元素的尾指针指向了首位结点)。



我搜到了题目,一看一摸一样的,在看没结果,再一看是你的,我晕死啦

  • 设有线性表LA=(3,5,8,11)和LB=(2,6,8,9,11,15,20),若LA和LB分别表示两...
    答:else opt_1(&La,&Lb);//操作(相同元素不保留)} 输出:3 5 8 11 2 6 8 9 11 15 20 3 5 8 11 2 6 9 15 20 2 3 5 6 8 8 9 11 11 15 20 线性表 中数据元素之间的关系是一对一的关系,即除了第一个和最后一个数据元素之外,其它数据元素都是首尾相接的(注意,这句话只适...
  • 线性表LA=(3,5,8,11),LB=(2,6,8,9,11,15,20),LA和LB代表两个集合A...
    答:依次用LB中的值和LA中的所有值比较,都不相等就加入到LA中。相同元素不保留!
  • 设有一个线性表La,请用算法分别完成顺序存储结构和链式存储结构下线性...
    答:La.data[3]=4;La.data[4]=5;//输出顺序表 int i,j,temp;cout<<"\t排序前:"<<endl;for(i=0;i<La.length;i++){ cout<<La.data[i]<<endl;} //逆序顺序表 for(i=0,j=La.length-1;i<j;i++,j--){ temp=La.data[i];La.data[i]=La.data[j];La.data[j]=temp;...
  • 用java顺序表完成以下程序
    答:ArrayList<Integer> la = new ArrayList<Integer>();ArrayList<Integer> lb = new ArrayList<Integer>();//ArrayList 就是线性表...如果问你具体怎么定义直接超ArrayList的源代码给他 la.add(3);la.add(5);la.add(8);la.add(11);lb.add(2);lb.add(6);lb.add(8);lb.add(9);lb.add(...
  • 数据结构设有线性表LA(3,5,8,110)和LB(2,6,8,9,11,15,20)求新集合?
    答:j++){ if(la->elem[i]>la->elem[j]){ k = la->elem[i];la->elem[i] = la->elem[j];la->elem[j] = k;} } } void opt_2(sqlist *la,sqlist *lb)//(相同元素保留){ int i,j;for(i=0;i<lb->length;i++){ j = find(la,lb->elem[i]);if(j!=-1)...
  • 合并线性表 C++
    答:using namespace std;int main(){ int la[a] = {3,5,8,11,13};int lb[b] = {2,6,8,9,11,15,20,26};int lc[c];int *pa,*pb,*pc,*p;pa = la;pb = lb;pc = lc;cout<<la+a<<endl;cout<<pa<<endl;while(pa<la+a || pb<lb+b){ //将&&改为||.if(*pa>*...
  • 求两道数据结构算法
    答:ElemType A[5]={1,2,3,4,5}, B[8]={3,4,5,6,7,8,9,11};//把集合A和B分别存入两个单向链表LA和LB中 LA = CreateList(A, 5);LB = CreateList(B, 8);PrintLink(LA); //输出链表 PrintLink(LB); //输出链表 Union(LA, LB, &L);//合并两个串 PrintLink(L); //输出...
  • 给定一个顺序存储的线性表,请设计一个算法,删除所有大于min而且小于max...
    答://删除表中所有大于min而且小于max的元素 status DeleteItem(SeqList &L,int min,int max){ int i,j;if(min >= max)return ERROR;for(i=0;i<L.length;i++){ if(L.elem[i]>min && L.elem[i]<max){ for(j=i;j<L.length;j++){ L.elem[j]=L.elem[j+1];--L.length;} }...
  • 如何用线性表储存五个数字并输出
    答:线性表的链式存储与基本操作 利用线性表的链式存储结构,设计一组输入数据(假定为一组整数),能够对单链表进行如下操作: 初始化一个带表头结点的空链表; 创建一个单链表是从无到有地建立起一个链表,即一个一个地输入各结点数据,并建立起前后相互链接的关系。又分为逆位序(插在表头)输入n个元素的值和正位序(插...
  • 用C语言编写链式存储结构下实现线性表的创建,插入,删除,按值查找
    答:int data;//链表数据 struct LNode* next;//链表指针 }LNode,*LinkList;/*头插法-建立单链表*/ LinkList HeadCreate(LinkList la){ int num;la=(LinkList)malloc(sizeof(LNode));//建立头结点 la->next=NULL;scanf("%d",&num);while(num!=10){ LNode *p=(LinkList)malloc(sizeof(...