栈操作

编程实现栈的入栈/出栈操作。[中国著名网络企业XL公司2007年12月面试
题]
答案:完整代码如下:

 

---------------------------------------------------------------------------------------------------------

如下C++程序:

请问刚进入func函数时,参数在栈中的形式可为以下哪种?(左侧为地址,右侧为数
据。)[中国著名网络企业XL公司2007年11月面试题]

A.
0x0013FCF0 0x61616161
0x0013FCF4 0x22222222
0x0013FCF8 0x0013FCF8
B.
0x0013FCF0 0x22222222
0x0013FCF4 0x0013FCF8
0x0013FCF8 0x61616161
C.
0x0013FCF0 0x22222222
0x0013FCF4 0x61616161
0x0013FCF8 0x00000000
D.
0x0013FCF0 0x0013FCF8
0x0013FCF4 0x22222222
0x0013FCF8 0x61616161
解析:本题考查的是函数调用时的参数传递和栈帧节构。
调用函数时首先进行参数压栈,一般情况下压栈顺序为从右到左,先压sz再压i……最后
压函数地址,但是压sz的时候不是直接压0x61616161而压的是szTest的地址。不过除了压栈
顺序,还要考虑栈的生长方向。事实上,在Windows平台上,栈都是从上向下生长的。
如果依题意压sz压的是0x61616161,压栈顺序为从右到左的话,答案应该是D。
A:栈的生长方向应该是从上到下。
B:压栈顺序不对。
C:压栈顺序不对。
答案:D

----------------------------------------------------------------------------------------------------------------------------------

编号为123456789的火车经过如下轨道从左边入口处移到右边出口处(每车都
必须且只能进临时轨道M一次,且不能再回左边入口处)

按照从左向右的顺序,下面的结果不可能的是哪项?[中国台湾某CPU硬件厂商2009年
11月面试题]
A.123876549
B.321987654
C.321456798
D.987651234
解析:本题实际上考的是数据结构的栈。临时轨道M就是栈。
A是123挨个过去,45678入栈再出栈变成87654,9再过去。
B是123入栈再出栈变成321,456789入栈再出栈变成987654。
C是123入栈再出栈变成321,4567直接过去,89入栈再出栈变成98。
D是98765在前,则1234必须全部先进栈,98765过去后,剩下1234必须先回到左边,再
通过才满足1234。但是题意要求不可再回到左边入口处,所以这个选项不可行。
答案:D
------------------------------------------------------------------------------------------------------------------------------

用两个栈实现一个队列的功能,请用C++实现它。

解析:思路如下:
假设两个栈A和B,且都为空。
可以认为栈A提供入队列的功能,栈B提供出队列的功能。
入队列:入栈A。
出队列:
● 如果栈B不为空,直接弹出栈B的数据。
● 如果栈B为空,则依次弹出栈A的数据,放入栈B中,再弹出栈B的数据。
答案:
代码如下:

 

posted @ 2017-02-08 10:37  我有一壶酒  阅读(315)  评论(0编辑  收藏  举报