这是我作为小白程序员第一次发表自己的博客,清多多关照 本人比较喜欢使用C++来进行程序的撰写,故以后看到的大部分语言均为C++
堆栈是一种基本数据类型,其基本特性是先入后出,C++中所提供的STL库对应的是stack
使用时需要
#include <stack>
using namespace std;
typedef int typename;//定义int为基本数据类型,其中int可以用char,double等进行替换
int main()
{
stack <typename> st;
return 0;
}
堆栈最常用的场景是后缀表达式的计算,下面主要来讲述一下stack的基本操作
分别是压入堆栈,弹出堆栈,清空,返回长度,取得栈顶元素,打印全部元素,判断是否为空
void push(typename x)
void pop()
void clear()
int size()
typename gettop()
void print()
bool IsEmpty()
我利用了C++中的Class对其进行有效的封装,增加了代码的可移植性,其中Top指针和data数组是作为private进行存放的,其余的成员函数作为public供对象访问。这样做的好处在于Class提高了代码的可用性,其次每个对象都有每个对象所独有的地址单元,利用class独有的private属性可以提高其隐私性,运用C++中的析构函数回收机制实现对象内存与datra指针的释放,防止因遗忘而造成的内存泄漏
以下是我的代码://封装为mystack.h,使用时可以直接调用,同STL库中的用法,实现方法为数组实现,链表方式较为繁琐
#include <iostream>
using namespace std;
/*非STL库*/
typedef int TypeName;//定义基本数据类型
class mystack
{
public:
int top;//堆栈指针
TypeName *data;
mystack()//创建一个空的堆栈 ,构造函数
{
top=-1;
data=new int;
cout<<"自动创建成功"<<endl;
}
void push(TypeName n)
{
top=top+1;
data[top]=n;
cout<<"push成功!"<<endl;
}
void pop()
{
top--;
}
TypeName GetTop()
{
return data[top];
}
bool IsEmpty()
{
return (top==-1);
/*等价于以下代码*/
/*if(top==-1) return true; else return false;*/
}
void clear()
{
top=-1;
}
int size()
{
return top+1;
}
/*新增功能*/
void print()
{
cout<<"您输入的序列有:"<<endl;
for(int i=0;i<size();i++)
cout<<data[i]<<endl;
}
~mystack()
{
delete data;
}
};