| 
 | 
 
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内申请了一 ... 
 
 
 
 
 
 
 |