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

问题描述

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

内容:设车辆厂生产了硬座车厢和软座车厢共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
");
else
{
s.top++;
s.stack[s.top]=x;
}
}
void pop(seqstack&s)
{
if(s.top==0)printf("underflow
");
else
{
s.top--;
}
}
elemtype gettop(seqstack s)
{
if (s.top==0){printf("underflow
");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("请输入车厢数
");
scanf("%d",&n);
printf("请输入%d节车厢代号(H代表硬座车厢,S代表软座车厢)
",n);
if(n>maxlen)
{
printf("车厢数目太多
");
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.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
");
    else
    {
        s.top++;
        s.stack[s.top]=x;
    }
}
void pop(seqstack&s)
{
    if(s.top==0)printf("underflow
");
    else
    {
        s.top--;
    }
}
elemtype gettop(seqstack s)
{
    if (s.top==0){printf("underflow
");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("请输入车厢数
");
    scanf("%d",&n);
    printf("请输入%d节车厢代号(H代表硬座车厢,S代表软座车厢)
",n);
    if(n>maxlen)
    {
        printf("车厢数目太多
");
        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("
");
    return ;
}

时间: 2024-09-10 00:18:39

printf-栈和队列关于车厢排序的问题的相关文章

数据结构实践——停车场模拟(栈和队列综合)

本文是针对数据结构基础系列网络课程(3):栈和队列的实践项目. 设停车场是一个可停放n辆汽车的狭长死胡同,南边封口,汽车只能从北边进出(这样的停车场世间少有).汽车在停车场内按车辆到达时间的先后顺序,最先到达的第一辆车停放在车场的最南端,依次向北排开.若车场内已停满n辆汽车,则后来的汽车只能在门外的候车场上等候,一旦有车开走,则排在候车场上的第一辆车即可开入.当停车场内某辆车要离开时,在它之后进入的车辆必须先退出车场为它让路(假定停车场内设有供车辆进出的便道,所有的司机也必须在车内随时待命),待

【万字总结】图解堆算法、链表、栈与队列(多图预警)

堆算法 什么是堆 堆(heap),是一类特殊的数据结构的统称.它通常被看作一棵树的数组对象.在队列中,调度程序反复提取队列中的第一个作业并运行,因为实际情况中某些时间较短的任务却可能需要等待很长时间才能开始执行,或者某些不短小.但很重要的作业,同样应当拥有优先权.而堆就是为了解决此类问题而设计的数据结构. 二叉堆是一种特殊的堆,二叉堆是完全二叉树或者近似完全二叉树,二叉堆满足堆特性:父节点的键值总是保持固定的序关系于任何一个子节点的键值,且每个节点的左子树和右子树都是一个二叉堆. 当父节点的键值

C++栈和队列

使用标准库的栈和队列时,先包含相关的头文件 #include<stack> #include<queue> 定义栈如下: stack<int> stk; 定义队列如下: queue<int> q; 栈提供了如下的操作 s.empty() 如果栈为空返回true,否则返回false s.size() 返回栈中元素的个数 s.pop() 删除栈顶元素但不返回其值 s.top() 返回栈顶的元素,但不删除该元素 s.push() 在栈顶压入新元素 队列提供了下面的

实验二 栈和队列的应用

实验目的 本次实验的目的在于使学生深入了解栈和队列的特征,掌握在实际问题背景下的灵活运用. 实验要求 正确设计和实现本程序,记录输出结果. 实验内容 1.队列的各种基本操作实现. 2.十进制数向N进制数据的转换.(栈的应用) 附:代码 #include <stdio.h> #include <string.h> #include <stdlib.h> #define OVERFLOW 0 #define OK 1 #define ERROR 0 //顺序栈的定义 #de

迷宫求解非递归 DFS BFS(应用栈和队列)

栈和队列的应用对迷宫问题求解 没有递归 自己手动建的栈和队 并且输出路径 DFS的路径就是 栈中的坐标 BFS的路径在队又开了一个域存上一层的base值 语言还是用的C++ 感觉比C的封装性好很多 充分体会了一下DFS一边比BFS快 但是BFS是最优解而DFS可能不是最优解   #include <iostream> #include<cstdio> #include<cstring> #include<algorithm> using namespace

数据结构――栈、队列和树(Java)

数据|数据结构 数据结构――栈.队列和树 开发者可以使用数组与链表的变体来建立更为复杂的数据结构.本节探究三种这样的数据结构:栈.队列与树.当给出算法时,出于简练,直接用Java代码. 栈 栈是这样一个数据结构,其数据项的插入和删除(获取)都只能在称为栈顶的一端完成.因为最后插入的数据项就是最先要删除的数据项,开发者往往将栈称为LILO(last-in, first-out)数据结构. 数据项压入(插入)或者弹出(删除或取得)栈顶.图13示例了一个有三个String数据项的栈,每个数据项压入栈顶

浅谈算法和数据结构 一 栈和队列

最近晚上在家里看Algorithems,4th Edition,我买的英文版,觉得这本书写的比较浅显易懂,而且"图码并茂",趁着这次机会打算好好学习做做笔记,这样也会印象深刻,这也是写这一系列文章的原因.另外普林斯顿大学在Coursera 上也有这本书同步的公开课,还有另外一门算法分析课,这门课程的作者也是这本书的作者,两门课都挺不错的. 计算机程序离不开算法和数据结构,本文简单介绍栈(Stack)和队列(Queue)的实现,.NET中与之相关的数据结构,典型应用等,希望能加深自己对这

数据结构学习(C++)之栈和队列

栈和队列是操作受限的线性表,好像每本讲数据结构的数都是这么说的.有些书按照这个思路给出了定义和实现:但是很遗憾,本文没有这样做,所以,有些书中的做法是重复建设,这或许可以用不是一个人写的这样的理由来开脱. 顺序表示的栈和队列,必须预先分配空间,并且空间大小受限,使用起来限制比较多.而且,由于限定存取位置,顺序表示的随机存取的优点就没有了,所以,链式结构应该是首选. 栈的定义和实现 #ifndef Stack_H #define Stack_H #include "List.h" tem

数据结构:栈和队列的定义和操作

一.栈和队列定义 1).栈 定义: 栈(Stack)是一个后进先出(Last in first out,LIFO)的线性表,它要求只在表尾进行删除和插入操作. 图如下: 特点: 一.栈特殊的线性表(顺序表.链表),它在操作上有一些特殊的要求和限制:栈的元素必须"后进先出". 三.栈的表尾称为栈的栈顶(top),相应的表头称为栈底(bottom) 二.栈的操作只能在这个线性表的表尾进行. 2).队列 定义: 队列是限定只能在表的一端进行插入,在表的另一端进行删除的特殊的线性表. 图如下: