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

荒凉一梦 提交于 2020-03-05 13:59:15

#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));

 

  

 

 

 

 

        

    

   

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!