【问题描述】
栈是一种特殊的数据结构,它只允许在一端进行插入元素操作和删除元素操作,这一端叫做栈顶。即,不允许在任何的中间位置进行插入和删除。
请用类模板方式设计一个栈类Stack<T>,其中有两个私有数据成员:stack[SIZE](存放栈元素)和 top(栈顶元素下标),以及 3个公有成员函数:push(元素入栈)、pop(元素出栈)和 stackempty(判断栈是否为空栈)。
在主函数中建立一个整数栈和一个字符栈,例如 Stack<int> A; Stack<char> B。然后自行设计循环进行压栈操作,利用栈是否为空来判断进行出栈操作,以达到下面的输出描述形式。注意,元素个数由n给出,字符串的输入只能单个字符的接收,不能按整体字符串进行接收。
提示,主函数可以如下设计:
int main()
{
Stack<int > A;
Stack<char> B;
int x, n;
char ch;
cin>>n;
for(int i=0;i<n;i++)
{
cin>>x;
A.push(x);
}
while(!A.stackempty())
{
x=A.pop();
cout<<x<<" ";
}
... ... // 请自行补充
return 0;
}
【样例输入】
5
1 2 3 4 5
7
abcdefg
【样例输出】
5 4 3 2 1
g f e d c b a
#include<iostream>
using namespace std;
#include<stack>
#define SIZE 100
template<class T>
class Stack{
private:
T stack[SIZE];
int top;
public:
Stack(){
top=-1;
}
void push(T x);
int pop();
bool stackempty();
};
template<class T>
void Stack<T>::push(T x)
{
top++;
stack[top]=x;
}
template<class T>
int Stack<T>::pop()
{
if(top==-1) return 0;
else
{
int t=stack[top];
stack[top--]=0;
return t;}
}
template<class T>
bool Stack<T>::stackempty()
{
if(top==-1) return true;
else return false;
}
int main()
{
Stack<int > A;
Stack<char> B;
int x, n;
char ch;
cin>>n;
for(int i=0;i<n;i++)
{
cin>>x;
A.push(x);
}
while(!A.stackempty())
{
x=A.pop();
cout<<x<<" ";
}
cout<<endl;
cin>>n;
for(int i=0;i<n;i++)
{
cin>>ch;
B.push(ch);
}
while(!B.stackempty())
{
ch=B.pop();
cout<<ch<<" ";
}
return 0;
}