设计一个算法,利用顺序栈的基本运算求栈中从栈顶到栈底的第k个元素,要求仍保持栈中元素不变

答案完美者可以有附加奖励

#include <stdio.h>
#include <stack>
using namespace std;
int solve(stack<int> &st,int k) //出栈第 k 个元素
{ stack<int> tmpst; int e; for (int i=0;i<k;i++) //出栈 st 的 k 个元素并进 tmpst 栈
{ e=st.top(); st.pop(); tmpst.push(e); }
e=tmpst.top(); //求第 k 个元素
tmpst.pop();
while (!tmpst.empty()) //将 tmpst 的所有元素出栈并进栈 st
{ st.push(tmpst.top());
tmpst.pop();
}
return e; }
void disp(stack<int> &st) //出栈 st 的所有元素
{ while (!st.empty())
{ printf("%d ",st.top()); st.pop();
} printf("\n"); } void main()
{ stack<int> st;
printf("进栈元素 1,2,3,4\n");
st.push(1); st.push(2); st.push(3); st.push(4); int k=3;
int e=solve(st,k); printf("出栈第%d 个元素是: %d\n",k,e);
printf("st 中元素出栈顺序: ");
disp(st);
}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2018-10-27
因为必须要将所有元素出栈才能知道结点个数,如果用指针传递,那么就是真的将栈中元素全部出栈了,不用指针的话,参数传递的是S的拷贝,出栈操作是对这个拷贝进行的,对S本身没有影响.追问

看清楚题目是设计算法,不是讨论

本回答被网友采纳
相似回答