錯誤應該是因為記憶體不夠了,但是不知道如何改。求修改,謝謝了。
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define size_new 100
#define size_malloc 500
typedef struct node{
char *head;
char *lead;
int size_head_lead;
int size_head_lead_1;
}Sqstack;
void init(Sqstack *S)
{
S->head = (char *)malloc(sizeof(char)*size_malloc);
if(!S->head)
exit(0);
S->lead = S->head;
S->size_head_lead_1 = size_malloc;
S->size_head_lead = 0;
}
void push(Sqstack *S,char st_r)
{
S->lead[S->size_head_lead] = st_r;
S->size_head_lead++;
}
void pop(Sqstack *S)
{
printf("%c",S->lead[S->size_head_lead-1]);
S->size_head_lead--;
}
int main(void)
{
Sqstack S;
init(&S);
char zifu[200];
while(scanf("%s",zifu) != EOF)
{
for(int i = 0;i < strlen(zifu);i++)
{
if(zifu[i] >= 65&&zifu[i] <= 90)
printf("%c",zifu[i]);
if(S.size_head_lead == 0)
push(&S,zifu[i]);
if((zifu[i] == '+'&&S.lead[S.size_head_lead-1] == '*')||(zifu[i] == '+'&&S.lead[S.size_head_lead-1] == '/')||(zifu[i] == '-'&&S.lead[S.size_head_lead-1] == '*')||(zifu[i] == '-'&&S.lead[S.size_head_lead-1] == '/')||(zifu[i] == '-'&&S.lead[S.size_head_lead-1] == '-')||(zifu[i] == '-'&&S.lead[S.size_head_lead-1] == '+')||(zifu[i] == '+'&&S.lead[S.size_head_lead-1] == '-')||(zifu[i] == '+'&&S.lead[S.size_head_lead-1] == '+'))
{
while(S.lead[S.size_head_lead-1] != '(')
{
pop(&S);
}
push(&S,zifu[i]);
}
if((zifu[i] == '*')||(zifu[i] == '/')||(zifu[i] == '('))
{
push(&S,zifu[i]);
}
if(zifu[i] == ')')
{
while(S.lead[S.size_head_lead-1] != '(')
{
pop(&S);
}
S.size_head_lead--;
}
}
}
return 0;
}
Description
為了便于處理運算式,常常將普通運算式(稱為中綴表示)轉換為后綴{運算子在后,如X/Y寫為XY/運算式。在這樣的表示中可以不用括號即可確定求值的順序,如:(P+Q)*(R-S) → PQ+RS-*。后綴運算式的處理程序如下:掃描后綴運算式,凡遇運算元則將之壓進堆疊,遇運算子則從堆疊中彈出兩個運算元進行該運算,將運算結果壓堆疊,然后繼續掃描,直到后綴運算式被掃描完畢為止,此時堆疊底元素即為該后綴運算式的值。
輸入一個中綴運算式,編程輸出其后綴運算式,要求輸出的后綴運算式的運算次序與輸入的中綴運算式的運算次序相一致。為簡單起見,假設輸入的中綴運算式由+(加)、-(減)、×(乘)、/(除)四個運算子號以及左右圓括號和英文字母組成,其中算術運算子遵守先乘除后加減的運算規則。假設輸入的中綴運算式長度不超過200個字符,且都是正確的,即沒有語法錯誤,并且凡出現括號其內部一定有運算式,即內部至少有一個運算子號。
Input
若干行,每行對應一個中綴運算式
Output
若干行,每行對應一個由中綴運算式轉換而來的后綴運算式
Sample Input
X+A*(Y-B)-Z/F
A+B*C+(D*M-N)+(S-T)*Y
A-B*C+(D-E*F)/G
Sample Output
XAYB-*+ZF/-
ABC*+DM*N-+ST-Y*+
ABC*-DEF*-G/+
uj5u.com熱心網友回復:
多謝了
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/77424.html
標籤:C語言
上一篇:鏈表的創建
下一篇:這題有點難呀,我好迷!救救孩子吧
