史萊姆論壇

返回   史萊姆論壇 > 專業主討論區 > 程式語言討論區
忘記密碼?
論壇說明

歡迎您來到『史萊姆論壇』 ^___^

您目前正以訪客的身份瀏覽本論壇,訪客所擁有的權限將受到限制,您可以瀏覽本論壇大部份的版區與文章,但您將無法參與任何討論或是使用私人訊息與其他會員交流。若您希望擁有完整的使用權限,請註冊成為我們的一份子,註冊的程序十分簡單、快速,而且最重要的是--註冊是完全免費的!

請點擊這裡:『註冊成為我們的一份子!』

Google 提供的廣告


發文 回覆
 
主題工具 顯示模式
舊 2011-10-23, 07:45 PM   #1
sdds4747
註冊會員
榮譽勳章

勳章總數
UID - 348987
在線等級: 級別:0 | 在線時長:1小時 | 升級還需:4小時
註冊日期: 2011-10-02
文章: 2
精華: 0
現金: 2 金幣
資產: 2 金幣
預設 程式 - 如何把這一個程式改成 中序變前序

//如何把這一個程式改成 中序變前序??要改哪一些呢??


#include "stdafx.h"

#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#define MAX_STACK_SIZE 100
#define MAX_EXPR_SIZE 100
typedef enum
{
lparan,
rparan,
plus,
minus,
times,
divide,
mod,
eos,
operand,
ERROR_KEY
}precedence;

static int isp[8]={0,19,12,12,13,13,13,0};
static int icp[8]={20,19,12,12,13,13,13,0};
precedence stack[MAX_STACK_SIZE];
char expr[MAX_EXPR_SIZE];
void postfix(void);
precedence get_token(char*,int*);
void print_token(precedence);
void push(int*,precedence);
precedence pop(int*);
precedence stack_empty(void);
int top=0,n=0;


void push(int *top,precedence token)
{
if((*top)>=MAX_STACK_SIZE-1)
{
printf("The stack is full!!\n");
return;
}
else
stack[++*top]=token;
}
precedence pop(int *top)
{
if(*top==-1)
return stack_empty();
else
return stack[(*top)--];
}
precedence stack_empty()
{
precedence ch;
ch=ERROR_KEY;
return ch;
}


precedence get_token(char *symbol,int *n)
{

*symbol=expr[(*n)++];
switch(*symbol)
{
case'(': return lparan;
case')': return rparan;
case'+': return plus;
case'-': return minus;
case'/': return divide;
case'*': return times;
case'%': return mod;
case'\0': return eos;
default: return operand;

}
}
void postfix()
{

char symbol;
precedence token;
stack[0]=eos;
int n=0;
int top=0;
for(token=get_token(&symbol,&n); token != eos;token=get_token(&symbol,&n))
{
if(token==operand)
printf("%c",symbol);
else if(token==rparan)
{
while(stack[top]!=lparan)
print_token(pop(&top));
pop(&top);

}
else
{
while(isp[stack[top]]>=icp[token])
print_token(pop(&top));
push(&top,token);
}
}
while((token=pop(&top))!=eos)
print_token(token);
printf("\n");

}
void print_token(precedence token)
{
precedence symbol;
symbol=token;
switch(symbol)
{
case 0:
printf("(");
break;
case 1:
printf(")");
break;
case 2:
printf("+");
break;
case 3:
printf("-");
break;
case 4:
printf("*");
break;
case 5:
printf("/");
break;
case 6:
printf("%");
break;
case 7:
printf("");
break;
default:
break;
}
}
int main(void)
{
do
{
printf("Please input a infix expression: \n");
printf("expression: ");
gets(expr);
postfix();
printf("\nPress any key to continue~~~\n\n");
getche();
}while(expr);
system("pause");
return 0;
}
sdds4747 目前離線  
送花文章: 0, 收花文章: 0 篇, 收花: 0 次
回覆時引用此帖
發文 回覆



發表規則
不可以發文
不可以回覆主題
不可以上傳附加檔案
不可以編輯您的文章

論壇啟用 BB 語法
論壇啟用 表情符號
論壇啟用 [IMG] 語法
論壇禁用 HTML 語法
Trackbacks are 禁用
Pingbacks are 禁用
Refbacks are 禁用

相似的主題
主題 主題作者 討論區 回覆 最後發表
疑問 - 如何用if else 或 switch 把三個面積合成一個程式 9319074 程式語言討論區 6 2009-11-20 01:55 AM
如何把一個檔案用成像exe應用程式,不必解壓縮的,有那種軟體可抓嗎? keikolcd 一般電腦疑難討論區 4 2003-08-04 01:35 AM
Ghost 這一個程式該如何使用 電腦狂 軟體應用問題討論區 2 2003-02-07 06:26 AM


所有時間均為台北時間。現在的時間是 06:34 PM


Powered by vBulletin® 版本 3.6.8
版權所有 ©2000 - 2024, Jelsoft Enterprises Ltd.


SEO by vBSEO 3.6.1