鱼C论坛

 找回密码
 立即注册
查看: 3386|回复: 2

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

[复制链接]
发表于 2014-5-6 19:40:38 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 风中醉柳 于 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");   
}


想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 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");   
}

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-5-11 16:40:28 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-24 18:00

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表