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日