#include<stdio.h> #include<stdlib.h> struct Node; typedef struct Node *PtrToNode; typedef PtrToNode Stack; struct Node{ int Ele; PtrToNode Next; }; Stack CreateStack( void ) { Stack S; S = malloc( sizeof( struct Node ) ); if(S == NULL ) printf("out of space"); S->Next = NULL; return S; } void Push(int ch,Stack S) { PtrToNode TmpCell; TmpCell = malloc(sizeof( struct Node )); if(TmpCell == NULL) printf("out of space "); else { TmpCell->Next = S->Next; S->Next = TmpCell; TmpCell->Ele = ch; } } int IsEmpty(Stack S) { return S->Next == NULL; } void Pop( Stack S ) { PtrToNode TmpCell; TmpCell = S->Next; S->Next = TmpCell->Next; free(TmpCell); } int Top( Stack S ) { return S->Next->Ele; } int main() { char Tmp; int val1,val2,fin; Stack S; S = CreateStack(); while( ( Tmp = getchar() ) != ‘\n‘ ) { if(Tmp == ‘ ‘) continue; if(Tmp >= ‘0‘ && Tmp <= ‘9‘) Push( Tmp - ‘0‘,S ); else if(Tmp == ‘+‘) { val1 = Top( S ); Pop( S ); val2 = Top( S ); Pop( S ); fin = val1 + val2; Push(fin, S ); } else if( Tmp == ‘-‘ ) { val1 = Top( S ); Pop( S ); val2 = Top( S ); Pop( S ); fin = val1 - val2; Push(fin, S ); } else if( Tmp == ‘*‘ ) { val1 = Top( S ); Pop( S ); val2 = Top( S ); Pop( S ); fin = val1 * val2; Push(fin, S ); } else { val1 = Top( S ); Pop( S ); val2 = Top( S ); Pop( S ); fin = val1 / val2; Push(fin, S ); } } printf("%d",Top( S )); return 0; }
算法思想:遇到数字就进栈,遇到+ - * / 就出栈两个元素计算,再压入栈中
时间: 2024-10-07 06:08:55