神舟NO.10
2019-11-19 08:47
采纳率: 72.2%
浏览 217

关于C语言的一些小问题

//顺序栈
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<math.h>
#define Status int
#define SElemType int
#define Max 100
typedef struct{
    SElemType *base;
    SElemType *top;
    int SizeMax;
}Sq;
 Status news(Sq &S){
    S.base=new SElemType[Max];
    if(S.base!=0) return 0;
    S.top=S.base;
    S.SizeMax=Max;
    printf("初始化成功!");
    return 1;
}
 Status in(Sq &S,SElemType e){
    if(S.top-S.base==S.SizeMax)
       return 0;
    *(S.top++)=e;
    //*S.top++;
    return 1;
}
Status out(Sq &S,SElemType q){
    if(S.top==S.base)
       return 0;
    q=*S.top;
    S.top--;
    return 1;
}
Status quzhi(Sq S){
    if(S.top!=S.base)
       return *(S.top-1);
}
Status Push(Sq &S){
   int a,i,k;
   printf("进入入栈操作");
   printf("请输入想入栈的个数:");
   scanf("%d",&a);
   for(i=0;i<a;i++)
   {
       printf("输入的是第%d个数",i+1);
       scanf("%d",&k);
       in(S,k);
   }
   printf("入栈成功");
}
Status GoOut(Sq &S){
     int a,i,k;
      printf("进入出栈操作");
      printf("请输入想出栈的个数:");
      scanf("%d",&a);
      for(i=0;i<a;i++)
         {
           printf("输入的是第%d个数",i+1);
           scanf("%d",&k);
           out(S,k);
         }
      printf("出栈成功");
}





int main(){
   Sq S;SElemType e;int q;
   news(S);   
   while(1)
   {
   printf("欢迎进入顺序栈的实践界面");
   printf("1.入栈");
   printf("2.出栈");
   printf("3.出栈顶元素");
   printf("请输入数字:");
   scanf("%d",&q);
   switch(q)
      {
        case 1:
          Push(S);break;
        case 2:
          GoOut(S);break;
        case 3:
          quzhi(S);break;
      }
   }

 }

这段程序的初始化一直就运行不了,不知道这是为什么,求解

  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

2条回答 默认 最新

  • threenewbee 2019-11-19 09:16
    已采纳
    // Q956803.cpp : Defines the entry point for the console application.
    //
    
    #include "stdafx.h"
    
    
    //顺序栈
    #include<stdio.h>
    #include<stdlib.h>
    #include<string.h>
    #include<math.h>
    #define Status int
    #define SElemType int
    #define Max 100
    typedef struct{
        SElemType *base;
        SElemType *top;
        int SizeMax;
    }Sq;
     Status news(Sq &S){
        S.base=new SElemType[Max];
        if(!S.base) return 0; //修改
        S.top=S.base;
        S.SizeMax=Max;
        printf("初始化成功!");
        return 1;
    }
     Status in(Sq &S,SElemType e){
        if(S.top-S.base==S.SizeMax) 
           return 0;
        *(S.top++)=e;
        //*S.top++;
        return 1;
    }
    Status out(Sq &S,SElemType& q){ //修改
        if(S.top==S.base)
           return 0;
        q=*(S.top-1);
        S.top--;
        return 1;
    }
    SElemType quzhi(Sq S){ //修改
        if(S.top!=S.base)
           return *(S.top-1);
    }
    Status Push(Sq &S){
       int a,i,k;
       printf("进入入栈操作");
       printf("请输入想入栈的个数:");
       scanf("%d",&a);
       for(i=0;i<a;i++)
       {
           printf("输入的是第%d个数",i+1);
           scanf("%d",&k);
           in(S,k);
       }
       printf("入栈成功");
       return 1;
    }
    Status GoOut(Sq &S){
         int a,i,k;
          printf("进入出栈操作");
          printf("请输入想出栈的个数:");
          scanf("%d",&a);
          for(i=0;i<a;i++)
             {
               out(S,k); //修改
               printf("%d ", k);
             }
          printf("出栈成功");
          return 1;
    }
    
    
    int main(){
       Sq S;SElemType e;int q;
       news(S);   
       while(1)
       {
       printf("欢迎进入顺序栈的实践界面");
       printf("1.入栈");
       printf("2.出栈");
       printf("3.Peek顶元素");
       printf("请输入数字:");
       scanf("%d",&q);
       switch(q)
          {
            case 1:
              Push(S);break;
            case 2:
              GoOut(S);break;
            case 3:
              printf("%d\n", quzhi(S));break;
          }
       }
    
     }
    
    
    打赏 评论
  • 把 news函数里的 if(S.base!=0) return 0;改为if(S.base==0)return 0;
    逻辑问题,你指针有值,下面不执行

    打赏 评论

相关推荐 更多相似问题