用逆波蘭表示式完成簡單計算器

2021-08-18 16:52:56 字數 2295 閱讀 2306

###definition.h

#pragma once

#include#include#include#define len 10

#define stack_size 20

typedef enum comput //運算

comput;

typedef struct cell //順序表內,棧內儲存的元素(有兩個成員)

cell;

typedef cell datatype;

typedef struct stack

stack;

typedef struct seqlist

seqlist;

###test.c

#include"functions.h"

// 思路:

//1.使用者輸入字首表示式,將式存入順序表a

//2.將字首表示式轉化為字尾表示式,並存入順序表b中

//3.對b內字尾表示式運算(借助乙個棧臨時儲存操作符),並輸入結果

void test()

int i= comput_reverse_polish_expression(&list1,&s);//計算字尾表示式

printf("結果為%d\n", i);

}int main()

###seqlist.h

#pragma once

#include"definition.h"

void seqinit(seqlist* pseq)

void seqcheckfull(seqlist **pseq)

}void seqpushback(seqlist* pseq, comput _type, int value)

void seqdestory(seqlist* pseq)

void seqpopback(seqlist* pseq)

pseq->size--;

}

###stack1.h

#pragma once

#include"definition.h"

// 棧的實現介面

void stackinit(stack* s)//棧的初始化

void stackpush(stack* s, comput _type,int value)//入棧

s->_array[s->_top]._type = _type;

s->_array[s->_top].value = value;

(s->_top)++;

}void stackpop(stack* s)//出棧

else }

datatype stacktop(stack* s)//取棧頂元素

int num = s->_top;

datatype i = s->_array[(--num)];

return i;

}int stackempty(stack* s)//判斷棧是否為空

else

}

###functions.h

#pragma once

#include"stack1.h"

#include"seqlist.h"

void turn_reverse_polish_expression(seqlist *list, seqlist *list1, stack *s)

if (cur->_type == op_symbol)//遇到操作符

else

stackpush(s, cur->_type, cur->value);

}} size--;

cur++;

} if (stackempty(s) == 0)//如果順序表list已經走到尾,則應該判斷棧s是否為空,如果不為空則補在list1後面。 }

}int comput_reverse_polish_expression(seqlist *list1, stack *s)

if (cur->_type == op_symbol)

case op_sub:

case op_mul:

case op_div:

default:

break;

}stackpush(s, cur->_type, newnum);

size--;

cur++;

} } return stacktop(s).value;

}

計算器 逆波蘭表示式

1.實現原理 說明 在我原來做的逆波蘭計算器中,postfix是用來表示逆波蘭表示式的。但是和buptpatriot討論後,想直接實現,下面是直接實現的方法 首先,定義優先順序 function level op 之後,掃瞄輸入序列,讀取輸入的字串,把其中的數字 可能是浮點型,負數 和操作符提取出來...

計算器(表示式計算 字尾表示式實現)逆波蘭表示式

問題描述 從標準輸入中讀入乙個整數算術運算表示式,如24 1 2 36 6 2 2 12 2 2 計算表示式結果,並輸出。要求 1 表示式運算子只有 表示式末尾的 字元表示表示式輸入結束,表示式中可能會出現空格 2 表示式中會出現圓括號,括號可能巢狀,不會出現錯誤的表示式 3 出現除號 時,以整數相...

字尾表示式計算規則 逆波蘭計算器

從左到右掃瞄,將數字壓入堆疊 遇到運算子,依次彈出數字棧中的棧頂元素和次棧頂元素,計算出來的值,再次入棧 依次迴圈掃瞄字尾表示式重複1,2規則,棧中唯一的數字就是字尾表示式的計算結果 這裡主要注意下第二條,計算時 棧頂元素和次棧頂元素 在符號運算時的先後順序 將次棧頂元素放在 運算符號的 左邊 棧頂...