m0_75048134 2023-05-23 23:55 采纳率: 100%
浏览 48
已结题

关于有关栈的问题,但是可能不是栈本身有问题

#请问为什么功能1初始化之后就不显示我的菜单了捏,不继续了呢

#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
#define Stack_Size  100
#define FALSE   0
#define TRUE    1
 
typedef int StackElementType; //数据元素类型定义

typedef struct{  //顺序栈的定义
    StackElementType  elem[Stack_Size];
    int top;
}SeqStack;

void  InitStack(SeqStack *S);//初始化栈 
int IsEmpty(SeqStack *S);//判空 
int IsFull(SeqStack *S);//判满 
int Push(SeqStack *S, StackElementType a); //进栈 
int Pop(SeqStack *S, StackElementType *x); //出栈 
int GetTop(SeqStack *S, StackElementType *x); //去栈顶元素 
void PrintStack(SeqStack*S); //打印栈元素(从栈顶到栈底顺序) 


int main()
{
    SeqStack *S;  //创建一个线性表 
    int a;
    int *x; 
    //生成菜单 
    char sel=' ';
    while(sel!='0')
    {
        
        printf("------栈(顺序存储结构)演示系统-------\n");
        printf("   版本:1.0   作者:xinxinping 日期:yyyy-mm-dd\n"); 
        printf("------------------------------------------\n");
        printf("       1.初始化栈\n");
        printf("       2.进栈操作\n");
        printf("       3.出栈操作\n");
        printf("       4.打印栈顶元素\n");
        printf("       5.打印栈\n");
        printf("       6.清空屏幕\n");
        printf("       0.退出系统\n");
        printf("请输入选项[0-7]:"); 
        sel=getch();
        switch(sel)
        {
            case '1':
                printf("初始化栈.\n");
                InitStack(S);
                PrintStack(S);
                system("pause"); //按任意键继续 
                break;
            case '2':
                int b,i;
                printf("进栈操作.\n");
                printf("请输入进栈个数"); 
                scanf("%d",&b);  
                printf("请输入进栈数据"); 
                for(i=0;i<b;i++)
                {
                    scanf("%d",&a);
                }
            
                Push(S, a); 
                system("pause"); //按任意键继续 
                break;
            case '3':
                printf("出栈操作.\n");
                Pop(S, x); 
                system("pause"); //按任意键继续 
                break;
            case '4':
                printf("打印栈顶元素操作.\n");
                GetTop(S, x);
                system("pause"); //按任意键继续 
                break;
            case '5':
                printf("打印栈操作.\n");
                PrintStack(S);
                system("pause"); //按任意键继续 
                break;
            case '6':
                system("cls");
                break;
            case '0':
                printf("\n谢谢使用,再见!\n");
                break;
            default:
                printf("您输入的选项不合法,请重新选择!\n");
        }
    }

    return 0;
}
void  InitStack(SeqStack *S)
{


       S->top = -1;
}


/*if(S->top == -1)
    {
        printf("此栈为空!"); 
        return (FALSE); 
    }


    if(S->top ==Stack_Size-1)
    {
        printf("此栈已满!"); 
        return (TRUE);
    }*/

int Push(SeqStack *S, StackElementType a)
{
    if(S->top == Stack_Size-1)
    return (FALSE);
    S->top++;
    S->elem[S->top] = a;
    return (TRUE);
}

int Pop(SeqStack *S,StackElementType *x)
{ 
    if(S->top == -1)
    return (FALSE);
    else
    {
        *x = S->elem[S->top];
        S->top--;
        return(TRUE);
    }
}

int GetTop(SeqStack *S, StackElementType *x)
{
    if(S->top == -1)
    return (FALSE);
    else
    {
        *x = S->elem[S->top];
        return *x;
    }
}

void PrintStack(SeqStack*S)
{
    if(S->top != -1)
    {
        while(S->top>=0)
        printf("%d",S->elem[S->top]) ;
        S->top--;
        
    }
}

img

  • 写回答

