因为专题一做的基本都是水题,就不往博客上发记录了。嗯..而且写这个博客是为了巩固自身,就不去在意排版这类事情啦~
专题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都写上的,不过写完栈之后才发现好像花费的时间略多。。。那就下次再写吧。
本人标准的理工科出身,对于写博客这种事情还是第一次做,而且写这个博客的目的还是为了巩固知识,所以写的东西还不尽完善,希望大家能多提意见。如果有哪位初学者碰巧看到了这篇文章,而且对你有所帮助,那真是太好不过了~