top1编程
← 返回题目
题解

字母的读写

1 条题解

  • 0
    @ 2026-8-6 1:58:12

    P4823 字母的读写(入门)

    解题思路

    这道题很简单:读入 a、b、c、d、e 共 5 个字母,把它们倒过来输出成 e、d、c、b、a。题目要求用栈来处理。

    第一步,什么是栈? 栈就像一个装东西的桶,只能从桶口放东西(入栈)和拿东西(出栈),后放进去的东西先被拿出来,这叫“后进先出”。

    第二步,怎么用栈完成倒序? 把 5 个字母按顺序 a、b、c、d、e 一个一个放进栈里。放完后,栈顶是最后放进去的 e。然后连续 5 次出栈,每次拿出来的都是当前栈顶,拿出来的顺序就是 e、d、c、b、a,正好是倒序!

    第三步,代码怎么写? 用一个字符数组 st[5] 当栈,top 表示栈顶位置。入栈就是 st[top++] = ch;,出栈就是 st[--top]。出栈的 5 个字母之间用空格隔开,末尾换行。

    第四步,注意输出格式。 题目要求每个字母用空格隔开,所以第一个字母前不输出空格,后面的每个字母前输出一个空格,最后换行。

    第五步,想一个容易错的点。 top 一开始是 0,表示栈是空的;每入栈一个字母,top 就加 1;每出栈一个字母,top 就减 1。出栈时要“先减再取”,写 st[--top],这样第一次出栈拿到的正好是最后一个进栈的 e,顺序才不会乱。

    小结: 这道题是栈的入门题,只要记住“入栈时后进,出栈时先出”,倒序输出就是不断出栈的过程。

    参考代码

    // 用途:读入 5 个字母,用栈处理后倒序输出
    #include <iostream>
    using namespace std;
    
    int main() {
        char st[5];
        int top = 0;
        // 把 5 个字母依次压入栈中
        for (int i = 0; i < 5; i++) {
            char ch;
            cin >> ch;
            st[top++] = ch;
        }
        // 依次出栈,出栈顺序就是倒序
        for (int i = 0; i < 5; i++) {
            if (i > 0) cout << ' ';
            cout << st[--top];
        }
        cout << endl;
        return 0;
    }
    

    复杂度分析

    一共只有 5 个字母,入栈 5 次、出栈 5 次,每次操作都是 O(1)O(1),总时间是常数。空间上只用一个长度 5 的数组,也是常数。输入规模固定,任何写法都瞬间完成。

    • 1