今有一空栈 $S$,对下列待进栈的数据元素序列 $a,b,c,d,e,f$ 依次进行进栈,进栈,出栈,进栈,进栈,出栈的操作,则此操作完成后,栈 $S$ 的栈顶元素为( )。
这题就是让你拿张纸,按顺序把“进栈”和“出栈”一步步模拟一遍。记住栈是后进先出的,每次出栈只把当前最上面的元素扔掉,千万别把已经出过的元素又算进栈里。
最容易掉进两个坑:一是看到题目里出现过 b 和 d,下意识觉得它们还在栈里,其实它们已经出栈了,不在栈中;二是把“出栈”理解成“把元素移到栈底”或者“只是标记一下”,导致栈顶判断错误。一定要盯着“栈顶”这个位置,只有最后一次入栈且未被弹出的元素才是答案。
栈:后进先出(LIFO),只在栈顶插入和删除。就像洗盘子,最后一个放进去的盘子,必须最先拿出来。
命题人爱用这种“给一串操作,问最终状态”的题,考察你对数据结构基本行为的直觉。它不考复杂算法,就考你能不能老老实实按规则一步步走,以及能不能在脑子里把栈的状态画清楚。坑就藏在“已出栈的元素”上——学生容易因为元素名字出现过,就以为它还在,或者把出栈当成“移到别处”而不是“彻底消失”。