棧的應用十分廣泛,例如之前提到的瀏覽器、影象或文字編輯器等等的回退操作,作業系統使用棧進行記憶體管理,棧還有乙個很重要的應用就是在程式語言中實現了遞迴。
十進位制與其他進製之間的轉換,通常採用除基取餘法,餘數需要逆序取。棧是一種後進先出的資料結構,當需要逆序操作時,我們就可以使用棧實現十進位制與其他進製之間的轉換,因為無法限制十進位制數的大小,所以這裡使用鏈棧。
這裡**只是實現了十進位制與十進位制以下進製之間的轉換,十進位制以上的進製因為結果含有字元,結果轉換比較麻煩,非本文主要意義就不再實現。
注:**僅提供思路。
double digit(int number) //計算位數
}else //遇到加減乘除
else //其他情況,新運算子都入棧
push(s, expression);
}else //棧為空,直接入棧
push(s, expression);}}
}//此時中綴表示式遍歷完畢,就將棧內元素全部出棧
while (stackempty(s)!=0)
postfixexpression[length++] = pop(s);
postfixexpression[length++] = '\0';//字尾表示式此時轉換完畢
cout<<"轉換為字尾表示式:"<= '0' && expression <= '9') //遇到數字就入棧
push(s, (expression-'0'));
else//遇到運算子
}result = pop(s);//保留最後結果
destroystack(s);//用完就銷毀鏈棧
return result;
}
資料結構與演算法 棧的應用
逆序輸出 輸出的次序和處理次序相反,而且遞迴的深度不容易預知。比如進製轉換,括號匹配 進製轉換 void convert stack char s,int n,int base while n 0 括號匹配 括號匹配 bool paren vector char v elseif s.empty e...
資料結構與演算法 簡單棧實現及其應用
棧 棧的實現 棧的鍊錶實現 棧的陣列實現 以上測操作都是以常數時間執行,非常快速的只有乙個操作,以下我們用陣列實現自己的乙個棧 author liaojiamin date created in 18 07 2020 12 2 public class mystack 擴容 public void ...
資料結構與演算法(三)棧
棧 stack 又名堆疊,它是一種運算受限的線性表。限定僅在表尾進行插入和刪除操作的線性表。這一端被稱為棧頂,相對地,把另一端稱為棧底。向乙個棧插入新元素又稱作進棧 入棧或壓棧,它是把新元素放到棧頂元素的上面,使之成為新的棧頂元素 從乙個棧刪除元素又稱作出棧或退棧,它是把棧頂元素刪除掉,使其相鄰的元...