用顺序表实现求两个集合的并集

Posted xuzhiyi

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用顺序表实现求两个集合的并集相关的知识,希望对你有一定的参考价值。

#include<iostream.h>

#include<malloc.h>

#include<limits.h>

#include<string.h>

#include<stdlib.h>

#include<ctype.h>

#include<stdlib.h>

#include<process.h>

#define OK 1

#define INIT_LiST_SIZE 100//顺序表的初始长度

#define LIST_ADD 10//顺序表每次增加的长度

#define ERROR 0

#define OVERFLOW 3

typedef int Elemtype;

typedef struct

{

      Elemtype *elem;//顺序表的基地址

      int length;//顺序表的当前长度

      int listsize;//顺序表分配的长度

}SqList;

void InitList(Sqlist &La)//初始化顺序表

{

     La.elem=(Elemtype *)malloc(INIT_LIST_SIZE*sizeof(int));//开辟100个一连串的地址,并强制转化为Elemtype类型

     La.length=0;//顺序表的当前长度为0

     La.listsize=100;//目前顺序表的总长度

}

Elemtype ListInsert(Sqlist &La,int i,int e)//在顺序表的第i个元素前一个位置插入元素e

{

   if(i<1||i>La.length+1)return ERROR;//表示插入位置不合理

   if(La.listsize>=La.length)

   {

         Elemtype *newbase=(Elemtype *)realloc(La.elem,(INIT_LIST_SIZE+LIST_ADD)*sizeof(int));//给当前顺序表增加长度

         La.elem=newbase;//将新开辟的一片连续地址的首地址赋给基地址

   }

    int *q=La.elem[i-1];

    for(int *p=La.elem[lLa.length-1];p>=q;p--)

   {

         *(p+1)=*(p);//j将顺序表的最后一个元素到*q这个元素一次向后移一个位置

   }

   *q=e;//插入元素

   La.length++;//顺序表的长度加1

   return OK;

}

SqList Union(SqList La,SqList Lb,SqList &Lc)//求两个集合的相同元素并插入到Lc中

{

   int La_len=La.length;

   int Lb_len=Lb.length;

   int i=1;

    for(int *p=La.elem;p<=La.elem[La_len-1];p++)

         for(int *q=Lb.elem;q<=Lb.elem[Lb_len-1];q++)//此处类似于冒泡排序法

 

              {

                   if(*p==*q)

                      {

                           ListInsert(Lc,i;*p);

                            i++;

                            break;//此处的break可以减少不必要的查找,减少计算机的工作量

                      }

              }

 return Lc;

}

void Print(SqlList La)//输出函数

{

     for(int *p=La.elem;p<=La.elem[La.length-1];p++)cout<<*p<<endl;

}

void main()

{

     int a[3]={1,2,3};

     int b[4]={1,2,3,4};

     SqList La,Lb,Lc;

    InitList(La);

   InitList(Lb);

   InitList(Lc);

   for(int i=1;i<=3;i++)ListInsert(La,i,a[i-1]);//将数组a的元素插入到La中

   for(int j=1;j<=4;j++)ListInsert(Lb,j,b[j-1]);//将数组b中的元素插入到Lb中

   Print(Union(La,Lb,Lc));

 

  

 

 

 

 

        

    

   

以上是关于用顺序表实现求两个集合的并集的主要内容,如果未能解决你的问题,请参考以下文章

实现一个MySQL自定义函数:求两个JSONArray的并集

C#中求数组并集的算法

数据结构实践——“求两集合交集”的一个错解分析

C++求两个集合的交集

用java编写程序,求集合的并集、交集和差集

数据结构C++实现顺序表实现集合操作:交集并集与差集