回 帖 发 新 帖 刷新版面

主题:急需解决的线性表问题

原题:
假定线性表La的类型为struct List,元素类型ElemType为int,请写出该主函数的程序。
void main()
  {
    int i;
    struct List La;
    int a[]={48,26,57,34,62,79};
    InitList(&La,5);
    for(i=0;i<6;i++)
        InsertFirstList(&La,a[i]);
    TraverseList(&La);
  }

我编译的程序是:
#include<stdio.h>
#include<stdlib.h>

typedef int ElemType;
struct List {
    ElemType *list;
    int size;
    int MaxSize;
};

void InitList(struct List *L,int ms);
void InsertFirstList(struct List *L,ElemType x);
void againMalloc(struct List *L);
void TraverseList(struct List *L);

void InitList(struct List *L,int ms)
{
    if(ms<=0) {printf("ms值非法!\n"); exit(1);}
    L->MaxSize=ms;
    //  L->list=malloc(ms*sizeof(ElemType));
    if(!L->list) {
        printf("动态存储分配失败!\n");
        exit(1);
    }
    L->size=0;
}
void InsertFirstList(struct List *L,ElemType x)
{
    int i;        
    if(L->size==L->MaxSize)
      //  againMalloc(L);
    for(i=L->size-1;i>=0;i--)
        L->list[i+1]=L->list[i];
    L->list[0]=x;
    L->size++;
}
void againMalloc(struct List *L)
{
    ElemType *p=(ElemType*)realloc(L->list,2*L->MaxSize*sizeof(ElemType));
    if(!p) {
        printf("存储空间用完!\n");
        exit(1);
    }
    L->list=p;
    L->MaxSize=2*L->MaxSize;
}
void TraverseList(struct List *L)
{
    int i;
    for(i=0;i<L->size;i++)
        printf("%d",L->list[i]);
    printf("\n");
}
void main()
    {
    int i;
    struct List La;
    int a[]={48,26,57,34,62,79};
    InitList(&La,5);
    for(i=0;i<6;i++)
        InsertFirstList(&La,a[i]);
    TraverseList(&La);
}

编译成功,但是不能运行,不知是什么原因?急需高手帮助解决该题。

回复列表 (共1个回复)

沙发

我看了看!问题很多啊!
首先你把L->list=malloc(ms*sizeof(ElemType));怎么注释掉了呢? 
没有分配空间,自然什么也没有!
接着,我不太明白你结构中的maxsize还有size是什么意思!我的理解是size表示已经装进去几个数了
maxsize是总的容量。那maxsize应该为5+1
其实是很简单的赋值,你弄得很复杂,整理下思路吧 

我来回复

您尚未登录,请登录后再回复。点此登录或注册