2 cccsiqi47 cccsiqi47 于 2016.04.21 14:39 提问

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

内容:设车辆厂生产了硬座车厢和软座车厢共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 ;
}

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

2个回答

CSDNXIAOD
CSDNXIAOD   2016.04.21 14:42

用栈对队列排序
关于栈与队列的一些问题
栈和队列的问题
----------------------biu~biu~biu~~~在下问答机器人小D,这是我依靠自己的聪明才智给出的答案,如果不正确,你来咬我啊!

qq423399099
qq423399099   Ds   Rxr 2016.04.21 15: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 ;
}

图片说明

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
C++--车厢排序问题
一列货车共有n节车厢,每个车厢都有自己的编号,编号范围从1~n。给定任意次序的车厢,通过缓冲区将车厢编号按顺序重新排成1~n。共有k个缓冲区。开始时,车厢从入轨进入缓冲轨,经过缓冲轨的重排后,按1~n的顺序进入出轨。缓冲轨按照后进先出方式,编写一个算法,将任意次序的车厢进行重排,输出每个缓冲轨中的车厢编号,使得所用的缓冲区个数(k)最小。 考虑到一个车厢能不能从一个缓冲区(栈),开到后一个缓冲区(栈
火车车厢重排(栈式实现与队列实现)
问题描述:一列货运列车共有n节车厢,每节车厢将停放在不同的车站。假定n个车站的编号分别为1~n,货运列车按照第n站至第1站的顺序经过这些车站。车厢编号与他们的目的地一样。为了便于从列车上卸掉相应的车厢,必须重排车厢顺序,使得各车厢从前往后按编号1到n的次序排列。当所有车厢按照这种
队列的应用--火车车厢重排列
火车车厢重排列问题 问题描述:一列货运列车共有n节车厢,每节车厢将停放在不同的车站.假定n个车站的编号为1--n,即货运列车按照第n站至第1站的次序经过这些车站。为了便于列车卸掉相应的车厢,车厢的编号应与车站的编号相同。使各个车厢按1~n次序排列,这样每次卸掉最后一节车厢即可.所以给定任意次序的车厢,必须重排列它们.可排列的地方是转轨站,转轨站由一个入轨站,一个出轨站,缓冲轨k个.列车由入轨站进
实验三:栈和队列的基本操作实现及其应用——顺序栈
一、实验目的 1、   熟练掌栈和队列的结构特点,掌握栈和队列的顺序存储和链式存储结构和实现。 2、      学会使用栈和队列解决实际问题。 二、实验内容 1、自己确定结点的具体数据类型和问题规模: 分别建立一个顺序栈和链栈,实现栈的压栈和出栈操作。 分别建立一个顺序队列和链队列,实现队列的入队和出队操作。 2、设计算法并写出代码,实现一个十将二进制转换
栈和队列-第3章-《数据结构题集》习题解析-整理
3.1❶若按教科书3.1.1节中图3.1(b)所示铁道进行车厢调度(注意:两侧铁道均为单向行驶道),则请回答: (1) 如果进站的车厢序列为123,则可能得到的出站车厢序列是什么? (2) 如果进站的车厢序列为123456,则能否得到435612和135426的出站序列,并请说明为什么不能得到或者如何得到(即写出以‘S’表示进栈和以‘X’表示出栈的栈操作序列)。
算法设计题3.16-栈和队列-第3章-《数据结构习题集》-严蔚敏吴伟民版
算法设计题3.16-栈和队列-第3章-《数据结构习题集》-严蔚敏吴伟民版。
火车车厢重排问题
问题描述:一列货运火车从出发站出发时火车上一共有n节车厢,编号分别是1到n。运货的各节车厢是在入轨上时是随机的顺序,火车头在出轨处,现在要将各节车厢按编号从大到小挂到车头上,其中在入轨与出轨之间有k条缓冲铁轨,将通过缓冲铁轨完成本次的火车车厢的重排。      具体规则: 一、车厢从入轨的前部(即右端)只可以移动到一个缓冲铁轨的顶端或出轨的右端。 二、缓冲铁轨的顶端的车厢只可以移动到出轨的最
栈和队列的常见面试题
1、两个队列实现一个栈 两个队列实现一个栈2、两个栈实现一个队列 【算法思想】 1>设计类 成员变量:给两个栈s1和s2来模拟实现一个队列 成员函数:入队Push()和出队Pop() 2>给两个指向栈对象s1、s2的指针input和output,分别用来入队和出队 3>按照先进先出的方式模拟入队和出队操作 Push:将input指向不空的栈,然后在input中入队 Pop:将inp
车厢重组--冒泡排序
Problem Description 在一个旧式的火车站旁边有一座桥,其桥面可以绕河中心的桥墩水平旋转。一个车站的职工发现桥的长度最多能容纳两节车厢,如果将桥旋转180度,则可以把相邻两节车厢的位置交换,用这种方法可以重新排列车厢的顺序。于是他就负责用这座桥将进站的车厢按车厢号从小到大排列。他退休后,火车站决定将这一工作自动化,其中一项重要的工作室编一个程序,输入初始的车厢顺序,计算最少用多少
算法入门经典之栈和队列篇
做对的事情比把事情做对重要 /** *@author StormMaybin *@Date 2016-07-17 */ 最近一段时间会对数据结构的知识和算法基础进行总结,尽量一天一更!如果时间错不开的话,第二天会补上。 数据结构中,栈和队列是最基础的也是简单的,一种是先进后出的线性数据结构,另外一种是先进先出的线性数据结构!案例一:卡片游戏(队列) 题目说明:假设桌上有一叠扑克牌,依次编号为1-