线性表的顺序存储结构学习笔记(二)

我利用C语言的malloc函数和free函数实现了一个动态容量的顺序储存线性表,并写了相关操作函数,并给出例程。
#include 
#include 
#define MAXSIZE 20
#define bool int
#define true 1
#define false 0
#define ok 1
#define error 0
typedef int ElemType;
typedef int Status;

typedef struct
{
	ElemType *data;
	int length;
}SqList;

SqList InitList(int ElemType_length);
void ClearList(SqList *L);
int ListLength(SqList L);
bool ListEmpty(SqList L);
void ListInflate(SqList *L,int more_length);
ElemType* listat(SqList *L,int index);

int main(int argc, char *argv[]) {
	int i;
	SqList list1=InitList(1);
	printf("线性表list1的长度是%d\n",ListLength(list1));
	printf("线性表list1是否为空?%d\n",ListEmpty(list1));
	ListInflate(&list1,5);
	printf("线性表list1的长度是%d\n",ListLength(list1));
	for(i=1;i<=10;i++)
		*(listat(&list1,i))=i;	
	for(i=1;i<=10;i++)
		printf("第%d是%d\n",i,*(listat(&list1,i)));
	printf("线性表list1的长度是%d\n",ListLength(list1));
	ClearList(&list1);
	printf("线性表list1是否为空?%d\n",ListEmpty(list1));
	return 0;
}

/*初始化操作,建立一个任意长度的线性表L并返回*/
SqList InitList(int ElemType_length)
{
	SqList L;
	L.data=(ElemType*)malloc(sizeof(ElemType)*ElemType_length);
	L.length=ElemType_length;
	return L; 
}

/*清空线性表*/
void ClearList(SqList *L)
{
	free(L->data);
	L->length=0;
}

/*返回线性表的长度*/
int ListLength(SqList L)
{
	return L.length; 
}

/*线性表是否为空*/
bool ListEmpty(SqList L)
{
	if(L.length==0)
		return true;
	else
		return false;
}

/*扩增线性表容量*/
void ListInflate(SqList *L,int more_length)
{
	int i;
	ElemType *p=(ElemType*)malloc(sizeof(ElemType)*(L->length+more_length));
	for(i=0;ilength;i++)
		p[i]=L->data[i];
	free(L->data);
	L->data=p;
	L->length=L->length+more_length; 
}

/*返回线性表某个元素的地址*/
ElemType* listat(SqList *L,int index)
{
	if(index>L->length)
		ListInflate(L,index-(L->length));
	return &(L->data[index-1]);
}



你可能感兴趣的:(C语言)