C++栈和典型迷宫问题( 三 )


//出栈T pop() {    Node<T> * node=NULL;    T data;    if(this->head){        //获取头结点        node=this->head;        //得到数据        data=https://www.huyubaike.com/biancheng/node->data; //原来头结点的后驱成为新头结点 this->head=this->head->next; //删除结点 delete node; this->size--; return data; }else{ //链表为空 return NULL; }}为了方便查询栈顶数据,需要提供一个查询栈顶数据的操作 。
//查看栈顶数据T getTop() {    if(this->head) {        return this->head->data;    } else {        return NULL;    }}3.3.3 测试链式栈int main(int argc, char** argv) { Stack<int> stack ; //入栈 for(int i=0; i<10; i++) {stack.push(i); } cout<<"栈中实际数据大?。?quot;<<stack.getSize()<<endl; cout<<"查询栈顶数据:"<<stack.getTop()<<endl; //出栈 for(int i=0; i<10; i++) {cout<<stack.pop()<<endl; } return 0;}执行结果:

C++栈和典型迷宫问题

文章插图
4. STL 中的栈实际应用时,可以使用STL的stack容器 。除了上述的基本操作外,stack容器还提供比较操作,这些操作可以被用于栈与栈之间的比较,相等指栈有相同的元素并有着相同的顺序 。
#include <iostream>#include <stack>using namespace std;int main(int argc, char** argv) { stack<int> myStack; //入栈 for(int i=0;i<5;i++){myStack.push(i); } cout<<"栈中数据大小:"<<myStack.size()<<endl; //出栈 for(int i=0;i<4;i++) {cout<<"栈顶数据:"<<myStack.top()<<endl;myStack.pop(); } cout<<"栈顶数据:"<<myStack.top()<<endl; stack<int> myStack_; myStack_.push(0); bool res= myStack_==myStack; cout<<"比较结果:"<<res<<endl; return 0;}输出结果:
C++栈和典型迷宫问题

文章插图
5. 栈的应用总是在想,如果没有栈,编程将如何进行 , 可想而知,栈的重要性 。函数调用、递归算法……无处不有栈的身影 。下面将通过一个典型的案例加深对栈的理解 。
5.1 迷宫问题迷宫问题描述:在一个错综复杂的迷宫世界,有一个入口,有一个出口 。在入口位置有一只小老鼠,出口位置有一块奶酪 。要求通过编码的方式帮助小老鼠在入口到出口之间找到一个可行的路径 。
迷宫问题是一类典型问题,解决此类问题的关键思想包括:
  • 试探过程:每到达一个当前位置(第一个当前位置为入口) , 记录此当前位置四周可尝试的其它位置,然后选择其中一个位置作为当前位置尝试着继续前进 。
如下表格,设值为0的单元格为可通行,1为不可通行 。值标识为红色的单元格表示当前位置,在继续前进时,记录其左、右、下三个可行位置 。并选择右边位置为新的当前位置 。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qgFmPTLw-1665378597893)(D:\红泥巴\我的课程体系\(信息奥赛)课程体系\第一阶段:入门级(CSP-J)\第三部分:数据结构\1_第一章节:线性表\教学教案\栈的图片\6.png)]
  • 回溯过程:当在前进时被阻碍后,退到记录表中下一个可行位置再试 。重复试探再回溯至到找到出口 。
如上图所示后继续选择右行,则发现被阻碍 。
C++栈和典型迷宫问题

文章插图
这时就需要在已经存储的可行位置选择一个,这步操作称为回溯 。
C++栈和典型迷宫问题

文章插图
很明显 , 每次记录的可尝试位置是在回溯后使用的 , 符合先进后出的存储理念 。栈在迷宫问题中用来存储可试探的位置 。
实现流程:
  1. 使用二维数组模拟迷宫 。在二维数组中用 0 表示可通行,1 表示不可通行 。

    推荐阅读