博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
MyGrowStack
阅读量:4984 次
发布时间:2019-06-12

本文共 2540 字,大约阅读时间需要 8 分钟。

//MyGrowStack.h

#if !defined (STACK_H)#define  STACK_Hconst int InitStack=1;const int ShrinkNum=8;const int Maxbufsize=20;const int TokError=0;const int TokNum=1;class IStack{	friend class StackSeq;public:	IStack();	~IStack();	int Pop();	void Push(int n);    int Top() const;	bool IsEmpty() const;private:	void Shrink();	void Grow();	int* _arr;	int _capacity;	int _top;};class StackSeq{public:	StackSeq(IStack const& stack);	bool AtEnd() const;	void Advance();    int GetNum() const;private:	int _iCurr;	IStack const& _stack;};class Input{public:	Input();	int Token() const;	int Number() const;private:	char _buf[Maxbufsize];	int _token;};class Calculator{public:	Calculator(){}   IStack const& GetStack() const { return _stack;}   bool Execute(Input const& input);private:   int Calculate(int num1,int num2,int token) const;   IStack  _stack;};#endif
//main.cpp

#include 
#include "MyGrowStack.h"int main(){ Calculator theCalculator; bool statue; do { std::cout<<">"; Input input; statue=theCalculator.Execute(input); if (statue) { for (StackSeq seq(theCalculator.GetStack());!seq.AtEnd();seq.Advance()) { std::cout<<" "<
<

//MyGrowStack.h

#include 
#include
#include
#include
#include "MyGrowStack.h"IStack::IStack():_top(0),_capacity(InitStack){ _arr=new int[_capacity];}IStack::~IStack(){ delete []_arr;}void IStack::Shrink(){ int * newArr=new int[_top*2]; for (int i=_top-1;i!=0;i--) { newArr[i]=_arr[i]; } delete _arr; _capacity=_top*2; _arr=newArr;}void IStack::Push(int n){ assert(_top<=_capacity); if (_top==_capacity) { Grow(); } _arr[_top++]=n;}int IStack::Pop() { assert(0<_top); if (_top*3<=_capacity) { Shrink(); } return _arr[--_top];}int IStack::Top() const{ assert(_top>0); return _arr[_top-1];}bool IStack::IsEmpty() const{ return _top==0;}void IStack::Grow(){ std::cout<<"Doubling stack from "<<_capacity<
>_buf; int c=_buf[0]; if (std::isdigit(c)) { _token=TokNum; } else if (c=='+'||c=='*'||c=='/'||c=='|'||c=='&') { _token=c; } else if (c=='-') { if (std::isdigit(_buf[1])) { _token=TokNum; } else _token=c; } else _token=TokError;}int Input::Token() const{ return _token;}int Input::Number() const{ assert(_token==TokNum); return std::atoi(_buf);}bool Calculator::Execute(Input const& input){ int token=input.Token(); bool statue=false; if (token==TokError) { std::cout<<"Unkonw token!"<

 
 
 
 

转载于:https://www.cnblogs.com/javaspring/archive/2012/03/12/2656153.html

你可能感兴趣的文章
关于android4.3 bluetooth4.0的那些事儿
查看>>
嵌入式成长轨迹14 【嵌入式环境及基础】【Linux下的C编程 上】【gcc、gdb和GNU Make】...
查看>>
C语言讲义——变量的输出
查看>>
shell脚本 ----每天学一点shell
查看>>
FZU2150 :Fire Game (双起点BFS)
查看>>
php_常用操作_读取文件_数据库操作
查看>>
Linux中GCC源码编译安装
查看>>
equals与==关于Object覆盖和重载问题
查看>>
KVO
查看>>
js基础教程四之无缝滚动
查看>>
关于C51 keil使用中.c文件的链接心得
查看>>
Ios 弹框 MJPopup,KxMenu
查看>>
ssh框架添加时添加不到数据库问题
查看>>
解决AR中Receivable Activities 运行不了的问题
查看>>
SQL SERVER 如何处理带字母的自增列--【叶子】
查看>>
使用DocFX生成文档
查看>>
AssemblyInfo.cs文件的作用
查看>>
android之PackageManager简单介绍
查看>>
GitLab备份与恢复
查看>>
20155307《网络对抗》免杀原理与实践
查看>>