废话不多说,直接看代码。
下面是Stack类
class Stack{
public:
Stack(int isize=100);
int Pop(double & dval);
int Push(double dval);
int Top(double & dval);
~Stack();
private:
int m_count;
int m_max;
double * m_pData;
};
下面是类的成员函数的实现
#include "stdafx.h"
#include"stack.h"
#include <iostream>
using namespace std;
Stack::Stack(int isize)
{
if(isize>0)
{
m_max = isize;
m_pData = new double[m_max];
m_count = 0;
}
else
{
m_max = 0;
m_pData = NULL;
m_count = -1;
}
}
int Stack::Pop(double & dval)
{
if(m_count>0)
{
m_count = m_count-1;
dval = m_pData[m_count];
cout<<"You have pop the "<<dval<<endl;
return 1;
}
cout<<"The stack is empty!"<<endl;
return 0;
}
int Stack::Push(double dval)
{
if(m_count<m_max)
{
m_pData[m_count] = dval;
m_count = m_count+1;
cout<<"You have push the "<<dval<<endl;
return 1;
}
else
{
//cout<<"The stack is full!"<<endl;
//return 0;
cout<<"The stack is full, so we double the stack place!"<<endl;
double * tmp_pData = m_pData;
m_max = m_max*2;
m_pData = new double[m_max];
for(int i=0;i<m_count;i++)
m_pData[i] = tmp_pData[i];
m_pData[m_count] = dval;
m_count = m_count+1;
cout<<"You have push the "<<dval<<endl;
return 1;
}
}
int Stack::Top(double & dval)
{
if(m_count>0 && m_count<m_max)
{
dval = m_pData[m_count-1];
return 1;
}
return 0;
}
Stack::~Stack()
{
if(m_pData != NULL)
delete [] m_pData;
}
在实现代码中我们要注意:
1、在 int Pop(double & dval) 和 int Top(double & dval) 中我用到了引用型的参数,因为如果仅用(double dval)做参数的话,就不能返回边界条件,如到达栈低时,希望返回一个提示信息,若为return -1;则会与栈的返回元素形成歧义等。
2、我在 int Push(double dval) 函数中加入了空间扩展机制,若栈满,则空间扩展1倍。你也可不按此处理,看个人情况而定。
谢谢,请指教!