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