#include <stdio.h>
#include <malloc.h>
#include <stdlib.h>
#define LIST_INIT_SIZE 10
#define LISTINCREMENT 2
typedef struct SqList
{
int *elem;
int length;
int listsize;
}SqList;
bool InitList(SqList *L);
bool ListInsert(SqList *L,int pos,int e);
bool ListTraverse(SqList *L);
bool GetElem(SqList L,int pos,int *e);
bool equal(int c1,int c2);
int LocateElem(SqList L,int e,bool (*compare)(int,int));
int ListLength(SqList L);
void Union(SqList *La,SqList Lb);
int main()
{
SqList La, Lb;
int j;
int va, vb;
int num1, num2;
InitList(&La);
printf("请输入La元素的个数:");
scanf("%d",&num1);
for(j = 1; j <= num1; j++)
{
printf("请输入La中第%d个元素的值为",j);
scanf("%d",&va);
ListInsert(&La,j,va);
}
printf("La = ");
ListTraverse(&La);
InitList(&Lb);
printf("请输入Lb中元素的个数:");
scanf("%d",&num2);
for(j = 1; j <= num2; j++)
{
printf("请输入Lb中第%d个元素的值为",j);
scanf("%d",&vb);
ListInsert(&Lb,j,vb);
}
printf("Lb = ");
ListTraverse(&Lb);
Union(&La,Lb);
printf("new La = ");
ListTraverse(&La);
return 0;
}
bool InitList(SqList *L)
{
L->elem = (int *)malloc(LIST_INIT_SIZE*sizeof(int));
if( L->elem == NULL)
{
printf("内存分配失败 程序终止!n");
exit(-1);
}
L->length = 0;
L->listsize = LIST_INIT_SIZE;
return true;
}
bool ListInsert(SqList *L,int pos,int e)
{
int * newbase, *q, *p;
if(pos < 1 || pos > L->length+1 )
return false;
if(L->length >= L->listsize)
{
newbase = (int *)realloc(L->elem,(L->listsize+LISTINCREMENT)*sizeof(int));
if(newbase == NULL)
{
printf("内存分配失败程序终止!n");
exit(-1);
}
L->elem = newbase;
L->listsize += LISTINCREMENT;
}
q = L->elem + pos - 1;
for(p = L->elem + L->length - 1; p >= q; --p)
*(p+1) = *p;
*q = e;
L->length++;
return true;
}
bool ListTraverse(SqList *L)
{
int *p;
int i;
p = L->elem;
for(i = 1; i <= L->length; i++)
{
printf("%d ",*p);
*p++;
}
printf("n");
return true;
}
void Union(SqList *La,SqList Lb)
{
int e;
int La_len, Lb_len;
int i;
La_len = ListLength(*La);
Lb_len = ListLength(Lb);
for(i = 1; i <= Lb_len; i++)
{
GetElem(Lb,i,&e);
if( !LocateElem(*La,e,equal) )
ListInsert(La,++La_len,e);
}
}
int ListLength(SqList L)
{
return L.length;
}
bool GetElem(SqList L,int pos,int *e)
{
if(pos < 1 || pos > L.length)
return false;
*e = *(L.elem + pos - 1);
return true;
}
bool equal(int c1,int c2)
{
if(c1 == c2)
return true;
else
return false;
}
int LocateElem(SqList L,int e,bool (*compare)(int,int))
{
int *p;
int i = 1;
p = L.elem;
while(i <= L.length && !compare(*(p++),e))
i++;
if(i <= L.length)
return i;
else
return 0;
}
程序执行结果: