1> 手动封装一个顺序栈类(数据元素为整形),要求私有成员属性:堆区空间的指针,用于存放数据,和一个指向栈顶元素的变量
代码如下:
#include <iostream>
using namespace std;
#define MAXSIZE 10
typedef int datatype;
//定义栈的类
class My_stack
{
private:
datatype *ptr; //指向堆区空间
int top; //记录栈顶元素
public:
My_stack():ptr(new int[MAXSIZE]),top(-1){cout<<"向堆区申请空间"<<endl;} //指向堆区空间,10个int大小,
~My_stack() //析构函数
{
delete []ptr;
}
bool empty(); //判空函数
bool full(); //判满函数
void push(datatype e); //入栈函数
datatype pop(); //出栈函数
void output(); //遍历栈
datatype gettop(); //获取栈顶元素的引用
};
bool My_stack::empty() //判栈空
{
return top==-1?true:false;
}
bool My_stack::full()
{
return top==MAXSIZE-1?true:false;
}
void My_stack::push(datatype e) //顺序栈-入栈
{
if(full()) return;
ptr[++top]=e; //入栈先加后压
}
datatype My_stack::pop()
{
if(empty()) return -1;
return ptr[top--];
}
void My_stack::output()
{
if(empty()) return;
for(int i=0;i<=top;i++)
{
cout<<ptr[i]<<" ";
}
cout<<endl;
}
datatype My_stack::gettop()
{
if(empty())
{
cout<<"栈空,无栈顶元素"<<endl;
return -1;
}
return ptr[top];
}
int main()
{
My_stack S;
// S.init();
char ch;
datatype e;
//顺序栈-入栈
do
{
cout<<"请输入入栈的数据元素:";
cin>>e;
S.push(e);
cout<<"请确定还需要继续入栈吗,请选择Y/N:";
cin>>ch;
}while(ch=='Y'||ch=='y');
S.output();
//顺序栈-出栈
do
{
e=S.pop();
cout<<"出栈的元素是:"<<e<<endl;
cout<<"请确定还需要继续出栈吗,请选择Y/N:";
cin>>ch;
}while(ch=='Y'||ch=='y');
//顺序栈遍历
S.output();
//获取栈顶元素
e = S.gettop();
cout<<"栈顶元素 = "<<e<<endl;
return 0;
}
运行结果如下:
2> 思维导图