zoukankan      html  css  js  c++  java
  • 数据结构基础之栈

    数据结构之栈结构:

    1.  栈的特点:

    相比于一个普通的数组,栈控制了操作的方法,元素只能在栈顶入栈,也只能在栈顶出栈。

    2.  栈的用途:

    在深入优先搜索(DFS)中会用到,比如现在有一个图如下:

    现在要从A出发要遍历整张图,那么首先看与A相连的B、D,任选一个,比如B,那么要先保存A,将其压入栈,然后遍历B,B又到C,然后C没有其余的路径就可以返回了,取出栈顶的元素B,B也没有其余路径,再取出栈顶元素A,现在A可以走D,那么D压入栈,走E,返回到D,再返回到A,现在A是出发点,又没有其余路径,那么说明整张图都遍历完全。

     

    访问顺序为:A->B->C->B->A->D->E->D->A  (大致如此)

    在这个搜索中,栈的作用便可以很清晰的看到。

    在程序设计中,深入优先搜索是很重要的一种算法,也很常见,经典的迷宫找出路问题就要用到它。

    3.  栈的写法:

    如果自己手写栈的模板的话,可以封装成一个结构体或者类,首先要有元素本体、入栈操作、出栈操作、取栈顶元素,这三个是最基本的。比如我要建一个int类型的栈的话,那么可以封装如下:

     1 typedef struct
     2 { 
     3   int st[1000];       //栈里面的元素
     4   int top;            //栈顶,最初栈里面没有东西,可以设置为0
     5   bool push(int data) //入栈操作
     6   {
     7     if(top>=1000)     //表示栈已经被装满了
     8     {
     9       printf("栈满!
    ");
    10       return false;   //返回0表示没有入栈成功
    11     }
    12     st[top++]=data;
    13     return true;
    14   }
    15   bool pop()          //出栈,即将现在栈顶的那个元素舍去
    16   {
    17     if(top==0)        //表示栈空
    18     {
    19       printf("栈空!
    ");
    20       return false;
    21     }
    22     top--;
    23   }
    24   int front()         //取栈头元素
    25   {
    26     return st[top-1];
    27   }
    28 }Stack; 

    如果在一些程序设计比赛,比如acm中,一般不会进行栈的封装,要么直接调用STL,要么简略写下就可以了,如下:

    int st[1000],top=0;

    入栈:st[top++]=data;

    出栈:data=st[--top];

    4.  对于栈的说明

    与队列一样,都是数据结构最最基础的一块,要熟练掌握,同时了解一下他的特殊用法,比如单调栈等。

  • 相关阅读:
    AngularJS中实现无限级联动菜单
    理解AngularJS生命周期:利用ng-repeat动态解析自定义directive
    denounce函数:Javascript中如何应对高频触发事件
    Javascript中的循环变量声明,到底应该放在哪儿?
    优雅的数组降维——Javascript中apply方法的妙用
    如何利⽤360Quake挖掘某授权⼚商边缘站点漏洞
    Java课程设计--网络聊天室
    DS博客作业08--课程总结
    DS博客作业07--查找
    DS博客作业06--图
  • 原文地址:https://www.cnblogs.com/hchlqlz-oj-mrj/p/5065138.html
Copyright © 2011-2022 走看看