设有线性表LA=(3,5,8,11)和LB=(2,6,8,9,11,15,20),若LA和LB分别表示两个集合A和B,求新聚合C=A并B(即相同
#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
线性表
中数据元素之间的关系是一对一的关系,即除了第一个和最后一个数据元素之外,其它数据元素都是首尾相接的(注意,这句话只适用大部分线性表,而不是全部。比如,循环链表逻辑层次上也是一种线性表(存储层次上属于链式存储,但是把最后一个数据元素的尾指针指向了首位结点)。
我搜到了题目,一看一摸一样的,在看没结果,再一看是你的,我晕死啦
答: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中。相同元素不保留!
答: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;...
答: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(...
答: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)...
答: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的元素 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个元素的值和正位序(插...
答: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(...