数据结构

一、线性表的顺序存储结构

#include

#define OK 1
#define ERROR 0
#define TRUE 1
#define FALSE 0
#define MIXSIZE 20

typedef int Status;
typedef int ElemType;

typedef struct
{
	ElemType data[MIXSIZE];
	int length;
}SqList;

Status InitList(SqList *L)
{
	L->length = 0;
	return OK;
}

int ListLength(SqList L)
{
	return L.length;
}

Status ListEmpty(SqList L)
{
	if(L.length == 0)
	{
		return TRUE;
	}
	else
	{
		return FALSE;
	}
}

Status ClearList(SqList *L)
{
	L->length = 0;
	return TRUE;
}

Status GetElem(SqList L,int i,ElemType *e)
{
	if(L.length == 0 || i<1 ||i>L.length)
	{
		return ERROR;
	}
	*e = L.data[i-1];
	return OK;
}

int LocateElem(SqList L,ElemType e)
{
	int i;
	if(L.length == 0)
		return ERROR;
	for(i=0;ilength == MIXSIZE)
	{
		printf("List is full\n");
		return ERROR;
	}

	if (i<1 || i>L->length+1)/* 当i比第一位置小或者比最后一位置后一位置还要大时 */
		return ERROR;

	if (i<=L->length)        /* 若插入数据位置不在表尾 */
	{
		for(k=L->length-1;k>=i-1;k--)  /* 将要插入位置之后的数据元素向后移动一位 */
			L->data[k+1]=L->data[k];
	}
	L->data[i-1]=e;          /* 将新元素插入 */
	L->length++;

	return OK;
}

Status ListDelete(SqList *L,int i,ElemType *e)
{
	int k;
	if(L->length == 0)
		return ERROR;		
	if(i<1||i>L->length)
		return ERROR;
	*e = L->data[i-1];
	if(ilength)
	{
		for(k=i;klength;k++)
			L->data[k-1] = L->data[k];
	} 
	L->length--;
	return OK;
}

ShowList(SqList L)
{
	int i;
	if (TRUE == ListEmpty(L))
	{
		printf("This List is EMPTY!");
	}

	for(i=0;i",L.data[i]);
	}

	printf("%d\n",L.data[L.length-1]);
}

/*将所有在线性表Lb中但不在La中的数据元素插入到La中*/
void unionList(SqList *La,SqList Lb)
{
	int La_len,Lb_len,i;
	ElemType e;
	La_len = ListLength(*La);
	Lb_len = ListLength(Lb);
	for(i=1;i<=Lb_len;i++)
	{
		GetElem(Lb,i,&e);
		if(!LocateElem(*La,e))
			ListInsert(La,++La_len,e);
	}
}

int main(void)
{
	SqList L1;
	SqList L2;

	ElemType e;

	Status s;

	int i,j;
	s = InitList(&L1);
	printf("初始化L后:L1.length=%d\n",L1.length);
	for(j=1;j<=5;j++)
	{
		s = ListInsert(&L1,1,j);
	}

	s = InitList(&L2);
	for(j=1;j<=10;j++)
	{
		s = ListInsert(&L2,1,j);
	}

	ShowList(L1);
	ShowList(L2);

	GetElem(L1,4,&e);
	printf("第5个元素为:%d\n",e);

	s = ListDelete(&L2,8,&e);
	if(s==ERROR)
		printf("删除失败!\n");
	else
		 printf("删除的元素值为:%d\n",e);

	ShowList(L2);
	
	unionList(&L1,L2);
	ShowList(L1);
}

 

你可能感兴趣的:(数据结构)