阅读背景:

数据结构实验之栈与队列二:一般算术表达式转换成后缀式

来源:互联网 
#include<stdio.h>
#include<string.h>
#define stacksize 100010
#define ok 1
#define true 1
#define fales 0
int flag;
typedef char elemtype;
typedef int status;
typedef struct
{
    elemtype date[110];
    int top;
} seqstack;
void initstack(seqstack *s)
{
    (*s).top = 0;
}
status stackfull(seqstack s)
{
    if(s.top == stacksize) return fales;
    return true;
}
void push(seqstack *s, elemtype p)
{
    if(!stackfull(*s))
    {
        printf("F\n");
    }
    else
    {
        (*s).date[(*s).top] = p;
        (*s).top++;
    }
}
status stackempty(seqstack s)
{
    if(s.top == 0) return fales;
    return true;
}
status pop(seqstack *s, elemtype *p)
{
    if(!stackempty(*s)) return fales;
    (*s).top--;
    *p = (*s).date[(*s).top];
    return true;
}
int main()
{
    char a[100010], p;
    int n, i;
    gets(a);
    n = strlen(a);
    seqstack s;
    initstack(&s);
    for(i = 0; i < n; i++)
    {
        if(a[i] >= 'a' && a[i] <= 'z')
        {
            printf("%c", a[i]);
        }
        if(a[i] == '(')
        {
            push(&s, a[i]);
        }
        if(a[i] == ')')
        {
            while(s.date[s.top-1] != '(')
            {
                pop(&s, &p);
                printf("%c", p);
            }
            pop(&s, &p);
        }
        if(a[i] == '+' || a[i] == '-')
        {
            while(s.date[s.top-1] != '(' && stackempty(s))
            {
                pop(&s, &p);
                printf("%c", p);
            }
            push(&s, a[i]);
        }
        if(a[i] == '*' || a[i] == '/')
        {
            if(s.date[s.top-1] == '*' ||s.date[s.top-1] == '/')
            {
                pop(&s, &p);
                printf("%c", p);
            }
            push(&s, a[i]);
        }
        if(a[i] == '#')
        {
            break;
        }
    }
    while(stackempty(s))
    {
        pop(&s, &p);
        printf("%c", p);
    }
    return 0;
}#include<stdio.h>
#include<string.h>
#define st



你的当前访问异常,请进行认证后继续阅读剩余内容。

分享到: