栈和队列的应用非常之广只要问题满足后进先出和先进先出原则均可使用栈和队列作为其数据结构 栈的应用 数制转换 将一个非负的十进制整数N转换为另一个等价的基为B的B进制数的问题很容易通过除B取余法来解决 【例】将十进制数转化为二进制数 解答按除取余法得到的余数依次是则十进制数转化为二进制数为 分析由于最先得到的余数是转化结果的最低位最后得到的余数是转化结果的最高位因此很容易用栈来解决 转换算法如下 typedef int DataType;//应将顺序栈的DataType定义改为整型 void MultiBaseOutput (int Nint B) {//假设N是非负的十进制整数输出等值的B进制数 int i; SeqStack S; InitStack(&S); while(N){ //从右向左产生B进制的各位数字并将其进栈 push(&SN%B); //将bi进栈<=i<=j N=N/B; } while(!StackEmpty(&S)){ //栈非空时退栈输出 i=Pop(&S); printf(%di); } } 除数制的转换外栈还可用于解决括号匹配检查行编辑处理和表达式求解等问题具体【参见参考书目】 |