c 中缀转后缀

原创 2007年09月22日 12:51:00
#include<stdio.h>
#include<stdlib.h>
#define MAX 100
typedef struct
{
  char data[MAX];
  int top;
}Stack1;
typedef struct
{
  char data[MAX];
  int top;
}Stack2;
void Init(Stack1 *stack1,Stack2 *stack2)
{
 stack1->top=stack2->top=-1;
}
int check(char ch,Stack1 *stack1,Stack2 *stack2)
{
 int i;
 switch(ch)
 {
  case '+':
  if(stack1->data[stack1->top]=='-'||stack1->data[stack1->top]=='*'||stack1->data[stack1->top]=='/')
  {
   stack2->data[++stack2->top]=stack1->data[stack1->top--];
   stack1->data[++stack1->top]=ch;
  }
  else
  stack1->data[++stack1->top]=ch;
  return 1;
  case '-':
  if(stack1->data[stack1->top]=='+'||stack1->data[stack1->top]=='*'||stack1->data[stack1->top]=='/')
  {
   stack2->data[++stack2->top]=stack1->data[stack1->top--];
   stack1->data[++stack1->top]=ch;
  }
  else
   stack1->data[++stack1->top]=ch;
  return 1;
  case '*':
  if(stack1->data[stack1->top]=='/')
  {
   stack2->data[++stack2->top]=stack1->data[stack1->top--];
   stack1->data[++stack1->top]=ch;
  }
  else
   stack1->data[++stack1->top]=ch;
  return 1;
  case '/':
  if(stack1->data[stack1->top]=='*')
  {
   stack2->data[++stack2->top]=stack1->data[stack1->top--];
   stack1->data[++stack1->top]=ch;
  }
else
 stack1->data[++stack1->top]=ch;
 return 1;
 case ')':
i=stack1->top;
while(stack1->data[i]!='(' && i>=0)i--;
 if(i==-1)return 0;
while(stack1->data[stack1->top]!='(')
{
 stack2->data[++stack2->top]=stack1->data[stack1->top--];
}
stack1->top--;
return 1;
 }
}
void main(){
 int i,flag,k=0,sum1,sum2;
 char ch[MAX];
 Stack1 *stack1=(Stack1 *)malloc(sizeof(Stack1));
 Stack2 *stack2=(Stack2 *)malloc(sizeof(Stack2));
 Init(stack1,stack2);
 printf("请输入中缀表达式:");
 gets(ch);
 while(ch[k])
 {
if(ch[k]>='0'&&ch[k]<='9')
 stack2->data[++stack2->top]=ch[k];
else if(ch[k]>='a'&&ch[k]<='z' || ch[k]>='A'&&ch[k]<='Z')
 stack2->data[++stack2->top]=ch[k];
else if(ch[k]=='(')
 stack1->data[++stack1->top]=ch[k];
else if(ch[k]=='+' ||ch[k]=='-'||ch[k]=='*' || ch[k]=='/'||ch[k]==')')
 flag=check(ch[k],stack1,stack2);
 if(!flag) break;
 k++;
 }
 if(flag)
 {
for(i=0;i<=stack1->top;i++)
{
 if(ch[i]=='(') sum1++;
 if(ch[i]==')') sum2++;
}
if(sum1!=sum2)
{
 printf("表达式错误. ");
 return;
}
printf("后缀表达式为:");
for(i=0;i<=stack2->top;i++)
 printf("%c",stack2->data[i]);
for(i=stack1->top;i>=0;i--)
 printf("%c",stack1->data[i]);
printf(" ");
}
else
printf("表达式错误. ");
getch();
}
 
版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

C/C++的中缀转后缀并求值的实现

C/C++实现简单的中缀转后缀并求值

SzNOI c003 中缀表达式转后缀表达式

个人觉得我写的应该是目前网上写的版本比较简单的了。。。这也是我开博客的原因,尽量写出简单的代码,一方面可以巩固自己,一方面也能方便别人 中缀表达式转化为后缀表达式是通过栈实现 思路是,写两个函数,分别...

C/C++ 算法 中缀转后缀表达式实现2---实现加减乘除四则算数(整型,包括括号)

C/C++ 算法 中缀表达式转换位后缀表达式实现2---实现加减乘除四则算数(整型,包括括号) 中缀(infix)表达式:即人们常用的算数逻辑表达式,其特点是操作符位于操作数的中间,如表达式:a+b*...

中缀表达式转后缀表达式

  • 2015-06-09 19:04
  • 488KB
  • 下载

中缀式与后缀式的转化 郁闷的C小加(一)

郁闷的C小加(一) 题目来源:http://acm.nyist.net/JudgeOnline/problem.php?pid=257 时间限制:1000 ms  |  内存限制:65535 KB...

中缀表达式转成后缀表达式 C实现

2015年05月13日 21:26:20 这几天看数据结构一直都说一个中缀转后缀的问题!今天我就来实现一下!这个只是当作交流与启蒙。但是也算是心血,有不足的地方欢迎指出!谢谢大家! 要实现这个...

中缀转后缀

  • 2015-12-05 00:38
  • 1006B
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)