C言語・スタックを使用した逆ポーランド記法について
C言語でスタック(リスト構造)を使用した逆ポーランド記法のプログラムを作りたいのですが
計算式(例:1234+*+)が入力された場合、どのようにして数字と演算子を区別すればいいのでしょうか?
一応スタック構造の部分は、
#include <stdio.h>
#include <stdlib.h>
/*スタック構造*/
typedef struct stack
{
int max;
int ptr;
int *stk;
} Stack;
/*スタックの確保・初期化*/
int StackAlloc(Stack *s, int max)
{
s->ptr = 0;
if ((s->stk = calloc(max, sizeof(int))) == NULL)
{
s->max = 0;
return (-1);
}
s->max = max;
return (0);
}
/*スタック解放*/
void StackFree(Stack *s)
{
if (s->stk != NULL)
{
free(s->stk);
s->max = s->ptr = 0;
}
}
/*プッシュ*/
int StackPush(Stack *s, int x)
{
if (s->ptr >= s->max)
return (-1);
s->stk[s->ptr++] = x;
return (0);
}
/*ポップ*/
int StackPop(Stack *s, int *x)
{
if (s->ptr <= 0)
return (-1);
*x = s->stk[--s->ptr];
return (0);
}
/*データのピーク*/
int StackPeek(const Stack *s, int *x)
{
if (s->ptr <= 0)
return (-1);
*x = s->stk[s->ptr - 1];
return (0);
}
/*スタックの大きさを返却*/
int StackSize(const Stack *s)
{
return (s->max);
}
/*データを返却*/
int StackNo(const Stack *s)
{
return (s->ptr);
}
/*スタックは空か*/
int StackEmpty(const Stack *s)
{
return (s->ptr <= 0);
}
/*スタックは満杯か*/
int StackFull(const Stack *s)
{
return (s->ptr >= s->max);
}
/*スタックを空にする*/
void StackClear(Stack *s)
{
s->ptr = 0;
}
といった感じで仕上げています。