用C++实现栈的建立,进栈,出栈,写简单点,要有注释,谢谢各位了

 我来答
HongZe081100
2012-10-20 · TA获得超过580个赞
知道小有建树答主
回答量:436
采纳率:0%
帮助的人:439万
展开全部
#ifndef SQSTACKMANAGER_H
#define SQSTACKMANAGER_H

#include<malloc.h>
typedef unsigned int DWORD;
template<class ElemType,DWORD Init_Size>//1,指定栈中元素类型,2,栈中元素容量
class SqStackManager
{
public:
enum
{
STACK_INIT_SIZE=Init_Size, //初始化栈的容量
STACK_INCREMENT_SIZE=Init_Size //栈容量不够时,增长的数值
};

typedef struct //内部栈结构
{
ElemType* base;
ElemType* top;
int stacksize;
}SqStack;

SqStackManager() //无参构造函数
{
InitStack();
}

virtual~SqStackManager() //虚析构函数
{
DestroyStack();
}

void ClearStack() //清空栈把所有元素初始化为原始状态
{
DestroyStack();
InitStack();
}

bool PushStack(ElemType e) //元素入栈操作
{
if(S.top-S.base>=S.stacksize) //栈容量不够时
{
ElemType* newbase=(ElemType*)realloc(S.base,(S.stacksize+STACK_INCREMENT_SIZE)*sizeof(ElemType));
if(!newbase)
return false;
S.base=newbase;
S.stacksize+=STACK_INCREMENT_SIZE;
}

*S.top=e; //栈容量足够时
S.top++;
return true;
}

bool PopStack(ElemType& e) //出栈操作
{
if(S.top==S.base) //空栈,出栈返回false
{
e=0;
return false;
}
S.top--;
e=*S.top;
return true;
}

bool StackEmpty() //栈空判断,是true,否false
{
return (S.top==S.base);
}

int GetStackLength() //当前栈中元素个数
{
return (S.top-S.base);
}

bool GetStackTop(ElemType& e,bool rflag=false) //获得栈顶元素,rflag=true时移除栈顶,否则不移除
{
if(StackEmpty())
{
e=0;
return false;
}
if(!rflag)
{
e=*(S.top-1);
}
else
{
Pop(e);
}
return true;
}

void TraverseStack(void(*Visit)(ElemType&))//遍历栈中元素,可以使用visit函数操作。
{
int len=GetStackLength();
for(int i=0;i<len;i++)
Visit(S.base[i]);
}

#ifdef DEBUG_CLASS //用于调试工作的宏
void PrintStack()
{
int i=0;

while(i<S.top-S.base)
{
cout<<S.base[i++]<<endl;
}
}
#endif

private:
void InitStack() //辅助构造函数,初始化栈
{
S.base=(ElemType*)malloc(STACK_INIT_SIZE*sizeof(ElemType));
S.top=S.base;
S.stacksize=STACK_INIT_SIZE;
}
void DestroyStack() //辅助析构函数,销毁栈
{
if(S.base)
free(S.base);
S.top=S.base=NULL;
S.stacksize=0;
}

private:

SqStack S; //管理的栈对象
};
#endif
77852205
2012-10-22
知道答主
回答量:7
采纳率:0%
帮助的人:1.1万
展开全部
带有main函数的 ...
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式