资源简介
后缀表达式求值,练习堆栈,算法。大家需要可以参考下
代码片段和文件信息
#include
#include
#include
using namespace std;
typedef unsigned int DWORD;
class PostOrder
{
public:
PostOrder(char *pInput)
{
assert(pInput != 0);
m_pszInput = pInput;
m_dwSize = strlen(pInput);
assert(m_dwSize>=3);
m_pszOutput = new char[m_dwSize];
assert(m_pszOutput!=0);
memset(m_pszOutput0m_dwSize);
m_dwOpIdx = 0;
m_dwResult = 0;
}
DWORD GetPriority(char ch)
{
int prio = 0;
switch (ch)
{
case ‘+‘:
case ‘-‘:
prio = 1;
break;
case ‘*‘:
case ‘/‘:
prio = 2;
break;
case ‘(‘:
case ‘)‘:
prio = 3;
break;
default:
assert(0);
}
return prio;
}
DWORD Process()
{
char *pStack = new char[m_dwSize];
int StackIdx = 0;
DWORD StackBottomPrio = 0;
for(DWORD i = 0; i< m_dwSize;i++)
{
char ch = m_pszInput[i];
if ((‘0‘ <= ch)&&(‘9‘>= ch))
{
m_pszOutput[m_dwOpIdx] = ch;
m_dwOpIdx++;
}
else
{
switch (ch)
{
case ‘+‘:
case ‘-‘:
case ‘*‘:
case ‘/‘:
if (GetPriority(ch)>StackBottomPrio)
{
pStack[StackIdx] = ch;
StackIdx++;
if (!StackBottomPrio) StackBottomPrio = GetPriority(ch);
}
else
{
while(StackIdx > 0)
{
if (‘(‘ == pStack[--StackIdx])
{
StackIdx++;
break;
}
else
{
m_pszOutput[m_dwOpIdx] = pStack[StackIdx];
m_dwOpIdx++;
}
}
DWORD dwTEMP = StackIdx;
if (!dwTEMP) StackBottomPrio = 0;
else
{
dwTEMP--;
while((dwTEMP > 0) && (‘(‘ != pStack[dwTEMP-1]))
{
dwTEMP--;
}
StackBottomPrio = GetPriority(pStack[dwTEMP]);
}
pStack[StackIdx] = ch;
StackIdx++;
}
break;
case ‘(‘:
pStack[StackIdx] = ch;
StackIdx++;
StackBottomPrio = 0;
break;
case ‘)‘:
while(StackIdx > 0)
{
if (‘(‘ != pStack[--StackIdx])
{
m_pszOutput[m_dwOpIdx] = pStack[StackIdx];
m_dwOpIdx++;
}
else
break;
};
break;
default:
assert(0);
}
}
}
while(StackIdx > 0)
{
StackIdx--;
m_pszOutput[m_dwOpIdx] = pStack[StackIdx];
m_dwOpIdx++;
}
m_pszOutput[m_dwOpIdx] = 0;
delete pStack;
return 0;
}
void calculate()
{
DWORD dwLen = strlen(m_pszOutput);
DWORD *pStack = new DWORD[dwLen] ;
DWORD StackIdx = 0;
for (DWORD dwIdx = 0; dwIdx < dwLen; dwIdx++)
{
- 上一篇:vc++简易图形编辑器MFC
- 下一篇:判断一个文件是否是合法的PE文件
相关资源
- 后缀表达式求值c语言版
- 中缀表达式转后缀表达式的C++代码
- VC关联指定后缀名和打开程序
- 字符串前后缀添加功能
- 栈实现中缀表达式到后缀表达式的转
- 表达式求值求后缀c语言
- c++栈操作实现,堆栈,出栈,取栈顶
- c语言实现中缀表达式转后缀并求值
- 中缀表达式变后缀表达式的求值
- MFC(C++)程序与文件关联后缀名含C
- 输入一个中缀表达式,将其转换为等
- 后缀表达式求解
- c++实现中缀变后缀表达式
- c++ 获取当前执行位置的调用栈
- MFC获取电脑文件夹下文件的名称,类
- 基于x86 + linux 的堆栈回溯实验(xos_
- 堆栈实现的计算器,c++语言
- lru算法c语言实现,采用了堆栈.
- 自己用C语言写的简单计算器,用堆栈
- c语言写的简单的计算器
- 后缀式转中缀式C语言
- 中缀表达式转后缀表达式源程序二叉
评论
共有 条评论