数据结构实验之栈与队列三:后缀式求值

来源:互联网 发布:elsevier是什么数据库 编辑:程序博客网 时间:2024/06/10 04:52
#include <iostream>#include <stdio.h>#include <malloc.h>using namespace std;typedef struct SNode{    int Data;    struct SNode *Next;}*Stack;void MakeEmpty(Stack PtrS){    PtrS->Next = NULL;}Stack CreatStack(){    Stack PtrS;    PtrS = (Stack)malloc(sizeof(struct SNode));    if(PtrS == NULL)        exit(-1);    MakeEmpty(PtrS);    return PtrS;}int IsEmpty(Stack PtrS){    return PtrS->Next == NULL;}void Push(int X, Stack PtrS){    Stack p;    p = (Stack)malloc(sizeof(SNode));    p->Data = X;    p->Next = PtrS->Next;    PtrS->Next = p;}int Pop(Stack PtrS){    if(!IsEmpty(PtrS))    {        int Topc;        Stack FirstCell = PtrS->Next;        PtrS->Next = FirstCell->Next;        Topc = FirstCell->Data;        free(FirstCell);        return Topc;    }    else        exit(-1);}int Add(char X, Stack PtrS){    int a, b;    a = Pop(PtrS);    b = Pop(PtrS);    switch(X)    {        case '+': return (b+a);break;        case '-': return (b-a);break;        case '*': return (b*a);break;        case '/': return (b/a);break;        default : return 0;    }    return 0;}void Trans(char X, Stack PtrS){    if(X >= 48 && X <= 57)        Push((X-'0'), PtrS);//强制类型转换    else    {        int a = Add(X, PtrS);        Push(a, PtrS);    }}int main(){    Stack PtrS;    PtrS = CreatStack();    char c[100];    gets(c);    for(int i=0; c[i]!='#'; i++)    {        Trans(c[i], PtrS);    }    cout<<Pop(PtrS);    return 0;}
阅读全文
0 0
原创粉丝点击