用順序表實現求兩個集合的並集


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

 

  

 

 

 

 

        

    

   


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM