大写的酷 2022-03-17 12:11 采纳率: 66.7%
浏览 55
已结题

我用vs2010实现链栈的基本操作,最后我想打印出所有元素,为什么出来的是乱码啊

我用vs2010实现链栈的基本操作,最后我想打印出所有元素,为什么出来的是乱码啊

img

img

img

  • 写回答

4条回答 默认 最新

  • 关注

    你的代码错误很多,你的节点都是往链表前面插入的,如果不带头节点,初始化函数就没有任何意义了。
    带头和不带头的代码都给你写了,如下:
    带头节点的代码:

    #define _CRT_SECURE_NO_WARNINGS 1
    #include <stdio.h>
    #include <stdlib.h>
    
    typedef int ElemType;
    
    typedef struct LinkStack
    {
        struct LinkStack* next;
        ElemType data;
    }LS;
    
    //初始化
    LS* InitStack(LS* s)
    {
        s = (LS*)malloc(sizeof(LS));
        s->next = 0;
        return s;
    }
    //打印所有元素
    void my_printf(LS* s)
    {
        LS* p;
        if (s == 0)
        {
            printf("链表为空\n");
            return;
        }
        p = s->next;
        while (p)
        {
            printf("%d ", p->data);
            p = p->next;
        }
        printf("\n");
    }
    
    //入栈
    void PushStack(LS* s, ElemType x)
    {
        LS* p = (LS*)malloc(sizeof(LS));
        p->data = x;
        p->next = s->next;
        s->next = p;
    }
    //出栈
    void PopStack(LS* s)
    {
        LS* p;
        if (s == 0 && s->next == 0)
        {
            printf("栈为空\n");
            return ;
        }
        p = s->next;
        s->next = p->next;
        free(p);
    }
    
    int main()
    {
        LS* s=0;
        s = InitStack(s);
        PushStack(s, 2);
        PushStack(s, 4);
        PushStack(s, 3);
        my_printf(s);
        return 0;
    }
    
    

    不带头的代码:

    #define _CRT_SECURE_NO_WARNINGS 1
    #include <stdio.h>
    #include <stdlib.h>
    
    typedef int ElemType;
    
    typedef struct LinkStack
    {
        struct LinkStack* next;
        ElemType data;
    }LS;
    
    
    //打印所有元素
    void my_printf(LS* s)
    {
        LS* p;
        if (s == 0)
        {
            printf("链表为空\n");
            return;
        }
        p = s;
        while (p)
        {
            printf("%d ", p->data);
            p = p->next;
        }
        printf("\n");
    }
    
    //入栈
    LS* PushStack(LS* s, ElemType x)
    {
        LS* p = (LS*)malloc(sizeof(LS));
        p->data = x;
        p->next = s;
        return p;
    }
    //出栈
    LS* PopStack(LS* s)
    {
        LS* p;
        if (s == 0 )
        {
            printf("栈为空\n");
            return 0;
        }
        p = s->next;
        free(s);
        s = p;
        return s;
    }
    
    int main()
    {
        LS* s=0;
        //s = InitStack(s);
        s = PushStack(s, 2);
        s = PushStack(s, 4);
        s = PushStack(s, 3);
        my_printf(s);
        return 0;
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(3条)

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 3月17日
  • 已采纳回答 3月17日
  • 创建了问题 3月17日

悬赏问题

  • ¥15 微信会员卡等级和折扣规则
  • ¥15 微信公众平台自制会员卡可以通过收款码收款码收款进行自动积分吗
  • ¥15 随身WiFi网络灯亮但是没有网络,如何解决?
  • ¥15 gdf格式的脑电数据如何处理matlab
  • ¥20 重新写的代码替换了之后运行hbuliderx就这样了
  • ¥100 监控抖音用户作品更新可以微信公众号提醒
  • ¥15 UE5 如何可以不渲染HDRIBackdrop背景
  • ¥70 2048小游戏毕设项目
  • ¥20 mysql架构,按照姓名分表
  • ¥15 MATLAB实现区间[a,b]上的Gauss-Legendre积分