代码示例如下:
#include "stdio.h"
#include "stdlib.h"
#include "sys/io.h"
#include "math.h"
#include "time.h"
#define OK 1
#define ERROR -1
#define TRUE 1
#define FALSE 0
#define MAXSIZE 20
typedef int Status;
typedef int ElemType;
Status visit(ElemType c)
{
printf("%d ",c);
return OK;
}
typedef struct
{
ElemType data[MAXSIZE];
int length;
}SqList;
Status InitList(SqList* L)
{
//memset(L->data,0,MAXSIZE);
L->length = 0;
return OK;
}
int ListLength(SqList L)
{
return L.length;
}
Status ListEmpty(SqList L)
{
if(ListLength(L) == 0)
{
return TRUE;
}
else
{
return FALSE;
}
}
Status ClearList(SqList* L)
{
//memset(L->data,0,MAXSIZE);
L->length = 0;
return OK;
}
Status GetElem(SqList L,int i,ElemType* e)
{
if(i >= 0 && i < L.length)
{
*e = L.data[i];
}
else
{
return ERROR;
}
return OK;
}
int LocateElem(SqList L,ElemType e)
{
int i;
if(L.length == 0)
{
return ERROR;
}
for(i = 0;i < L.length;i++)
{
if(e == L.data[i])
{
break;
}
}
return i >= L.length ? ERROR : i;
}
Status ListInsert(SqList* L,int i,ElemType e)
{
int j;
//ElemType tmp;
if(L->length >= MAXSIZE)
{
printf("List is full\n");
return ERROR;
}
if(i <= L->length)
{
for(j = L->length;j > i;j--)
{
L->data[j] = L->data[j - 1];
}
//tmp = L->data[i];
L->data[i] = e;
//L->data[i + 1] = tmp;
}
else
{
L->data[L->length] = e;
}
L->length += 1;
return OK;
}
Status ListDelete(SqList* L,int i)
{
int j;
if(i < L->length && L->length != 0)
{
for(j = i;j < L->length - 1;j++)
{
L->data[j] = L->data[j + 1];
}
}
else
{
return ERROR;
}
L->length -= 1;
return OK;
}
void list_union(SqList* La,SqList Lb)
{
int Lalen,Lblen,i;
Lalen = ListLength(*La);
Lblen = ListLength(Lb);
for(i = 0;i < Lblen;i++)
{
if(LocateElem(*La,Lb.data[i]) == ERROR)
{
ListInsert(La,Lalen,Lb.data[i]);
}
}
}
int main(void)
{
ElemType getdata;
int i;
SqList ll,ll1;
InitList(&ll);
ListInsert(&ll,0,1);
ListInsert(&ll,1,2);
ListInsert(&ll,2,3);
InitList(&ll1);
ListInsert(&ll1,0,2);
ListInsert(&ll1,1,3);
ListInsert(&ll1,2,4);
for(i = 0;i < ll.length;i++)
{
visit(ll.data[i]);
}
for(i = 0;i < ll1.length;i++)
{
visit(ll1.data[i]);
}
list_union(&ll,ll1);
printf("after union and insert then delete\n");
ListInsert(&ll,2,10);
ListDelete(&ll,1);
for(i = 0;i < ll.length;i++)
{
visit(ll.data[i]);
}
GetElem(ll,2,&getdata);
printf("the 1 data is %d\n",getdata);
return 0;
}