|
4鱼币
# include<stdio.h>
# include<stdlib.h>
# define OK 1
# define ERROR 0
# define TRUE 1
# define FALSE 0
# define MAXSIZE 20
typedef int ElemType;
typedef int Status;
typedef struct
{
ElemType data[MAXSIZE];
int length;
}SqList;
Status InitList(SqList *L);
Status DestroyList(SqList *L);
Status ClearList(SqList *L);
Status ListEmpty(SqList L);
Status ListLength(SqList L);
Status GetElem(SqList L,int i,ElemType *e);
Status ListInsert(SqList *L, int i, ElemType e);
Status ListDelete(SqList L, int i, ElemType *e);
void main()
{
SqList *La;
int i, e, k=5;
InitList(La);
for(i=1;i<=k;i++)
{
printf("输入数字:\n");
scanf("%d",&e);
ListInsert(La,i,e);
}
}
//构造一个空的线性表L。
Status InitList(SqList *L)
{
int i;
L = (SqList * )malloc(sizeof(SqList) );
if(L->data == NULL)
{
return ERROR;
}
for(i=0;i<MAXSIZE;i++)
{
L->data[i] = 0;
}
L->length = 0;
return OK;
}//InstInsert
//线性表已存在,线性表L
Status DestroyList(SqList *L)
{
free(L);
return OK;
}//DestroyList
//线性表L已存在,将L重置为空表
Status ClearList(SqList *L)
{
L->length=0;
return OK;
}//ClearList
//线性表L已存在,若L为空表,则返回TRUE,否则返回FALSE
Status ListEmpty(SqList L)
{
if(L.length == 0)
{
return TRUE;
}
else
{
return FALSE;
}
}//ListEmpty
//线性表已存在,返回L中数据元素的个数
Status ListLength(SqList L)
{
return (L.length);
}//ListLength
//线性L表已存在,1<=i<=ListLength(L)。用e返回L中第i个数据元素的值
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;
}//GetElem
//线性L表已存在,1<=i<=ListLength(L)+1。在L中第i个位置之前插入数据元素e,L的长度加1.
Status ListInsert(SqList *L, int i, ElemType e)
{
int k=0;
if( L->length == MAXSIZE || i<1 || i>L->length+1)
{
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;
}//ListInsert
//线性表L已存在且非空,1<=i<=ListLength(L)。删除L的第i个数据元素,并用e返回其值,L的长度减1。
Status ListDelete(SqList L, int i, ElemType *e)
{
int k;
if( i<1 || i > L.length +1 )
{
return ERROR;
}
* e = L.data[i-1];
if( i< L.length+1)
{
for(k=L.length-1; k>=i-1; k--)
{
L.data[k-1] = L.data[k];
}
}
L.length--;
return OK;
}//ListInsert
运行时崩溃了
|
最佳答案
查看完整内容
主函数中的InitList函数调用有问题,结构体指针La的值做参数传入InitList函数,相当于将一个地址(指向结构体)传入函数,但是在InitList函数内部,重新申请结构体的内存空间,将会获得一个新的地址,指向申请的结构体,使用指针变量做函数参数的好处是,指针提供了一个地址,函数内部可以将处理后的结果保存到该地址所指向的空间,而无法实现指针变量值的更改,因而La的值还是保持原来的地址,最后的结果就是,InitList内申请了一 ...
|