数据结构实践——顺序表:两集合的交集

【项目 - 求集合并集】
  假设有两个集合 A 和 B 分别用两个线性表 LA 和 LB 表示,即线性表中的数据元素即为集合中的成员。设计算法,用函数unionList(List LA, List LB, List &LC )函数实现该算法,求一个新的集合C=A∪B,即将两个集合的并集放在线性表LC中。

提示:
(1)除了实现unnionList函数外,还需要在main函数中设计代码,调用unionList进行测试和演示;
(2)可以充分利用前面建好的算法库[点击…],在程序头部直接加 #include<list.h>即可(工程中最普遍的方法,建议采纳);
(3)也可以将实现算法中需要的线性表的基本运算对应的函数,与自己设计的所有程序放在同一个文件中。

[参考解答]

#include "list.h"
#include <stdio.h>

void unionList(SqList *LA, SqList *LB, SqList *&LC)
{
    int lena,i;
    ElemType e;
    InitList(LC);
    for (i=1; i<=ListLength(LA); i++) //将LA的所有元素插入到Lc中
    {
        GetElem(LA,i,e);
        ListInsert(LC,i,e);
    }
    lena=ListLength(LA);         //求线性表LA的长度
    for (i=1; i<=ListLength(LB); i++)
    {
        GetElem(LB,i,e);         //取LB中第i个数据元素赋给e
        if (!LocateElem(LA,e)) //LA中不存在和e相同者,插入到LC中
            ListInsert(LC,++lena,e);
    }
}

//用main写测试代码
int main()
{
    SqList *sq_a, *sq_b, *sq_c;
    ElemType a[6]= {5,8,7,2,4,9};
    CreateList(sq_a, a, 6);
    printf("LA: ");
    DispList(sq_a);

    ElemType b[6]= {2,3,8,6,0};
    CreateList(sq_b, b, 5);
    printf("LB: ");
    DispList(sq_b);
    unionList(sq_a, sq_b, sq_c);
    printf("LC: ");
    DispList(sq_c);
    return 0;
}

补充参考:[“求两集合交集”的一个错解分析]

时间: 2024-09-14 02:18:57

数据结构实践——顺序表:两集合的交集的相关文章

输入集合A、B和全集C,求两集合的交集、并集、补集、差集

//输入集合A.B和全集C,求两集合的交集.并集.补集.差集 /* 并集:以属于A或属于B的元素为元素的集合成为A与B的并(集) 交集: 以属于A且属于B的元素为元素的集合成为A与B的交(集) 差:以属于A而不属于B的元素为元素的集合成为A与B的差(集) 补集:A的补集C-B */ /* 例如:A={1,2,3} B={2,3,4} C={1,2,3,4,5} AB并集为={1,2,3,4} 交集为={2,3} A补集={4,5} AB差集为={1} */ #include <iostream>

顺序表求集合问题-为什么第37行改成if(j=k),程序就出错,明明j不可能大于k啊

问题描述 为什么第37行改成if(j=k),程序就出错,明明j不可能大于k啊 //求集合A和B的交集#include #include #define MAXSIZE 100 /*顺序表结构体定义*/typedef struct node { int data[MAXSIZE]; int length;}SeqList*PSeqList; /*顺序表的初始化*/PSeqList Init_SeqList(void){ PSeqList PL; PL=(PSeqList)malloc(sizeof

算法与数据结构之顺序表顺序表

著名的计算机科学家N.Wirth教授曾提出一个公式:算法+数据结构=程序 "数组"类型表示顺序存储结构,用指针来表示链式存储结构.指针p指向下一个对象单元,p的值不是一增加1,而是增加对象类型所占的字节数. 一个结构提示类型student,没有定义变量,就不会分配存储单元,不能再程序中直接访问结构体类型名. 线性表是N个具有相同特性的数据元素的有限序列.线性表分为 顺序存储结构和链式存储结构. 顺序表: /*顺序表的建立与输出*/ #include<stdio.h>#inc

java数据结构实现顺序表示例_java

复制代码 代码如下: import java.util.Arrays;/** * 顺序线性表的实现 */public class LineList<E>{  private int size;   //长度 private Object[] array;  //底层数组 private final int default_length=16; //默认长度 /**  * 无参构造方法  */ public LineList(){  size = 0;  //使用默认长度构造数组  array

顺序存储线性表-数据结构顺序表的操作(c++)

问题描述 数据结构顺序表的操作(c++) 求解答谢谢 解决方案 贴出代码而不是截图.发了帖子你难道自己不看下.这么小的字根本看不清. 解决方案二: 什么是线性表?定义:由n(n>=0)个数据类型相同的数据元素组成的有限序列.特点是:在数据元素的非空有限集合中,除第一个元素无直接前驱,最后一个元素无直接后继外,集合中其余每个元素均有唯一的直接前驱和直接后继.什么是顺序表,在这里回答一下.顺序表就是线性表的顺序存储,其特点是:物理顺序与逻辑顺序是相同的,关系线性化,结点顺序存.线性表顺序存储的表示?

归并排序-数据结构C语言顺序表的排序和删除问题

问题描述 数据结构C语言顺序表的排序和删除问题 顺序表定义的长度为10000,此时程序可以正常运行:把顺序表长度改成500000,程序出错,不能运行.求问大神是哪里出了错误,还是要提高存储上限?如何改正?#include #include #include typedef int ElemType; #define MAX 10000 typedef struct{ ElemType *elem; int length; }SqList; void InitList(SqList &L){ L.

线性表-数据结构顺序表合并中指针怎么用才能运行?

问题描述 数据结构顺序表合并中指针怎么用才能运行? 已知线性表LA和LB中的数据元素按值非递减有序,现要求将LA和LB归并为一个新的线性表LC,且LC中的数据元素仍按值非递减有序排列. 怎么改呢? 初学,数据结构小白 额..,用的顺序表 解决方案 http://blog.sina.com.cn/s/blog_9671d51801019cpj.html 解决方案二: 数据结构笔记--顺序表数据结构 顺序表及合并数据结构之顺序表

调试-数据结构顺序表debug assertion failed

问题描述 数据结构顺序表debug assertion failed //文件linearlist.h #include template class LinearList { public: virtual bool Isempty()const=0; virtual int Length()const=0; virtual bool Find(int i,T &x)const=0; virtual int Search(T x)const=0; virtual bool Insert(int

c++-请问谁有数据结构(C++)顺序表的源代码

问题描述 请问谁有数据结构(C++)顺序表的源代码 输入几个数,然后实现由小到大的排列,之后再第一个数和第二个数之间插入一个数 解决方案 http://blog.csdn.net/ristal/article/details/5915097 解决方案二: 数据结构电话号码本源代码(顺序表)数据结构 顺序表的操作(源代码)数据结构之顺序表