我利用C语言的malloc函数和free函数实现了一个动态容量的顺序储存线性表,并写了相关操作函数,并给出例程。
#include <stdio.h>
#include <stdlib.h>
#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;i<L->length;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]);
}