SHAOXIAOJ正在加载中...

1631: 线性表-2个集合的并集(顺序存储)

金币值:2 定数:8 时间限制:1.000 s 内存限制:128 M
正确:14 提交:20 正确率:70.00% 命题人:
点赞量:0 收藏量:0 题目类型:程序 知识点: 数据结构-线性表

题目描述

假设有两个集合A和B分别用两个线性表LA和LB表示,即线性表中的数据元素即为集合中的成员,现要求求出一个新的集合A=A∪B。要求应用线性表提供的基本操作(初始化,求表长,取元素,定位/查找,插入等)来实现。

#include <stdio.h>
#include <stdlib.h>
#define  MAXSIZE  100
typedef  int  ElemType;
typedef  int  Status;
typedef  struct {
	ElemType  *elem; // 顺序表数组的基址
	int   length;    // 顺序表当前元素个数
} SqList;
void initList(SqList &L);
void inputList(SqList &L);
void insertList(SqList &L,int i,ElemType e);
void listUnion(SqList &La,SqList Lb);
void sortList(SqList &L);
void printList(SqList L);
int main(void) {
	SqList La,Lb;
	initList(La);
	initList(Lb);
	inputList(La);
	inputList(Lb);
	listUnion(La,Lb);
	sortList(La);
	printList(La);
	return 0;
}
void initList(SqList &L) {
	L.elem=(ElemType*)malloc(MAXSIZE*sizeof(ElemType));
	L.length=0;
}
void inputList(SqList &L) {
	scanf("%d",&L.length);
	for(int i=0; i<L.length; i++) scanf("%d",&L.elem[i]);
}
void insertList(SqList &L,int i,ElemType e) {
	for(int j=L.length-1; j>=i-1; j--) L.elem[j+1]=L.elem[j];
	L.elem[i-1]=e;
	L.length++;
}
int locateElem(SqList L,ElemType e) {
	int i;
	for(i=0; i<L.length; i++)
		if(L.elem[i]==e) break;
	if(i==L.length) return 0;
	else return i+1;
}
void sortList(SqList &L) {
	int i,j,n;
	n=L.length;
	for(i=0; i<n-1; i++) {
		int index=i;
		for(j=i+1; j<=n-1; j++)
			if(L.elem[index]>L.elem[j]) index=j;
		int t=L.elem[index];
		L.elem[index]=L.elem[i];
		L.elem[i]=t;
	}
}
void printList(SqList L) {
	for(int i=0; i<L.length; i++) printf("%d ",L.elem[i]);
}

/*仅提交以下代码*/
void listUnion(SqList &La,SqList Lb) {

}

输入格式

输入数据共4行:

第1行:集合A的元素数

第2行:集合A中的元素(以空格间隔)

第3行:集合B的元素数

第4行:集合B中的元素(以空格间隔)

输出格式

集合A中的元素(以递增方式),以空格间隔(最后无空格)

输入样例    复制

3
3 2 4
3
1 5 3

输出样例    复制

1 2 3 4 5

提示

算法设计思路:
1. 分别调用初始化函数初始化两个线性表La和Lb。
2. 分别调用输入函数输入两个线性表La和Lb中的数据。
3. 依次取出Lb中第i个元素t,调用定位函数在La中查找元素t,如果找不到,则调用插入函数将t插入到La中。
4. 调用排序函数对La中的元素进行排序。
5. 调用输出函数输出已经排好序的La中的元素。