因为专题一做的基本都是水题,就不往博客上发记录了。嗯..而且写这个博客是为了巩固自身,就不去在意排版这类事情啦~

专题2有四个部分  分别是栈、队列、BFS、DFS

为什么分成这四个专题呢,因为这是学长给我们指定的学习内容ORZ

他是这么说的:“1. 为什么要把栈和DFS放在一起呢?是想让大家体会这两者之间的深层联系,如果大家明白了栈的后进先出特性,进而也就能够理解DFS的回溯思
想。但是在写DFS时一般是用不到栈的,这点请大家注意。
2. 为什么要把队列和BFS放在一起呢?因为写BFS时是要用到队列的[摊手]。”


1.栈

        栈(stack)是一种数据结构,有着特殊的访问模式,即后入先出(LIFO)。这也就意味着我们只能在栈的一段进行插入、删除操作,这端被称为栈顶。而相应的另一端就称为栈底。

        在数据结构书当中,提到了栈的几种构建方法,一种是以数组为容器,另外一种就是用链表的形式储存栈。以数组为容器的栈称为顺序栈,它最大的优点就是容易建立,缺点是如果数据过多,而栈比较小,就需要添加元素;而如果数据较少、栈很大,就会造成空间浪费。常用动态数组的方法来解决这些问题。用链表的形式储存栈称为链栈,链栈构建起来要比顺序栈麻烦很多,不过优点是基本不会浪费空间。

        对于我所知道的ACM来说,链栈是不经常使用的,因为构建链栈很浪费时间,而ACM比赛对于时间的把控还是很重要的,而且大家都说ACM比赛并不是很在意空间是否浪费,所以说还是顺序栈用的更多一些。所以下面就不提链栈了(然而是因为我对链栈的掌握基本只停留在数据结构这本书上ORZ)

   顺序栈

        构建一个顺序栈的方法有两种:

        1.创建一个数组,和一个int类型参数top,初始时top=0,表示栈顶无元素。

              插入元素x时,令

          a[top]=x;
          x++;
              删除元素时,令
          x--;

         2.另外一种方法就是利用C++的标准函数库(STL)

              在使用之前,需要添加头文件#include<stack>,然后构造容器 stack<elemtpye> 栈名(例如 stack<int> s)

                 empty() 堆栈为空则返回真

                 pop() 移除栈顶元素

                 push() 在栈顶增加元素

                 size() 返回栈中元素数目

                 top() 返回栈顶元素

(函数摘自:http://www.169it.com/article/2839007600903800247.html)

   函数的具体用法: 栈名+‘.’(点运算符)+上述函数

   例如:s.empty() ,如果堆栈为空就会返回真,否则返回假。

  !!注意: pop()函数只会移除栈顶元素,而并不会取出它。如果需要访问并移除栈顶元素,先用top()函数返回元素值,再pop()。

------------------------------------------------------------------------------------------------------------------------------------------------------

本来想把专题2的基础知识栈、队列、DFS、BFS都写上的,不过写完栈之后才发现好像花费的时间略多。。。那就下次再写吧。

本人标准的理工科出身,对于写博客这种事情还是第一次做,而且写这个博客的目的还是为了巩固知识,所以写的东西还不尽完善,希望大家能多提意见。如果有哪位初学者碰巧看到了这篇文章,而且对你有所帮助,那真是太好不过了~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值