利用棧和佇列資料結構實現中綴轉字尾表示式

2021-09-24 13:49:41 字數 2224 閱讀 6207

中綴轉字尾

**字尾表示式的運算過程**:遇到數字入棧,遇到運算子從棧中彈出兩個元素,結算結果,結果入棧,繼續掃瞄.

**中綴轉字尾**:

```1. 掃瞄字串,遇到數字,入隊

2. 遇到符號  

2.1 如果棧為空則入棧

2.2 符號為左括號則入棧

2.3 符號為右括號,則依次彈出棧頂符號入隊,直到遇到左括號

2.4 如果棧不為空,則與棧中符號比較優先順序

2.4.1 如果棧頂為小括號,則直接入棧

2.4.2 如果比棧中的符號優先順序高,則符號入棧

2.4.1 如果比棧中符號優先順序低或者相等, 則依次彈出棧中的符號入隊,直到遇到小括號或者棧中的符號優先順序比它低或者棧為空才會將自身入棧

3. 遇到末尾,則依次彈出棧中符號,並依次入隊

**如下

#define _crt_secure_no_warnings 

#include "mylist.h"

#include #include using namespace std;

bool compare(char csymbol1, char csymbol2)

else

}}/*1. 掃瞄字串,遇到數字,入隊

2. 遇到符號

2.1 如果棧為空則入棧

2.2 符號為左括號則入棧

2.2 符號為右括號,則依次彈出棧頂符號入隊,直到遇到左括號

2.3 如果棧不為空,則與棧中符號比較優先順序

2.3.1 如果棧頂為小括號,則直接入棧

2.3.2 如果比棧中的符號優先順序高,則符號入棧

2.3.1 如果比棧中符號優先順序低或者相等,則彈出棧中的符號入隊,繼續比較(遇到小括號或者比它高或者棧為空才會比較完)

3. 遇到末尾,則依次彈出棧中符號,並依次入隊

*/int main()

char sztmpnumbuf[10] = ;

strncpy(sztmpnumbuf, pnum, nlen);

char sztmpsymbol[10] = ;

strncpy(sztmpsymbol, psymbol, 1);

pnum = psymbol + 1;

//數字入佇列

if (nlen > 0)

//如果棧為空則入棧

if (clist.isstatckempty())

//符號為左括號則入棧

if (sztmpsymbol[0] == '(')

//符號為右括號,則依次彈出棧頂符號入隊,直到遇到左括號

cmylist::clistnode* pnode;

if (sztmpsymbol[0] == ')')

clist.popfrontstatck();//把左括號出棧

continue;

}clist.gettop(&pnode);

while (pnode != nullptr)

//如果比棧中的符號優先順序高, 則符號入棧

if (compare(sztmpsymbol[0], pnode->szdata[0]))

else

}//比較完後還沒有找到優先順序高的棧中的符號都入隊了,此時棧為空,符號入棧

if (pnode == nullptr)

}} //迴圈完畢處理最後乙個數字並把棧全部放入佇列中

//遇到末尾, 則依次彈出棧中符號, 並依次入隊

int nlen = psymbol - pnum;

if (nlen > 9)

char sztmpnumbuf[10] = ;

strncpy(sztmpnumbuf, pnum, nlen);

if (nlen > 0)

cmylist::clistnode* pnode;

clist.gettop(&pnode);

while (pnode != nullptr)

cout << "轉換後的結果:" << endl;

cmylist::clistnode* pnodequeue;

clist.getqueue(&pnodequeue);

while (pnodequeue != nullptr)

cout << endl;

/*//運算沒有寫完,遍歷佇列,數字就放入棧中,符號就運算

*/system("pause");

return 0;

}

資料結構 佇列和棧 Python 實現

佇列和棧都是一種特殊的線性表,所以也各有順序表和煉表兩種表示方法。佇列的python版本資料結構如下 coding utf 8 class node object def init self,value,next 0 self.value value self.next next 指標 class ...

資料結構 棧和佇列 Javascript實現

用順序結構和鏈式結構分別實現棧和佇列 實現順序棧和鏈棧的插入 刪除 獲取棧頂等方法 function 彈棧 var pop function 獲取棧頂元素 var gettop function 獲取棧 var getstack function var arr var front queuesiz...

資料結構 棧和佇列

棧 基礎 知識棧 練習題 佇列 基礎知識 棧示意圖 後進先出 順序棧結構定義 define maxsize 1024 struct stack 操作函式 push 入棧 pop 出棧 struct lstack 鏈棧示意圖 操作函式 push 入棧 pop 出棧 注意 也可以直接呼叫系統已經寫好的庫...