在表示式中的轉換規則
運算元 :進棧
操作符 : 1)進棧: 空棧 ;優先順序高;棧頂是 "( "同時表示式不是 " )"
2)出棧並計算:表示式符號的優先順序不高於棧頂符號 ;表示式為 " )" 同時棧頂不為 "( "; 表示式 " \0 " 同時棧不為空
3)出棧但不計算:表示式為 " )"同時棧頂為 "( "
標頭檔案
子函式檔案//標頭檔案
#ifndef _stack_h
#define _stack_h
#include#define success 10000
#define failure 10001
#define ture 10002
#define false 10003
typedef int et;
struct node
;typedef struct node node;
struct stack
;typedef struct stack stack;
int stackinit(stack **s);
int stackempty(stack *s);
int stackpush(stack **s,et e);
int gettop(stack *s);
int pop(stack **s);
#endif
主函式檔案#include"stack.h"
int stackinit(stack **s)
(*s) = (stack *)malloc(sizeof(stack)*1);
if(null == (*s))
(*s)->top = null;
(*s)->count = 0;
return success;
}int stackempty(stack *s)
return (s->top == null)? ture : false;
}int stackpush(stack **s,et e)
node *p = (node *)malloc(sizeof(node)*1);
if(null == p)
p->data = e;
p->next = (*s)->top;
(*s)->top = p;
(*s)->count++;
}int gettop(stack *s)
return s->top->data;
}int e;
int pop(stack **s)
node *p = (*s)->top;
et e = (*s)->top->data;
(*s)->top = (*s)->top->next;
(*s)->count--;
free(p);
return e;
}
#include#include"stack.h"
int priority(char ch)
}int main()
; if(stackinit(&s_opt) != success || stackinit(&s_num) != success)
printf("please input : \n");
scanf("%s",opt);
while( opt[i] != '\0' || stackempty(s_opt) != ture)
}else
if( stackempty(s_opt) == ture || ( priority(opt[i]) > priority(gettop(s_opt)) )
|| ( gettop(s_opt) == '(' && opt[i] != ')' ) )
if( (opt[i] == '\0' && stackempty(s_opt) != ture) ||
(opt[i] == ')' && gettop(s_opt) != '(' ) ||
(priority(opt[i]) <= priority(gettop(s_opt)) ) )}}
} printf("%d\n",gettop(s_num));
return 0;
}
用棧實現計算器
我們平時用swith語句寫的計算器,只能處理簡單的兩個運算元和乙個運算子,這樣其實和日常應用方面差的有點遠,所以我們今天學習了一種用棧來實現一條複雜表示式的計算。這個需要用到棧的相關知識,除此之外我們還需要學會如何把中綴轉換成字尾表示式,比如 3 4 5 2 3這樣乙個表示式,從左至右遇到運算元壓入...
棧實現簡易計算器
計算數學表示式的值。輸入數學表示式,輸出表示式的計算結果。數學表示式由單個數字和運算子 構成,例如 2 3 4 5 6 4。include include include include using namespace std double result int tag template class...
(4 2)棧實現計算器
1.通過乙個 index 值 索引 來遍歷我們的表示式 2.如果我們發現是乙個數字,就直接入數棧 3.如果發現掃瞄到是乙個符號,就分如下情況 3.1 如果發現當前的符號棧為 空,就直接入棧 3.2 如果符號棧有操作符,就進行比較,如果當前的操作符的優先順序小於或者等於棧中的操作符,就需要從數棧中po...