cccsiqi47 2016-04-21 06:39 采纳率: 50%
浏览 2462

栈和队列关于车厢排序的问题

内容:设车辆厂生产了硬座车厢和软座车厢共n节(混合在一起),要求用顺序栈的5种运算使所有的硬座车厢排列到软座车厢的前面。
程序如下:
#include
#define elemtype char
const int maxlen=20;
struct seqstack
{
elemtype stack[maxlen];
int top;
};
void inistack(seqstack &s)
{
s.top=0;
}
void push(seqstack &s,elemtype x)
{
if (s.top==maxlen-1)printf("overflow\n");
else
{
s.top++;
s.stack[s.top]=x;
}
}
void pop(seqstack&s)
{
if(s.top==0)printf("underflow\n");
else
{
s.top--;
}
}
elemtype gettop(seqstack s)
{
if (s.top==0){printf("underflow\n");return 0;}
else return s.stack[s.top];
}
int empty(seqstack s)
{
if (s.top==0) return 1;
else return 0;
}
void prtstack(seqstack &s)
{
int i;
for (i=1;i<=s.top;i++){
printf("&d",s.stack[i]);
}
}
void main(void)
{
int n,i;
elemtype x;
seqstack s_H;
seqstack s_S;
inistack(s_H);
inistack(s_S);
printf("请输入车厢数\n");
scanf("%d",&n);
printf("请输入%d节车厢代号(H代表硬座车厢,S代表软座车厢)\n",n);
if(n>maxlen)
{
printf("车厢数目太多\n");
return;
}
for (i=1;i<=n;i++)
{
scanf ("%d",&x);
if(x=='H')
push(s_H,x);
else if(x=='S')
push(s_S,x);
}
prtstack(s_H);
prtstack(s_S);
return ;
}

程序可以正常运行,可是输入完车厢数和车厢代号后就会自动跳出,求大神解答

  • 写回答

1条回答 默认 最新

  • 小灸舞 2016-04-21 07:57
    关注

    主要有两个问题:
    1.scanf ("%d",&x);改为scanf ("%c%*c",&x); //%*c用来吸收两个字符之间的空格
    同时第一次scanf输入车厢数以后也要用getchar();或者fflush(stdin);来清空输入缓冲区遗留的回车符,否则%c会读取回车符
    2.prtstack里应该用%c输出

     #include<stdio.h>
    #define elemtype char
    const int maxlen=20;
    struct seqstack
    {
        elemtype stack[maxlen];
        int top;
    };
    void inistack(seqstack &s)
    {
        s.top=0;
    }
    void push(seqstack &s,elemtype x)
    {
        if (s.top==maxlen-1)printf("overflow\n");
        else
        {
            s.top++;
            s.stack[s.top]=x;
        }
    }
    void pop(seqstack&s)
    {
        if(s.top==0)printf("underflow\n");
        else
        {
            s.top--;
        }
    }
    elemtype gettop(seqstack s)
    {
        if (s.top==0){printf("underflow\n");return 0;}
        else return s.stack[s.top];
    }
    int empty(seqstack s)
    {
        if (s.top==0) return 1;
        else return 0;
    }
    void prtstack(seqstack &s)
    {
        int i;
        for (i=1;i<=s.top;i++){
            printf("%c",s.stack[i]);
        }
    }
    void main(void)
    {
        int n,i;
        elemtype x;
        seqstack s_H;
        seqstack s_S;
        inistack(s_H);
        inistack(s_S);
        printf("请输入车厢数\n");
        scanf("%d",&n);
        printf("请输入%d节车厢代号(H代表硬座车厢,S代表软座车厢)\n",n);
        if(n>maxlen)
        {
            printf("车厢数目太多\n");
            return;
        }
        getchar();
        for (i=1;i<=n;i++)
        {
            scanf ("%c%*c",&x);
            if(x=='H')
                push(s_H,x);
            else if(x=='S')
                push(s_S,x);
        }
        prtstack(s_H);
        prtstack(s_S);
        printf("\n");
        return ;
    }
    

    图片说明

    评论

报告相同问题?

悬赏问题

  • ¥15 使用Jdk8自带的算法,和Jdk11自带的加密结果会一样吗,不一样的话有什么解决方案,Jdk不能升级的情况
  • ¥60 SOL语句中Where查询中的 from to 语句能不能从小到大换成从大到小(标签-SQL)
  • ¥15 画两个图 python或R
  • ¥15 在线请求openmv与pixhawk 实现实时目标跟踪的具体通讯方法
  • ¥15 八路抢答器设计出现故障
  • ¥15 请教一下c语言的代码里有一个地方不懂
  • ¥15 opencv 无法读取视频
  • ¥15 用matlab 实现通信仿真
  • ¥15 按键修改电子时钟,C51单片机
  • ¥60 Java中实现如何实现张量类,并用于图像处理(不运用其他科学计算库和图像处理库))