📄 tmstack.h
字号:
#ifndef _TM_STACK_H
#define _TM_STACK_H
#include "Globals.h"
class NoMem{
public:
NoMem(){printf("NoMem\n");};
};
class OutOfBounds{
public:
OutOfBounds(){printf("OutOfBounds\n");};
};
class TmStack{
public:
TmStack(int MaxTmStackSize = 1024);
~TmStack () {}
bool IsEmpty() const {return m_nTop == 0; }
bool IsFull() const {return m_nTop == m_nMaxTop ; }
int Top() const;
double TopD() const;
void Push(const int x);
void PushC(const char x);
void PushD(const double x);
int Pop();
double PopD();
char PopC();
private :
int m_nTop; // 栈顶
int m_nMaxTop; // 最大的栈顶值
BYTE m_sStack[DADDR_SIZE];
} ;
TmStack::TmStack(int MaxTmStackSize)
{
m_nMaxTop = MaxTmStackSize;
m_nTop = 0;
}
int TmStack::Top() const
{
static int x;
// 返回栈顶元素
if (IsEmpty())
throw OutOfBounds();
else {
memcpy(&x, &m_sStack[m_nTop-4],sizeofint);
return x;
}
}
double TmStack::TopD() const
{
static double x;
// 返回栈顶元素
if (IsEmpty())
throw OutOfBounds();
else {
memcpy(&x, &m_sStack[m_nTop-8],sizeofdouble);
return x;
}
}
void TmStack::Push(const int x)
{
//添加元素x
if (IsFull())
throw NoMem();
memcpy(&m_sStack[m_nTop], &x, sizeofint);
m_nTop += 4;
return ;
}
void TmStack::PushD(const double x)
{
//添加元素x
if (IsFull())
throw NoMem();
memcpy(&m_sStack[m_nTop], &x, sizeofdouble);
m_nTop += 8;
return ;
}
void TmStack::PushC(const char x)
{
//添加元素x
if (IsFull())
throw NoMem();
memcpy(&m_sStack[m_nTop], &x, sizeofchar);
m_nTop += 1;
return ;
}
int TmStack::Pop()
{
static int x;
// 删除栈顶元素,并将其送入x
if (IsEmpty())
throw OutOfBounds();
m_nTop -= 4;
memcpy(&x, &m_sStack[m_nTop], sizeofint);
return x;
}
double TmStack::PopD()
{
static double x;
// 删除栈顶元素,并将其送入x
if (IsEmpty())
throw OutOfBounds();
m_nTop -= 8;
memcpy(&x, &m_sStack[m_nTop], sizeofdouble);
return x;
}
char TmStack::PopC()
{
static char x;
// 删除栈顶元素,并将其送入x
if (IsEmpty())
throw OutOfBounds();
m_nTop -= 1;
memcpy(&x, &m_sStack[m_nTop], sizeofchar);
return x;
}
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -