题目描述
模拟STL stack类设计实现你的stack类,该类需具有入栈,出栈,判栈空,取栈顶元素等功能;利用该类实现本题要求。
输入描述
分别构造两个空栈,再读入若干对整数v、x; 1<=v<=2; 将元素x入第v个栈
输出描述
最后将两个栈中元素出栈,并输出;每个栈中元素占一行,元素间以空格分隔
样例输入
1 100 2 200 1 300 2 400 1 50 1 60 2 80
样例输出
60 50 300 100 80 400 200
1 #include<iostream> 2 using namespace std; 3 4 class Stack{ 5 private: 6 int list[100]; 7 int top; 8 public: 9 Stack(); 10 void push(const int &item); 11 int Pop(); 12 bool isEmpty() const; 13 }; 14 15 Stack::Stack():top(-1){} 16 17 void Stack::push(const int &item) 18 { 19 list[++top] = item; 20 } 21 22 int Stack::Pop() 23 { 24 return list[top--]; 25 } 26 27 bool Stack::isEmpty() const 28 { 29 return top == -1; 30 } 31 32 int main() 33 { 34 Stack s1; 35 Stack s2; 36 int k,x; 37 while(cin>>k>>x) 38 { 39 if(k == 1) 40 { 41 s1.push(x); 42 } 43 if(k == 2) 44 { 45 s2.push(x); 46 } 47 } 48 while(!s1.isEmpty()) 49 { 50 cout<<s1.Pop()<<" "; 51 } 52 cout<<endl; 53 while(!s2.isEmpty()) 54 { 55 cout<<s2.Pop()<<" "; 56 } 57 58 }
代码如上,栈只是很简单地实现了一下。
这道题让我纠结的是,样例输出中,没有输出结束的标志,也没有一开始让你输入一个数据,表示本次输入有几组数据。所以一开始我就简单的看了一下输入样例中有7组数据,所以用for(int i=0;i<7;i++)来循环输入数据,所以第一组测试数据是没问题的,但其他组的测试数据,因为不是7组了,所以全部错误。
然后不知道该怎么操作了,还以为是这道题出的有问题,但我请教了一下别人,说是用
while(cin>>x)
{
}
我把代码改动了一下,测试数据就都通过了。
因为以前写过几道OJ的题,所以知道这种写法,可以来用来输入多组数据。
但背后的机制我应该还是没搞明白,就算是这样写,测试数据不也还是那几个吗,也没有输入让while循环结束的标志,可能有?但我不知道?
不知道为什么,但还是AC了。
所以先把这个问题思路记着,以后知道原因的话,再来补充吧。