棧實現計算器

2021-08-22 12:09:54 字數 2198 閱讀 3112

在表示式中的轉換規則

運算元 :進棧

操作符 : 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...