题目描述ios
模拟STL stack类设计实现你的stack类,该类需具备入栈,出栈,判栈空,取栈顶元素等功能;利用该类实现本题要求。测试
输入描述spa
分别构造两个空栈,再读入若干对整数v、x; 1<=v<=2; 将元素x入第v个栈设计
输出描述code
最后将两个栈中元素出栈,并输出;每一个栈中元素占一行,元素间以空格分隔blog
样例输入ci
1 100 2 200 1 300 2 400 1 50 1 60 2 80
样例输出it
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 }
代码如上,栈只是很简单地实现了一下。io
这道题让我纠结的是,样例输出中,没有输出结束的标志,也没有一开始让你输入一个数据,表示本次输入有几组数据。因此一开始我就简单的看了一下输入样例中有7组数据,因此用for(int i=0;i<7;i++)来循环输入数据,因此第一组测试数据是没问题的,但其余组的测试数据,由于不是7组了,因此所有错误。class
而后不知道该怎么操做了,还觉得是这道题出的有问题,但我请教了一下别人,说是用
while(cin>>x)
{
……
}
我把代码改动了一下,测试数据就都经过了。
由于之前写过几道OJ的题,因此知道这种写法,能够来用来输入多组数据。
但背后的机制我应该仍是没搞明白,就算是这样写,测试数据不也仍是那几个吗,也没有输入让while循环结束的标志,可能有?但我不知道?
不知道为何,但仍是AC了。
因此先把这个问题思路记着,之后知道缘由的话,再来补充吧。
多是测试数据的最后有一个文件结束的标识符,while(cin>>x)识别到了这个,因此循环就结束了。