线性表LA=(3,5,8,11),LB=(2,6,8,9,11,15,20),LA和LB代表两个集合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

#include
#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;ilength;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;ilength;i++)
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
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

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

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

相同元素不保留!

void MergeList(int *A,int *B,List *c)
{
int i=j=0;
int k = 0;
int aLen,bLen;

aLen = sizeof(A);
bLen = sizeof(B);

while((i<=aLen)&&(j<=bLen))
{
if(A[i] < B[j])
{C[k] = A[i]; i++;k++;}
else if(A[i] = B[j])
{
C[k] = A[i]; i++;k++;j++;
}
else
{C[k] =B[j];j++;k++;}
}

while( i<=aLen)
{
c[k] = a[i];
k++;
i++;
}
while(j<=bLen)
{
c[k] = b[j];
k++;
j++;
}
}

int main(void)
{
MergeList(a,b,c);
}

尊重别人劳动,不要复制粘贴

LA,LB是有序线性表的话,将LB中的值依次插入LA不就行了,有相同的就不加.

2,3,5,6,8,9,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中。相同元素不保留!
  • 合并线性表 C++
    答: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){ //在地址上+a&b,保证指针未溢出 if(*pa>*pb){ pc = * pb;...
  • 数据结构设有线性表LA(3,5,8,110)和LB(2,6,8,9,11,15,20)求新集合?
    答:void sort(sqlist *la) //排序 { int i,j,k;for(i=0;i<la->length;i++)for(j=i+1;j<la->length;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)//(相同...
  • 用C语言编写链式存储结构下实现线性表的创建,插入,删除,按值查找
    答:include <stdlib.h> typedef struct LNode{ 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!=...
  • 线性表的拆分与合并
    答:已知线性表LA的数据元素(n个,n为偶数),现要求将LA拆开成两个新的线性表LB,LC。要求LB中的数据元素为LA中的奇数位序的数据元素(a1,a3,…,an-1),LC中的数据元素为LA中的偶数位序... 已知线性表LA的数据元素(n个,n为偶数),现要求将LA拆开成两个新的线性表LB,LC。要求LB中的数据元素为LA中的奇数位序的...
  • 如何用线性表储存五个数字并输出
    答:void MergeList_Link(LinkList &La,LinkList &Lb,LinkList &Lc) /*算法2.12为扩展实验的内容*/ {/*已知单链线性表La和Lb的元素按值非递减排列。*/ /*归并La和Lb得到新的单链线性表Lc,Lc的元素也按值非递减排列*/ LinkList pa=La->next,pb=Lb->next,pc;Lc=pc=La;/*用La的头结点作为Lc的头结点...
  • 求两道数据结构算法
    答: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); //输出...
  • 用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...
  • 数据结构线性表基本操作
    答:SqList La;cout<<"请输入线性表La的长度:";cin>>n;cout<<"请输入线性表La中的元素:";InitList_Sq(La);for(i=0; i<n; i++){ cin>>La.elem[i];La.length++; //如果不加这句,你要让La.length=n;} cout<<"请输入要插入到线性表La中的数字x和插入的位置k:";cin>>x>>k;...