3.1 栈的应用
3.1.1 表达式求值
后缀表达式
栈求解方法
1)若当前字符是操作数,直接发送给后缀表达式
2)若当前字符是运算符:
若当前运算符的优先级高于栈顶运算符,则进栈
否则,退出栈顶运算符发送给后缀表达式
3.1.2 迷宫问题
深度优先遍历
设定当前位置的初值为入口位置
do{
若当前位置可通:
则{将当前位置插入栈顶;
若该位置为出口位置,则算法结束
否则切换当前位置的下邻方块为新的当前位置
}
否则,当前位置不通
则{若栈不空
{若栈顶位置尚有其他方向未探索:
设定新的当前位置为栈顶的下一相邻快,继续试探
若栈顶的四周均不通
{
删去栈顶位置;
若栈不空,重新测试新的栈顶位置
直至找到一个可通的相邻块或出栈至栈空
}
}
若栈空:表明没有出口
}
}
3.2 队列的应用
3.2.1 迷宫问题
广度优先搜索
队列数据类型
typedef struct
{int x,y;
}PoseType;
typedef struct
{int pre;
PoseType seat;
}QElemType;