首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

C语言版数据结构——栈的初始化有关问题

2013-10-30 
C语言版数据结构——栈的初始化问题不知为什么,程序一运行就异常停止。求大神帮看看哪里不对啊!!但是书上就是

C语言版数据结构——栈的初始化问题
不知为什么,程序一运行就异常停止。求大神帮看看哪里不对啊!!

但是书上就是这么干的啊。。。请问要怎么初始化,S指向谁呢,我就是想初始化S,InitStack()函数就是用来初始化S的啊。。。C语言版数据结构——栈的初始化有关问题

把你的书扔了吧。
S没有初始化,居然就S->base
看来你可以这样试试:
void main()
{
    int N = 4;
    SqStack S;
    InitStack(&S);//初始化一个栈
    Push(&S,5);    //放一个数字5进去
    Print(&S);    //看看能不能输出来
 
}
[解决办法]

Status Push(SqStack *S, SElemType e)//压栈操作
{
    if(S->top - S->base >= S->stacksize)
    {
        S->base = (SElemType *)malloc((S->stacksize + STACKCREMENT) * sizeof(SElemType));
        if(!S->base)exit(OVERFLOW);
        S->top = S->base + S->stacksize;//
        S->stacksize += STACKCREMENT;        
    }
    printf("xx");//debug
    *(S->top) = e;
    printf("%d",*(S->top));
    S->top++;
    return OK;
}

改成

Status Push(SqStack *S, SElemType e)//压栈操作
{
#define USE_REALLOC 1
    if(S->top - S->base >= S->stacksize)
    {
        //申请一块更大的内存
#if USE_REALLOC
        // realloc 重新申请更大内存。会自动搬迁数据。
       
        SElemType * p  =(SElemType *)realloc(S->base,(S->stacksize + STACKCREMENT) * sizeof(SElemType));
        if( !p ){ free(S->base); exit(OVERFLOW);} 


        S->base = p;

 #else //if USE_MALLOC
        //malloc 版重新申请更大内存,自己搬迁数据。
        
        SElemType * p  = (SElemType *)malloc((S->stacksize + STACKCREMENT) * sizeof(SElemType));
        if(!S->base){
           free(S->base);
           exit(OVERFLOW);
        }
        memcpy(p,S->base,S->stacksize * sizeof(SElemType));
        free(S->base);
        S->base = p;   
#endif
   
        S->top = S->base + S->stacksize;//
        S->stacksize += STACKCREMENT;        
    }
    printf("xx");//debug
    *(S->top) = e;
    printf("%d",*(S->top));
    S->top++;
    return OK;
#undef USE_REALLOC
}

void PrintElem(const SElemType *e)
{
      printf("%d ",*e);
}

void Print(SqStack *S)//打印
{
    SElemType *p;
    p=S->base;
    if(S->base == S->top)
    {
        printf("\n空栈!没有数据用来输出!\n");
        exit(FLASE);
    }
    else
    { //printf("%d"); 开玩笑,这能输出啥子??缺少参数 %d,格式需要一个整形参数。
      //  p++;
       while(p!= S->top)
          PrintElem(p++);  //输出栈里存放的所有数。     
    }
}


添加一个函数,释放内存。
Destroy(SqStack *S){
free(S->base);
}
//修改main,释放内存。
int main()
{
    int N = 4;
    SqStack S;
    InitStack(&S);//初始化一个栈
    Push(&S,5);    //放一个数字5进去
    Print(&S);    //看看能不能输出来
    Destroy(&S);  //释放内存
    return 0;
}

热点排行