一张黑桃K 2024-09-29 21:27 采纳率: 96.9%
浏览 1

数据结构顺序表,两个集合的交集,会写的看一下吧

题目描述
已知集合A和B,编程实现集合=A∩B,要求应用线性表提供的基本操作(初始化,求表长,取元素,定位/查找,插入等)来实现。
输入
输入数据共4行:
第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中的元素。

```c
#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 listIntersection(SqList &La,SqList Lb) {

}
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]);
}



  • 写回答

2条回答 默认 最新

  • 一轮明月照丘壑 2024-09-29 21:28
    关注

    以下回复参考:皆我百晓生券券喵儿等免费微信小程序作答:

    这是一个基于顺序表的两个集合交集问题的解决方案。代码主要实现了初始化顺序表、输入顺序表元素、删除元素、定位元素、排序和打印顺序表的功能。对于集合交集的实现,我们需要在listIntersection函数中完成。下面是完成这个功能的代码:

    void listIntersection(SqList &La, SqList Lb) {
        int j;
        for (int i = 0; i < La.length; i++) {
            j = locateElem(Lb, La.elem[i]); // 定位元素在Lb中的位置
            if (j == 0) { // 如果元素在Lb中不存在,则在La中删除该元素
                deleteList(La, i);
                i--; // 删除元素后,索引减一以保证下一次循环能够处理剩下的元素
            } else {
                // 如果元素在Lb中存在,我们暂时不做处理,因为在后续的排序操作中这些元素会被保留下来
            }
        }
    }
    

    在上述代码中,我们首先遍历顺序表La中的每一个元素,然后在Lb中查找这个元素是否存在。如果元素在Lb中不存在(即locateElem函数返回值为0),我们就从La中删除这个元素。如果元素在Lb中存在,我们暂时不做处理,因为在后续的排序操作中这些元素会被保留下来。这样,遍历结束后,La中就只剩下与Lb的交集部分了。最后我们对La进行排序并打印结果即可。

    注意:由于我们在删除元素后改变了顺序表的长度和索引,所以在删除元素时需要注意处理索引的问题,确保下一次循环能够处理剩下的元素。此外,上述代码假设输入的元素都是唯一的,如果存在重复元素,那么可能需要进一步处理。

    评论

报告相同问题?

问题事件

  • 创建了问题 9月29日

悬赏问题

  • ¥15 如何在vue.config.js中读取到public文件夹下window.APP_CONFIG.API_BASE_URL的值
  • ¥50 浦育平台scratch图形化编程
  • ¥20 求这个的原理图 只要原理图
  • ¥15 vue2项目中,如何配置环境,可以在打完包之后修改请求的服务器地址
  • ¥20 微信的店铺小程序如何修改背景图
  • ¥15 UE5.1局部变量对蓝图不可见
  • ¥15 一共有五道问题关于整数幂的运算还有房间号码 还有网络密码的解答?(语言-python)
  • ¥20 sentry如何捕获上传Android ndk 崩溃
  • ¥15 在做logistic回归模型限制性立方条图时候,不能出完整图的困难
  • ¥15 G0系列单片机HAL库中景园gc9307液晶驱动芯片无法使用硬件SPI+DMA驱动,如何解决?