棧的應用舉例

2021-08-09 17:07:35 字數 1769 閱讀 2708

十進位制數n和其他d進製數的轉換是計算機實現計算的基本問題,其解決方法很多,其中乙個簡單演算法基於下列原理:

n = (n div d) * d + n mod d(其中:div為整除運算,mod為求餘運算)

例如,(2007)10 = (3727)8,其運算過程如下:

可以看到上述過程是從低位到高位產生8進製的各個數字,然後從高位到低位進行輸出,結果數字的使用具有後出現先使用的特點,因此生成的結果數字可以使用乙個棧來儲存,然後從棧頂開始依次輸出即可得到相應的轉換結果。

/*    可以進行數制的轉換功能

十進位制轉換位其他進製數,這能轉化為10進製以內進製

*/void conversion()

cout

while(!stackempty_sq(s)); //定義操作符陣列

//優先順序比較陣列

char prior[7][7]=,,,

,,,};

int i = 0, j = 0;//i和j分別為兩個操作符在陣列中的位置

while( i < 7 && j < 7)

return prior[i][j];//返回相應的優先順序

}//precede

//------根據給出的運算元op1和op2,以及操作符theta得出運算結果---------

operandtype operate(operandtype op1, char theta, operandtype op2)

}//operate

//------------判斷字元e是否為操作符----------------

status in(char e, char *op)

return false;

}//in

/* 算數表示式求值的算符的優先演算法,設optr和opnd分別為運算子棧和運算子數棧,

測試時表示式必須以「#"結尾,如"2+3*5#"-------------------------------

這裡為了演算法簡單,不考慮多資料型別,測試時均為一位整數。

*/operandtype evaluateexpression();//op為運算子集合

sqstack optr,opnd;

initstack_sq(optr);

push_sq(optr,'#');

initstack_sq(opnd);

char c; //每次從鍵盤接收的字元

cin>>c;

selemtype e,x,theta; //e為每次進行判斷的棧頂元素

selemtype a,b; //進行運算時棧頂取得的兩個操鎖數

selemtype result; //運算的最終結果

gettop_sq(optr,e); //獲得數棧棧頂元素

while(c!='#' || e!='#')//不是運算子則進棧

圖:表示式求值結果

棧的應用舉例

一 目的 掌握棧的表示,實現及其針對棧的各種操作進行具體的應用。二 要求 1 建立乙個順序棧,實現括號配對,判斷乙個表示式中括號配對是否合法。2 當使用者輸入乙個合法的表示式後,能夠返回正確的結果。能夠計算的運算子包括 加 減 乘 除 括號 能夠計算的數要求在實數範圍內。對於異常表示式給出錯誤提示。...

3 2棧的應用舉例

數制轉換 十進位制數n和其他d進製數的轉換是計算機實現計算的基本問題,其解決方法很多,簡單演算法基於下列原理 n n div d d n mod d 其中 div為整除運算,mod為求餘運算 例如 1348 10 2504 8 計算過程如下圖 這演算法很簡單,在此不做解釋 我們發現到,對於任意乙個非...

棧的應用舉例(三)

struct postype 全值變數 postype begin,end 迷宮的入口座標,出口座標 postype direc 4 移動方向依次為東南西北 define maxlength 25 設迷宮的最大行列為25 typedef int mazetype maxlength maxlengt...