데이터 구조창고 로 간단 한 계산 기 를 만들다
3507 단어 데이터 구조
typedef enum RPN_TYPE
{
OP_NUM,
OP_SYMBOL,
OP_ADD, // +
OP_SUB, // -
OP_MUL, // *
OP_DIV, // /
}RPN_TYPE;
typedef struct Cell
{
RPN_TYPE _type;
int value;
}Cell;
실현 부분
int CountRPN(Cell* rpn, size_t n)
{
assert(rpn);
size_t i = 0;
Stack s;
StackInit(&s);
for (i = 0; i < n; i++)
{
if (rpn[i]._type == OP_NUM)
{
StackPush(&s, rpn[i].value);
}
else
{
int left, right;
right = StackTop(&s);
StackPop(&s);
left = StackTop(&s);
StackPop(&s);
switch (rpn[i].value)
{
case OP_ADD:
StackPush(&s, left + right);
break;
case OP_SUB:
StackPush(&s, left - right);
break;
case OP_MUL:
StackPush(&s, left * right);
break;
case OP_DIV:
StackPush(&s, left / right);
break;
default:
break;
assert(0);
}
}
}
return StackTop(&s);
}
디 버 깅 부분
void TestRPN()
{
Cell rpn[] =
{
{ OP_NUM, 12 },
{ OP_NUM, 3 },
{ OP_NUM, 4 },
{ OP_SYMBOL, OP_ADD }, //+
{ OP_SYMBOL, OP_MUL }, //*
{ OP_NUM, 6 },
{ OP_SYMBOL, OP_SUB }, //-
{ OP_NUM, 8 },
{ OP_NUM, 2 },
{ OP_SYMBOL, OP_DIV }, // /
{ OP_SYMBOL, OP_ADD }, //+
};
printf(" :%d
", CountRPN(rpn, sizeof(rpn) / sizeof(Cell)));
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
정수 반전Udemy 에서 공부 한 것을 중얼거린다 Chapter3【Integer Reversal】 (예) 문자열로 숫자를 반전 (toString, split, reverse, join) 인수의 수치 (n)가 0보다 위 또는 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.