###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規則,棧中唯一的數字就是字尾表示式的計算結果 這裡主要注意下第二條,計算時 棧頂元素和次棧頂元素 在符號運算時的先後順序 將次棧頂元素放在 運算符號的 左邊 棧頂...