函数模板实现栈Stack(静态数组)

模板设计

首先创建一个模板类stack,这个stack中有保护元素:对应类型元素的指针、记录当前已有多少元素的整形变量count,当stack要插入新的元素时,count自增,直接添加到数组的末尾,删除时,count自减即可。该类拥有自己的成员函数,用来返回该stack的大小以及栈顶的元素。

功能设计

在这里插入图片描述

代码

main.cpp

#include <iostream> 
using namespace std;
#define MAXSIZE 1000
#include "mystack.h"

int main()
{
   cout<<"创建一个栈sta"<<endl<<endl; 
   stack <int > sta;  
   cout<<"将 1 压入栈内"<<endl;
   sta.push(1);
   cout<<"输出栈内元素:"<<endl;sta.show();
   cout<<"将 2 压入栈内"<<endl; 
   sta.push(2);
   cout<<"输出栈内元素:"<<endl;sta.show();
   cout<<"将 3 压入栈内"<<endl; 
   sta.push(3);
   cout<<"输出栈内元素:"<<endl;sta.show();
   int a = sta.top();
   cout << "栈顶元素是:"<< a << endl;  
   cout<< "栈的大小:"<< sta.size() <<endl;
   cout<<"删除栈顶元素"<<endl;
   sta.pop();
   cout<<"输出栈内元素:"<<endl;sta.show();
   a = sta.top();
   cout << "栈顶元素是:"<< a << endl;
   cout<< "栈的大小:"<< sta.size() <<endl;
   cout<<"栈为空嘛?1表示空, 结果为:"<<sta.empty()<<endl; 
   return 0;
}
/*
s.empty()//如果栈为空返回true,否则返回false  
s.size()//返回栈中元素的个数  
s.pop()//删除栈顶元素但不返回其值  
s.top()//返回栈顶的元素,但不删除该元素  
s.push(X)//在栈顶压入新元素 ,参数X为要压入的元素
*/

mystack.h

#include <iostream> 
using namespace std;
#define MAXSIZE 1000

template <typename T > 

class stack
{
	protected:
	    T*  data;
	    int count;
	public:
	    stack(){
		    data = new T[MAXSIZE];
	        count = 0;
	    }
	    ~ stack(){ delete [] data; }
	    
	    int size(){
	    	return count;
		}
	    void push(T a)
	    {
	        data[ count++ ] = a;
	    }
	    void pop()
	    {
	    	if ( count == 0 )  ;
	        T a = data[ -- count]; 
		}
	    T top()
	    {
	        if ( count == 0 )  ;
	        T a =  data[ count - 1 ]; 
	        return a;
	    }
	    bool empty()
	    {
	        if ( count == 0 ) return true ;
	        return false;
	    }
	    void show()
	    {
	    	for(int i=0;i<count;i++)
	    		cout<<data[i]<<" ";
	    	cout<<endl<<endl;
		}
};

测试结果

在这里插入图片描述

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值