qq_53893977 2021-10-01 17:13 采纳率: 47.6%
浏览 70
已结题

用C语言写的简单的顺序栈,编译可以通过运行后什么也不显示

如题,代码奉上,请各位帮忙看一下错在哪了

#include <stdio.h>
#include <stdlib.h>
struct _ListStack
{
    struct NodeInt *first;
    struct NodeInt *last;
    int n;
    int top;
};
struct NodeInt
{
    int value;
    struct NodeInt *next;
};
void InitStack(_ListStack *s);
int Push(_ListStack *s, int v);
int Pop(_ListStack *s, int *v);
int Empty(_ListStack *s);
int GetTop(_ListStack *s, int *v);
int main(void)
{
    _ListStack sl1;
    int r;
    int ch;
    int v;
    InitStack(&sl1);
    /*Push(&sl1, 10);
    Push(&sl1, 20);
    Push(&sl1, 30);
    Push(&sl1, 40);*/
    ch=-1;
    while(ch)
    {
        printf("------------------\n");
        printf("1 - Push\n");
        printf("2 - Pop\n");
        printf("3 - GetTop\n");
        printf("4 - Empty\n");
        printf("0 - Exit\n");
        printf("------------------\n");
        printf("Select:");
        scanf("%d", &ch);
                ch=1;
        switch(ch)
        {
        case 1:
            printf("输入值:");
            scanf("%d", &v);
            r = Push(&sl1, v);
            printf("OK, n = %d\n", sl1.n);            
            break;

        case 2:
            r = Pop(&sl1, &v);
            switch(r)
            {
            case 0:
                printf("OK, n = %d,出栈的是%d\n", sl1.n, v);
                break;
            case -1:
                printf("Error: 栈为空\n");
                break;
            }
            break;

        case 3:
            r = GetTop(&sl1, &v);
            switch(r)
            {
            case 0:
                printf("OK, 栈顶内容是%d\n", v);
                break;
            case -1:
                printf("Error: 栈是空的\n");
                break;
            }
            break;
        }
        
    }
    
    return 0;
    
}

void InitStack(_ListStack *s)
{
    s->n = 0;
    s->top=0;
    s->first->next=NULL;
    s->last=s->first;
}
int Push(_ListStack *s, int v)
{    
    if(s->n==0)
    {
    s->last->value=v;
    s->top++;
    s->n++;
    }else
    {
    struct NodeInt *p;    
    p=s->last->next;
    p->value=v;
    s->n++;
    s->top++;
    }      
    return 0;
}
int Pop(_ListStack *s, int *v)
{
    if(s->n==0)
    {
        return -1;
    }
    *v = s->last->value;

    s->top--;

    s->n--;
    return 0;
}
int GetTop(_ListStack *s, int *v)
{
    if(s->top == 0)
    {
    return -1;
    }
        
    *v = s->last->value;
    return 0;

}
int Empty(_ListStack *s)
{
    return s->n == 0;
}


  • 写回答

3条回答 默认 最新

  • CSDN专家-link 2021-10-01 17:52
    关注
    void InitStack(_ListStack *s)
    {
        s->n = 0;
        s->top=0;
        s->first->next=NULL;
        s->last=s->first;
    }
    这个初始化函数就错了,s->first还没有分配空间呢,你就进行->next操作,必死无疑,所以后面的菜单都可能显示的
    改为s->first = NULL;
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 10月10日
  • 已采纳回答 10月2日
  • 创建了问题 10月1日

悬赏问题

  • ¥15 linux驱动,linux应用,多线程
  • ¥20 我要一个分身加定位两个功能的安卓app
  • ¥15 基于FOC驱动器,如何实现卡丁车下坡无阻力的遛坡的效果
  • ¥15 IAR程序莫名变量多重定义
  • ¥15 (标签-UDP|关键词-client)
  • ¥15 关于库卡officelite无法与虚拟机通讯的问题
  • ¥15 目标检测项目无法读取视频
  • ¥15 GEO datasets中基因芯片数据仅仅提供了normalized signal如何进行差异分析
  • ¥100 求采集电商背景音乐的方法
  • ¥15 数学建模竞赛求指导帮助