棧的應用 數值轉換與表示式求值

2021-09-24 23:19:17 字數 2254 閱讀 2483

2.表示式求值

原理大家肯定都知道,就除k取餘,直到商為0時,倒序輸出餘數即為轉換後的k進製數。一說倒序,就很符合棧(last in first out,lifo)「後進先出」的思想。

這個簡單,直接上**:

#include#include#include#define max 100//定義棧的最大值 

typedef int elemtype;

typedef structsqstack;

sqstack sqstackinit()

int stackempty(sqstack s)

else return 0;

}sqstack sqstackpush(sqstack s,elemtype x)

s.top++;

s.base[s.top]=x;

return s;

}elemtype getsqstacktop(sqstack s)

sqstack sqstackpop(sqstack s,elemtype *x)

*x=s.base[s.top];

s.top--;

return s;

}void fprintf(int m)

else

}void solve(int n,int r)

ss=sqstackpush(ss,n);

while(!stackempty(ss))

printf("\n");

}int main()

// sqstack s=sqstackinit();

// cout<

回到目錄

如果學過編譯原理,這個是比較好理解的。

#include #include #include // 內含isdigit()函式

#include #define stack_init_size 100 // 棧容量

#define stack_increment 10 // 棧增量

typedef float datatype;

typedef char symboltype;

typedef struct stack

*stack,linkstack;

// 棧的初始化

stack init_stack(stack s)

// 判棧空

int isempty(stack s)

// else

return (s->top==s->base ? 1:0);

}// 判棧滿

int isfull(stack s)

// else

return (s->top - s->base == s->stacksize ? 1:0);

}// 運算元壓棧

void push(stack s, datatype e)

*s->top++ = e;

}// 運算子壓棧

void pushsymbol(stack s, symboltype e)

*s->top++ = e;

}// 算子彈棧

datatype pop(stack s)

} // 運算子彈棧

symboltype popsymbol(stack s)

}// 棧的銷毀

void destroystack(stack s)

// 運算子優先順序表

char priority[7][7] = //行row(左邊的)是棧頂運算子,列col(上邊的)是入棧運算子

, ,,,

,,};// 確定運算子所在的行數或列數

int operator(char c)}

// 計算彈出的兩個運算元與彈出棧頂運算子的值

float calculation(float a, char op, float b)

}// 表示式求值函式

float calculatingexpression(char *s)}}

destroystack(optr);

return pop(opnd); // 執行到這一步,說明表示式正確,彈出運算元棧的值即為運算結果

}int main()

注意:「/」,做的是取商操作,不是「÷」。

回到目錄

棧應用 表示式求值

include stdafx.h include using namespace std const int explenght 20 const int stack init size 20 const int stack incrment 10 templateclass stack stack...

棧應用 表示式求值

include include define length 100 初始分配棧的長度 define add len 10 棧長增量 typedef struct 定義字元棧 sqstack void initstack sqstack s 初始化乙個棧 void push sqstack s,int...

表示式求值 棧的應用

表示式求值 西西設計的機械人卡多掌握了加減法運算以後,最近又學會了一些簡單的函式求值,比如,它 知道函式min 20,23 的值是20 add 10,98 的值是108等等。經過訓練,西西設計的機械人卡多 甚至會計算一種巢狀的更複雜的表示式。假設表示式可以簡單定義為 1.乙個正的十進位制數 x 是乙...