欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2024-01-28 17:02:46
...

模板设计

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

功能设计

函数模板实现栈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;
		}
};

测试结果

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