题解
字母的读写
1 条题解
-
0
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 次,每次操作都是 ,总时间是常数。空间上只用一个长度 5 的数组,也是常数。输入规模固定,任何写法都瞬间完成。
- 1