利用两个线性表LA和LB分别表示两个集合A和B,现要求一个新的集合A=A并B。 算法是 void union(List &La,Lis

kuaidi.ping-jia.net  作者:佚名   更新日期:2024-07-16
数据结构&什么意思 比如void union(list &La,list Lb) 为什么有&有的没有,最好详细点谢谢了呀!

可以这样理解,如果你想改变链表La就加&,不改变就不加。看看c++的书吧 ,&是取地址符。

有连个表 la[i]和lb[j] 算法实现为
for[k=0,x=0,y=0;k<i+j;k++]
{
if(la[x]>=lb[y])
{lc[k]=lb[y];
y++;
}
else{lc[k]=la[x];x++;}
}

#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
typedef int status;
typedef int ElemType;
#define TRUE 1
#define ERROR 0
#define FALSE 0
#define OK 1
#define OVERFLOW -2
#define list_init_size 100
#define listincrement 10
typedef struct{
ElemType *elem;
int length;
int listsize;
}sqlist;
status equal(ElemType a,ElemType b)
{if(a==b)
return TRUE;
else
return FALSE;
}
int listlength(sqlist l)
{ return l.length;}
status listinsert(sqlist *l,int i,ElemType e)
{
ElemType *newbase,*q,*p;
if(i<1||i>(*l).length+1)
return ERROR;
if((*l).length>=(*l).listsize){
newbase=(ElemType*)realloc((*l).elem,((*l).listsize+listincrement)*sizeof(ElemType));
if(!newbase) exit(OVERFLOW);
(*l).elem=newbase;
(*l).listsize+=listincrement;
}
q=&((*l).elem[i-1]);
for(p=&((*l).elem[(*l).length-1]);p>=q;--p)
*(p+1)=*p;
*q=e;
++(*l).length;
return OK;
}
status initlist(sqlist *l){
(*l).elem=(ElemType*)malloc(list_init_size*sizeof(ElemType));
if(!(*l).elem)
exit(OVERFLOW);
(*l).length=0;
(*l).listsize=list_init_size;
return OK;
}
status getelem(sqlist l,int i,ElemType *e)
{ if(i<1||i>l.length)
exit(ERROR);
*e=*(l.elem+i-1);
return OK;
}
int LocateElem(sqlist L,ElemType e,status(*compare)(ElemType,ElemType))
{
ElemType *p;
int i=1;
p=L.elem;
while(i<=L.length&&!compare(*p++,e))
++i;
if(i<=L.length)
return i;
else
return 0;
}
void print(ElemType *c)
{
printf("%d ",*c);
}
status ListTraverse(sqlist l,void(*vi)(ElemType *))
{
ElemType *p;
int i;
p=l.elem;
for(i=1;i<=l.length;i++)
vi(p++);
printf("\n");
return OK;
}
void Union(sqlist *la,sqlist lb)
{
int la_len,lb_len;
int i;
ElemType e;
la_len=listlength(*la);
lb_len=listlength(lb);
for(i=1;i<=lb_len;i++)
{ getelem(lb,i,&e);
if(!LocateElem(*la,e,equal))
listinsert(la,++la_len,e);
}
}
void main()
{
sqlist la,lb;
int j,i;
i=initlist(&la);
if(i==1)
for(j=1;j<=6;j++)
i=listinsert(&la,j,j);
printf("la= ");
ListTraverse(la,print);
initlist(&lb);
for(j=1;j<=5;j++)
i=listinsert(&lb,j,2*j);
printf("lb= :");
ListTraverse(lb,print);
Union(&la,lb);
printf("la :");
ListTraverse(la,print);
}

  • 找出两个等长升序序列的中位数
    答:例如,若序列S1 = (11,13,15,17,19),则S1的中位数为15。两个序列的中位数是含它们所有元素的升序序列的中位数。例如,若序列S2 = (02,04,06,08,20),则S1和S2的中位数为11。假设以两个元素依值递增有序排列的线性表A和B分别表示两个升序序列(即同一表中的元素值各不相同),现...
  • 关于数据结构中的线性表的问题
    答://La和Lb中的元素分别表示两个集合A和B,求一个新的集合A=(A-B)∪(B-A)。int unionl(sqlist *la,sqlist *lb){ int i,j; elemtype *newbase; if(la->length+lb->length>la->listsize) newbase=(elemtype*)realloc(la->elem,(la->listsize+list_increament)*sizeof(elemtype)); if(!newbase...
  • 关于数据结构——线性表一问题
    答://La和Lb中的元素分别表示两个集合A和B,求一个新的集合A=(A-B)∪(B-A)。int unionl(sqlist *la,sqlist *lb){ int i,j; elemtype *newbase; if(la->length+lb->length>la->listsize) newbase=(elemtype*)realloc(la->elem,(la->listsize+list_increament)*sizeof(elemtype)); if(!newbase...
  • 求 线性表的顺序存储结构 一数的插入 谢谢
    答://La和Lb中的元素分别表示两个集合A和B,求一个新的集合A=(A-B)∪(B-A)。int unionl(sqlist *la,sqlist *lb){ int i,j; elemtype *newbase; if(la->length+lb->length>la->listsize) newbase=(elemtype*)realloc(la->elem,(la->listsize+list_increament)*sizeof(elemtype)); if(!newbase...
  • ...两个元素依值递增有序排列的线性表A和B分别表示两个集合(即同一表中...
    答:// 将合并逆置后的结果放在C表中,并删除B表 Status ListMergeOppose_L(LinkList &A,LinkList &B,LinkList &C){ LinkList pa,pb,qa,qb;pa=A;pb=B;qa=pa;// 保存pa的前驱指针 qb=pb;// 保存pb的前驱指针 pa=pa->next;pb=pb->next;A->next=NULL;C=A;while(pa&&pb){ if(pa->...
  • 数据结构假设分别以两个元素的值递增有序线性表a,b表示两个集合,现在...
    答:include<iostream> using namespace std;struct Node { int data;Node *next;};class LinkList { public:Node * intLinkList(int a[],int n){ first=new Node;first->next=NULL;for(int i=(n-1);i>=0;i--){ Node *s;s=new Node;s->data=a[i];s->next=first->next;first->...
  • ...La、Lb(单调递增,结点的值域为整型数据),利用La、Lb的结点空间,将La...
    答:{//已知单链线性表La和Lb的元素按值非递减排列。归并为Lc后也按值非递减排列。node *pa,*pb,*pc;pa=La->next;pb=Lb->next;Lc=pc=La; //有头结点while(pa&&pb) //将pa 、pb结点按大小依次插入Lc中{ if (pa->data<=pb->data){pc->next=pa;pc=pa;pa=pa->next;}else{pc->next...
  • 数据结构中的算法问题
    答:这个程序应该不是“把b中a没有的数据插入a中,另外新建c表。”而是"La和lb中的数据元素非递减排列,归并LA和LB得到新的线性表LC,LC的数据元素也按值非递减排列"《数据结构》(严蔚敏版)P21 用I和J来存储LA和LB中选来比较的两个元素的位置,用K来指示插入到LC中的哪个位置 while((i<=la_len...
  • 求一个c++程序,求线性表la和lb的并集lc的程序
    答:cout << "la与lb的并集lc:";unionList(la, lb);return 0;} ②:list.h:#include<iostream> using namespace std;ifndef LIST_H_define LIST_H_define LISTSIZE 100 typedef char DataType;//声明DataType类型 typedef struct SqList { DataType items[LISTSIZE]; //存放线性表数据 int ...
  • 数据结构初学者求教,自己真心不懂
    答:就你所贴出的伪代码而言:void union(List &La,List Lb)中的&La,代表的意思是传引用。(传引用的好处是函数结束后的值是函数执行后的值,这个函数的作用就是将线性表La,Lb合并并将后并后的线性表传给给La。这样La在函数结束后就代表合并后的链表,如果说不用&La,而是用La,当你在主函数中...