hyp永恒冰川 2022-03-03 19:43 采纳率: 66.7%
浏览 26
已结题

C语言栈的实现,显示栈元素的时候输出是这样的,有谁能看一下吗?

img

#include<stdio.h>
#include<stdlib.h>
typedef int datatype;
typedef struct LinkStack {
datatype data;
struct LinkStack* next;
}LinkStack;
LinkStack* InitStack() {
LinkStack* top;
top = NULL;
printf("初始化成功\n");
return top;
}
int EmptyStack(LinkStack* top) {
if (top == NULL)
return 1;
else
return 0;
}
void GetTop(LinkStack* top) {
LinkStack* p;
p = (LinkStack*)malloc(sizeof(LinkStack));
p = top;
if (EmptyStack(p)) {
printf("栈空\n");
}
else {
printf("栈顶元素为%d\n", p->data);
}
}
LinkStack* Push(LinkStack top) {
LinkStack
p;
p = (LinkStack*)malloc(sizeof(LinkStack));
if(p){
printf("请输入数据:\n");
scanf_s("%d", &p->data);
p->next = top;
top = p;
printf("进栈成功\n");
GetTop(top);
return top;
}
}
LinkStack* Pop(LinkStack* top) {
LinkStack* p;
if (EmptyStack(top)) {
printf("栈空\n");
return NULL;
}
else {
p = top;
top = top->next;
free(p);
printf("出栈成功\n");

    return top;
}

}
void ShowStack(LinkStack* top) {
LinkStack* p;
if (EmptyStack(top)) {
printf("栈为空\n");
}
else {
p = top;
printf("栈顶到栈底元素为:\n");
while (p) {
printf("%d ",p->data);
p = p->next;
}
}
}
int main() {
LinkStack* top;
top = (LinkStack*)malloc(sizeof(LinkStack));
InitStack();
EmptyStack(top);
Push(top);
Push(top);
ShowStack(top);
EmptyStack(top);
Pop(top);
ShowStack(top);
return 0;
}

  • 写回答

1条回答 默认 最新

  • qzjhjxj 2022-03-04 09:59
    关注

    修改处见注释,供参考:

    #include<stdio.h>
    #include<stdlib.h>
    typedef int datatype;
    typedef struct LinkStack {
        datatype data;
        struct LinkStack* next;
    }LinkStack;
    LinkStack* InitStack() {
        LinkStack* top;
        top = NULL;
        printf("初始化成功\n");
        return top;
    }
    int EmptyStack(LinkStack* top) {
        if (top == NULL)
            return 1;
        else
            return 0;
    }
    void GetTop(LinkStack* top) {
        LinkStack* p;
        //p = (LinkStack*)malloc(sizeof(LinkStack)); //修改
        p = top;
        if (EmptyStack(p)) {
            printf("栈空\n");
        }
        else {
            printf("栈顶元素为%d\n", p->data);
        }
    }
    LinkStack* Push(LinkStack* top) {
        LinkStack* p;
        p = (LinkStack*)malloc(sizeof(LinkStack));
        p->next = NULL;   //修改
        if (p) {
            printf("请输入数据:\n");
            scanf_s("%d", &p->data);
            p->next = top;
            top = p;
            printf("进栈成功\n");
            GetTop(top);
            return top;
        }
    }
    LinkStack* Pop(LinkStack* top) {
        LinkStack* p;
        if (EmptyStack(top)) {
            printf("栈空\n");
            return NULL;
        }
        else {
            p = top;
            top = top->next;
            free(p);
            printf("出栈成功\n");
    
            return top;
        }
    }
    void ShowStack(LinkStack* top) {
        LinkStack* p;
        if (EmptyStack(top)) {
            printf("栈为空\n");
        }
        else {
            p = top;
            printf("栈顶到栈底元素为:\n");
            while (p) {
                printf("%d ", p->data);
                p = p->next;
            }
        }
    }
    int main() {
        LinkStack* top;
        //top = (LinkStack*)malloc(sizeof(LinkStack));//修改
        top = InitStack(); //修改
        EmptyStack(top);  
        top = Push(top);   //修改
        top = Push(top);   //修改
        ShowStack(top);
        EmptyStack(top);
        top = Pop(top);// Pop(top);//修改
        ShowStack(top);
        return 0;
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

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

悬赏问题

  • ¥20 完全没有学习过GAN,看了CSDN的一篇文章,里面有代码但是完全不知道如何操作
  • ¥15 使用ue5插件narrative时如何切换关卡也保存叙事任务记录
  • ¥20 软件测试决策法疑问求解答
  • ¥15 win11 23H2删除推荐的项目,支持注册表等
  • ¥15 matlab 用yalmip搭建模型,cplex求解,线性化处理的方法
  • ¥15 qt6.6.3 基于百度云的语音识别 不会改
  • ¥15 关于#目标检测#的问题:大概就是类似后台自动检测某下架商品的库存,在他监测到该商品上架并且可以购买的瞬间点击立即购买下单
  • ¥15 神经网络怎么把隐含层变量融合到损失函数中?
  • ¥15 lingo18勾选global solver求解使用的算法
  • ¥15 全部备份安卓app数据包括密码,可以复制到另一手机上运行