数据结构学习笔记-16

逆波兰运算

#include <stdio.h>
#include <ctype.h>
#include <stdlib.h>

#define STACK_INIT_SIZE 20
#define STACKINCREMENT 10
#define MAXBUFFER 10

typedef double ElemType;
typedef struct
{
    ElemType *base;
    ElemType *top;
    int stackSize;
}sqStack;

InitStack(sqStack *s)
{
    s->base = (ElemType *)malloc(STACK_INIT_SIZE * sizeof(ElemType));

    if( !s->base)
        exit(0);

    s->top = s->base;
    s->stackSize = STACK_INIT_SIZE;

}

Push(sqStack *s, ElemType e)
{    
    if( s->top - s->base >= s->stackSize)
    {
        s->base = (ElemType *)realloc(s->base, (s->stackSize + STACKINCREMENT)*sizeof(ElemType));
        if( !s->base )
            exit(0);

        s->top = s->base + s->stackSize;
        s->stackSize = s->stackSize + STACKINCREMENT;

    }

    *(s->top) = e;
    s->top++;
}

Pop(sqStack *s, ElemType *e)
{
    if(s->top == s->base)
           return;

    *e = *--(s->top);
}

int StackLen(sqStack *s)
{
    return (s->top - s->base);
}

int main()
{
    sqStack s;
    char c;
    double d, e;
    char str[MAXBUFFER];
    int i = 0;


    InitStack(&s);

    printf("请按逆波兰表达式输入待计算数据,以空格为间隔符,#为结束符: n");
    scanf("%c", &c);

    while( c != '#')
    {
        while( isdigit(c) || c=='.')
        {
            str[i++] = c;
            str[i] = '