类模版(栈)

【问题描述】

栈是一种特殊的数据结构,它只允许在一端进行插入元素操作和删除元素操作,这一端叫做栈顶。即,不允许在任何的中间位置进行插入和删除。

请用类模板方式设计一个栈类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;

}

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值