3条回答 默认 最新

  • qzjhjxj 2023-05-24 09:15
    关注

    整体修改如下,改动处见注释,供参考:

    #include<stdio.h>
    #include<conio.h>
    #include<stdlib.h>
    #define Stack_Size  100
    #define FALSE   0
    #define TRUE    1
    
    typedef int StackElementType; //数据元素类型定义
    
    typedef struct {  //顺序栈的定义
        StackElementType  elem[Stack_Size];
        int top;
    }SeqStack;
    
    void InitStack(SeqStack* S);//初始化栈 
    int  IsEmpty(SeqStack* S);//判空 
    int  IsFull(SeqStack* S);//判满 
    int  Push(SeqStack* S, StackElementType a); //进栈 
    int  Pop(SeqStack* S, StackElementType* x); //出栈 
    int  GetTop(SeqStack* S, StackElementType* x); //去栈顶元素 
    void PrintStack(SeqStack* S); //打印栈元素(从栈顶到栈底顺序) 
    
    
    int main()
    {
        SeqStack* S = (SeqStack*)malloc(sizeof(SeqStack));  // 修改
        int a;
        int x;     //int* x;
        //生成菜单 
        char sel = ' ';
        while (sel != '0')
        {
    
            printf("------栈(顺序存储结构)演示系统-------\n");
            printf("   版本:1.0   作者:xinxinping 日期:yyyy-mm-dd\n");
            printf("------------------------------------------\n");
            printf("       1.初始化栈\n");
            printf("       2.进栈操作\n");
            printf("       3.出栈操作\n");
            printf("       4.打印栈顶元素\n");
            printf("       5.打印栈\n");
            printf("       6.清空屏幕\n");
            printf("       0.退出系统\n");
            printf("请输入选项[0-7]:");
            sel = getch();
            switch (sel)
            {
            case '1':
                printf("初始化栈.\n");
                InitStack(S);
                PrintStack(S);
                system("pause"); //按任意键继续 
                break;
            case '2':
                int b, i;
                printf("进栈操作.\n");
                printf("请输入进栈个数");
                scanf("%d", &b);
                printf("请输入进栈数据");
                for (i = 0; i < b; i++)
                {
                    scanf("%d", &a);
                    Push(S, a); // 修改
                } // 修改
                system("pause"); //按任意键继续 
                break;
            case '3':
                printf("出栈操作.\n");
                if (Pop(S, &x))   // 修改
                    printf("Pop: %d\n", x); // 修改
                else
                    printf("栈空!\n");     // 修改
                system("pause"); //按任意键继续 
                break;
            case '4':
                printf("打印栈顶元素操作.\n");
                if (GetTop(S, &x)) // 修改
                    printf("GetTop:%d", x);// 修改
                else
                    printf("栈空!\n");// 修改
                system("pause"); //按任意键继续 
                break;
            case '5':
                printf("打印栈操作.\n");
                PrintStack(S);
                system("pause"); //按任意键继续 
                break;
            case '6':
                system("cls");
                break;
            case '0':
                printf("\n谢谢使用,再见!\n");
                break;
            default:
                printf("您输入的选项不合法,请重新选择!\n");
            }
        }
    
        return 0;
    }
    void  InitStack(SeqStack* S)
    {
        S->top = -1;
    }
    
    
    /*if(S->top == -1)
        {
            printf("此栈为空!");
            return (FALSE);
        }
        if(S->top ==Stack_Size-1)
        {
            printf("此栈已满!");
            return (TRUE);
        }*/
    
    int Push(SeqStack* S, StackElementType a)
    {
        if (S->top == Stack_Size - 1)
            return (FALSE);
        S->top++;
        S->elem[S->top] = a;
        return (TRUE);
    }
    
    int Pop(SeqStack* S, StackElementType* x)
    {
        if (S->top == -1)
            return (FALSE);
        else
        {
            *x = S->elem[S->top];
            S->top--;
            return(TRUE);
        }
    }
    
    int GetTop(SeqStack* S, StackElementType* x)
    {
        if (S->top == -1)
            return (FALSE);
        else
        {
            *x = S->elem[S->top];
            return *x;
        }
    }
    
    void PrintStack(SeqStack* S)
    {
        int top = S->top;     // 修改
        if (S->top != -1)     // 修改
        {
            while (top >= 0)  // 修改
            {                 // 修改
                printf("%d ", S->elem[top]);// 修改
                top--;        // 修改
            }                 // 修改
        }
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 6月1日
  • 已采纳回答 5月24日
  • 创建了问题 5月23日

悬赏问题

  • ¥15 求京东批量付款能替代天诚
  • ¥15 slaris 系统断电后,重新开机后一直自动重启
  • ¥15 51寻迹小车定点寻迹
  • ¥15 谁能帮我看看这拒稿理由啥意思啊阿啊
  • ¥15 关于vue2中methods使用call修改this指向的问题
  • ¥15 idea自动补全键位冲突
  • ¥15 请教一下写代码,代码好难
  • ¥15 iis10中如何阻止别人网站重定向到我的网站
  • ¥15 滑块验证码移动速度不一致问题
  • ¥15 Utunbu中vscode下cern root工作台中写的程序root的头文件无法包含