如果是初学者建议先简单阅读一本通的数据结构
1.栈(stack)
栈又名堆栈,是一种运算受限的线性表。其限制位仅允许在表的一端进行插入和删除,这一端被称为栈顶,相对的,另一端为栈底。
用法:在求强连通分量的tarjan算法中要用栈来维护,实际上所有的递归程序本质上都是在调用系统栈。 看不懂没关系
C++ 提供了该容器。
在使用时需要#include <stack》
下面介绍用法:
//定义stack对象
stack <int> s;
stack <char> s1;
stack <string> s2;
s.empty();
//如果栈是空的,就返回1;否则就返回0
s.size();
//返回栈的元素个数
s.top();
//栈的顶部元素
s.pop();
//弹出栈的顶部元素
s.push(x);
//栈顶加入一个新元素x
你也可以自己用结构体写栈的操作,因为noip现在支持STL,比赛中为了尽可能避免一切失误,最好直接使用STL。(不考虑常数慢)
2.单向队列(queue)
队列也是一种运算受限的线性结构,只允许在队列首部删除,队列尾部插入。
队列的应用是在spfa或bfs等需要先来先走的情况。
队列也有STL。
试想一下,在生活中我们可能要排队取做一些事情(食堂打饭),先进入队列的就可以先离开,后进入的就要后离开。
下面介绍用法:
//定义单向队列
queue<int> q;
queue<double> q2;
//入队 ,将x加入队列末端
q. push(x);
//出队,弹出队首元素(并不会返回值
q.pop();
//返回队首元素
q.front();
//返回队尾元素
q.back();
//判断队列空,如果空返回true,有元素则返回false
q.empty();
//返回队列的元素个数
q.size();