风中醉柳 发表于 2014-5-6 19:40:38

用头插法创建单链表实现栈的操作,存在BUG!不过 调试器什么的都坏了...

本帖最后由 风中醉柳 于 2014-5-6 19:43 编辑

谁能帮我看下bug存在哪里....谢谢咯

#include<stdio.h>
#include<stdlib.h>

typedef int Emptype;
struct L_stack
{
    Emptype data;
    struct L_stack * next;
}StackSize;

typedef struct L_stack *Ptr;
typedef Ptr hStack;

hStack initstack()
{
    hStack sBottom;
    sBottom=(hStack )malloc(sizeof(StackSize));
    if(!sBottom)
      return NULL;
    sBottom->next=NULL;
    return sBottom;
}

void push(hStack s,Emptype a)
{
    hStack add;
    add=(hStack )malloc(sizeof(StackSize));
    if(!add)
         printf("stack NO space\n");
    add->data=a;
    add->next=s->next;
    s->next=add;
}

Emptype pop(hStack s)
{
    if(!s)
      return 0;
    hStack r=s;
    Emptype io;
    io=s->data;
    s=s->next;
    free(r);
    return io;
}

void DestoryStack(hStack s)
{
    hStack r;
    if(!s)
   printf("stack NO start\n");
    while(s)
    {
      r=s;
      s=s->next;
      free(r);
    }
}

int main(void)
{
    hStack q=initstack(),S;
    int i;
    S=q->next;
    for(i=0;i<=5;i++)
      push(S,i);
    for(i=0;i<5;i++)   
      printf("%d ",pop(S));
    printf("\n");   
}


elvo 发表于 2014-5-7 16:45:40

本帖最后由 elvo 于 2014-5-7 16:46 编辑

根据你的code修改了一下,修改的地方大都做了注释的
#include<stdio.h>
#include<stdlib.h>

typedef int Emptype;
typedef struct L_stack
{
    Emptype data;
    struct L_stack * next;
}StackSize;

typedef struct L_stack *Ptr;
typedef Ptr hStack;

/*
hStack initstack()
{
    hStack sBottom;
    sBottom=(hStack )malloc(sizeof(StackSize));
    if(!sBottom)
      return NULL;
    sBottom->next=NULL;
    return sBottom;
}
*/

void push(hStack *s,Emptype a)    //传入了指向s的指针,以便能修改s
{
    hStack add;
    add=(hStack )malloc(sizeof(StackSize));
    if(!add)
         printf("stack NO space\n");
    add->data=a;
    if(!(*s)){                  
            add->next=NULL;
            (*s)=add;
    }
    else{
            add->next=(*s);
            (*s)=add;
    }
           

}

Emptype pop(hStack *s)   //同上
{
    if(!(*s))
      return 0;
    hStack r=(*s);
    Emptype io;
    io=(*s)->data;
    (*s)=(*s)->next;
    free(r);
    return io;
}

void DestoryStack(hStack *s)
{
    hStack r;
    if(!(*s))
   printf("stack NO start\n");
    while((*s))
    {
      r=(*s);
      (*s)=(*s)->next;
      free(r);
    }
}

int main(void)
{
    hStack q=NULL;
    int i;
    //S=q->next; 为什么要这样做S=NULL
    for(i=0;i<=5;i++)
      push(&q,i);
//DestoryStack(&q);
    for(i=0;i<5;i++)   
      printf("%d ",pop(&q));
    printf("\n");   
}


风中醉柳 发表于 2014-5-11 16:40:28

elvo 发表于 2014-5-7 16:45 static/image/common/back.gif
根据你的code修改了一下,修改的地方大都做了注释的

现在已经好了,能用
页: [1]
查看完整版本: 用头插法创建单链表实现栈的操作,存在BUG!不过 调试器什么的都坏了...