大写的酷 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 用土力学知识进行土坡稳定性分析与挡土墙设计
  • ¥70 PlayWright在Java上连接CDP关联本地Chrome启动失败,貌似是Windows端口转发问题
  • ¥15 帮我写一个c++工程
  • ¥30 Eclipse官网打不开,官网首页进不去,显示无法访问此页面,求解决方法
  • ¥15 关于smbclient 库的使用
  • ¥15 微信小程序协议怎么写
  • ¥15 c语言怎么用printf(“\b \b”)与getch()实现黑框里写入与删除?
  • ¥20 怎么用dlib库的算法识别小麦病虫害
  • ¥15 华为ensp模拟器中S5700交换机在配置过程中老是反复重启
  • ¥15 uniapp uview http 如何实现统一的请求异常信息提示?