如题
typedef int status;
typedef int ElemType;
typedef struct //结构体构建
{
ElemType *elem; //储存空间基址
int len; //表的当前长度
int size; //当前分配的存储容量
} Line;
status LineInit(Line *L) //构造一个空的线性表
{
(*L).elem = (ElemType *)malloc(initsize*sizeof(ElemType)); //根据存储空间基址类型开辟空间
if((*L).elem==NULL)
exit (FALSE); //分配失败
(*L).len=0; //空表的长度为0
(*L).size=initsize; //初始储存容量
return OK;
}
status LineInsert(Line *L,int i,ElemType e) //插入数据
{
ElemType *newbase; //开辟新的空间
ElemType *p; //定义指针
int j;
if(i<1 || i>(*L).len+1)
return FALSE;
if((*L).len == (*L).size)//线性表满
{
newbase=(ElemType *)realloc((*L).elem,((*L).size+addsize)*sizeof(ElemType)); //开辟新空间
if(!newbase)
exit (FALSE); //开辟失败,退出
(*L).elem=newbase; //指针指向新开辟的空间
(*L).size=(*L).size+addsize;
}
//插入数据
p=(*L).elem;
for(j=0; j<(*L).len-i+1; j++)
*(p+(*L).len-j)=*(p+(*L).len-j-1);
*((*L).elem+i-1)=e;
(*L).len++;
return OK;
}
status LineDelete(Line *L,int i,ElemType *e)//删除数据
{
int j;
if(i<1 || i>(*L).len)
return FALSE;
*e=*((*L).elem+i-1);
for(j=0; j<(*L).len-i; j++)
*((*L).elem+i-1+j)=*((*L).elem+i+j);
(*L).len--;
return OK;
}
status LineDisplay(Line L) //展示表中原有的数据
{
int i;
for(i=0; i<L.len; i++)
{
printf("%5d",*(L.elem+i));
}
printf("\n");
return OK;
}
status LineLenth(Line L) //返回当前表长
{
return L.len;
}
status LineEmpty(Line *L) //清空列表
{
(*L).len=0;
return OK;
}
status LineDestory(Line *L) //释放内存
{
free((*L).elem);
(*L).elem=NULL;
(*L).len=0;
(*L).size=0;
return OK;
}
status ElemGet(Line L,int i,ElemType *e) //获取新的元素
{
if(i<1 || i>L.len)
return FALSE;
*e=*(L.elem+i-1);
return OK;
}
int main()
{
Line L;
ElemType i,e;
LineInit(&L); //初始化
for(i=0; i<initsize+5; i++) //插入一些测试数据
{
LineInsert(&L,1,i);
}
printf("current number is\n");
LineDisplay(L);//显示线性表的内容
LineDelete(&L,2,&e);//删除其中一个数据
printf("after delete No.2\n");
LineDisplay(L);//显示线性表的内容
ElemGet(L,3,&e);//获取其中一个数据
printf("ElemGet No.3 is %d\n",e);
LineInsert(&L,5,34);//再次插入测试数据
printf("after add No.5\n");
LineDisplay(L);
LineEmpty(&L);//清空线性表的内容
LineDestory(&L);//销毁这个线性表
return 0;
}