1632: 线性表-2个集合的交集(顺序存储)
金币值:2
定数:8
时间限制:1.000 s
内存限制:128 M
正确:13
提交:22
正确率:59.09% 命题人:
题目描述
已知集合A和B,编程实现集合=A∩B,要求应用线性表提供的基本操作(初始化,求表长,取元素,定位/查找,插入等)来实现。
#include <stdio.h> #include <stdlib.h> #define MAXSIZE 100 typedef int ElemType; typedef struct { ElemType *elem; // 顺序表数组的基址 int length; // 顺序表当前元素个数 } SqList; void initList(SqList &L); void inputList(SqList &L); void deleteList(SqList &L,int i); void listIntersection(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); listIntersection(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 deleteList(SqList &L,int i) { for(int j=i; j<L.length; j++) L.elem[j-1]=L.elem[j]; 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 listIntersection(SqList &La,SqList Lb) { }
输入格式
输入数据共4行:
第1行:集合A的元素数
第2行:集合A中的元素(以空格间隔)
第3行:集合B的元素数
第4行:集合B中的元素(以空格间隔)
第1行:集合A的元素数
第2行:集合A中的元素(以空格间隔)
第3行:集合B的元素数
第4行:集合B中的元素(以空格间隔)
输出格式
集合A中的元素(以递增方式),以空格间隔(最后无空格)
输入样例 复制
6
4 5 6 1 2 3
3
6 9 1
输出样例 复制
1 6
提示
算法设计思路:
1. 分别调用初始化函数初始化两个线性表La和Lb。
2. 分别输入两个线性表La和Lb中的数据。
3. 依次取出La中第i个元素t,调用定位函数在Lb中查找元素t,如果找不到,则调用删除函数将t从La中删除(特别注意:删除第i个元素之后,第i+1个元素变成了第i个元素)。
4. 调用排序函数对La中的元素进行排序。
5. 调用输出函数输出已经排好序的La中的元素。
1. 分别调用初始化函数初始化两个线性表La和Lb。
2. 分别输入两个线性表La和Lb中的数据。
3. 依次取出La中第i个元素t,调用定位函数在Lb中查找元素t,如果找不到,则调用删除函数将t从La中删除(特别注意:删除第i个元素之后,第i+1个元素变成了第i个元素)。
4. 调用排序函数对La中的元素进行排序。
5. 调用输出函数输出已经排好序的La中的元素。