特殊的容器:容器适配器
stack queue priority_queue:vector+堆算法---->优先级队列
stack:
1.栈的概念:特殊的线性结构,只允许在其一端进行插入删除操作---栈顶,另一端称为栈底
2.栈的特性:后进先出 LIFO
3.栈的作用:
4.栈的应用:
#include<iostream>
using namespace std;
class Date
{
public:
Date(int year=1900,int month=11,int day=10){
_year=year;
_month=month;
_day=day;
}
Date(const Date& d){
_year=d._year;
_month=d._month;
_day=d._day;
}
private:
int _year;
int _month;
int _day;
}
int main(){
Date d;
stack<Date> s;
s.push(d);//参数为类类型对象的引用
s.empace(2018,11,10);//效率比较高,不会调用拷贝构造
return 0;
}
栈中没有迭代器,不需要,因为栈的操作已经给死了
最小栈:必须满足栈的特性
push/pop/top--->O(1)
min--->O(1)
实现最小栈的方法:使用两个栈A、B(一个放最小值,一个放数据),一个栈也行
struct Elem{
int data;
int min;
}
stack<int> _data;
stack<int> _min;
int top(){
return data.top();
}
int getmin(){
return _min.top();
}
void Pop(){
}
void Push(int x){
_data.push(x);
if(_min.empty()||_min.top()>=x){
_min.push(x);
}
}
逆波兰表达式:
class Solution{
public:
int evalRPN(vector<string>& tokens){
stack<int> s;
for(size_t i=0;i<tokens.size();++i){
string& str =tokens[i];
if(!("+"==str||"-"==str||"*"==str||"/"==str)){
s.push(atoi(str.c_str()));
else{
int right=s.top(),s.pop();
int left=s.top(),s.pop();
switch(str[0]){
case '+':
s.push(left+right);
break;
case '-':
s.push(left-right);
break;
case '*':
s.push(left*right);
break;
case '/':
s.push(left/right);
break;
}
}
}
return s.top();
}
二叉树的公共祖先结点:
bool GetNoePath(TreeNode * root,TreeNode *p,Stack<TreeNode*>& Path){
if(NULL==root||NULL==p){
return false;
}
path.push(root);
if(root==p)
rturn true;
if(GetNodePath(root->left,p,path)){
return true;
if(GetNodePath(root->rigth,p,path)){
retrn true;
path.pop();
return false;
}
TreeNode* lowestCommonAncestor(TreeNode* root,TreeNode* p,TreeNode *q){
if(NULL==root||NULL==p||NULL==q){
return NULL;
}
stack<TreeNode*> s1;
stack<TreeNode*> s2;
GetNodePath(root,p,s1);
GetNodePath(root,q,s2);
int size1=s1.size();
int size2=s2.size();
while(size1&&size2){
if(size1<size2){
s1.pop();
size1--;
}
else if(size2<size1){
s2.pop();
size2--;
}
else{
if(s1.top()==s2.top()){
return s1.top();
else{
s1.pop();
s2.pop();
size1--;
size2--;
}
}
return NULL;
}
bool IsNodeInTree(root,Node){
if(NULL==root||node==NULL){
return false;
}
if(root==Node){
return true;
}
bool Ret=false;
if(Ret==IsNodeInTree(root->left,Node){
return true;
return IsNodeInTree(root->right,Node);
}
TreeNode* lowestCommonAncestor(TreeNode* root,TreeNode* p,TreeNode *q){
if(NULL==root||NULL==p||NULL==q){
return NULL;
if(p==root||q==root){
return root;
bool isleft1=IsNodeInTree(root->left,p);
bool isright2=false;
if(isleft1){
isright2=IsNodeInTree(root->right,q);
if(isright2){
return root;
}
}
bool islift2=IsNodeTree(root->left,q)
if(islift2)
bool isright2=IsNodeTree(root->right,p);
if(isright2){
return root;
}
}
if(isleft1&&isleft2){
return lowestCommonAncestor(root->left,p,q);
return lowestCommonAncestor(root->right,p,q);
}
二叉树的层序遍历:
层序遍历:按照从上往下,每一层从左往右依次遍历
根据队列的数据结构进行操作
1.将根节点放入到队列中
循环:循环结束条件(队列不为空(!EMptyQueue(&q)))
从队列中取队头元素
访问该元素
如果该元素的左子树存在,入队列
如果该元素的右子树存在,入队列
将对头元素出队列
vector<vector<int>> leve10Order(TreeNode* root){
vector<vector<int>> vRet;
if(NULL==root){
return vRet;
}
Queue<TreeNode*> q;
q.push(root);
while(!q.empty()){
size_t leve1count=q.size();
vector<int> levelData;
for(size_t i=0;i<levecount;++i){
TreeNode* pCur=q.front();
levelData.push_back(pCur->val);
q.pop();
if(pCur->left){
q.push(pCur->left);
}
if(pCur->right){
q.push(pCur->right);
}
vRet.push_back(levelData);
}
return vRet;
}
priority_queue:
template<class T,class Con= vector<T>,class Compare=less<T>>
less greater
priority_queue<int ,vector<int>,greater<int>>
greater默认按照大于号方式给,创建小堆(此时vector<int(类型)一定要给,否则报错)
默认:less 小于方式比 ----> 创建了大堆
topk问题:
sort(array,array+6);给数组排序,
sort(array,array+6,greater<int>)
- STL容器适配器 stack, queue
stack是一种后进先出(last in first out)的数据结构.它只有一个出口,如图所示.stack允许新增元素,删除元素,取得最顶端元素.但除了最顶端外,没有其他任何地方可以存储stack ...
- STL容器用法速查表:list,vector,stack,queue,deque,priority_queue,set,map
list vector deque stack queue priority_queue set [unordered_set] map [unordered_map] multimap [uno ...
- 数据结构设计 Stack Queue
之前在简书上初步总结过几个有关栈和队列的数据结构设计的题目.http://www.jianshu.com/p/d43f93661631 1.线性数据结构 Array Stack Queue Hash ...
- programming review (c++): (1)vector, linked list, stack, queue, map, string, bit manipulation
编程题常用知识点的review. most important: 想好(1)详尽步骤(2)边界特例,再开始写代码. I.vector #include <iostream> //0.头文件 ...
- js in depth: event loop & micro-task, macro-task & stack, queue, heap & thread, process
js in depth: event loop & micro-task, macro-task & stack, queue, heap & thread, process ...
- Java集合类学习-LinkedList, ArrayList, Stack, Queue, Vector
Collection List 在Collection的基础上引入了有序的概念,位置精确:允许相同元素.在列表上迭代通常优于索引遍历.特殊的ListIterator迭代器允许元素插入.替换,双向访问, ...
- 第11天 Stack Queue
1.Stack package algs4; import java.util.Iterator; import java.util.NoSuchElementException; public cl ...
- 特殊集合 Stack Queue Hashtable
//Stack 干草堆集合 栈集合 先进后出 Stack st = new Stack(); //实例化 初始化 st.Push(2); //添加元素 st.Push(6); s ...
- java三篇博客转载 详解-vector,stack,queue,deque
博客一:转载自http://shmilyaw-hotmail-com.iteye.com/blog/1825171 java stack的详细实现分析 简介 我们最常用的数据结构之一大概就是stack ...
随机推荐
- vueJs的简单入门以及基础语法
1-1基本数据绑定 <div id="app"> {{ msg }} </div> //script new Vue({ el:"#app&quo ...
- Winform自定义表单(转)
出处:http://www.newlifex.com/showtopic-167.aspx 好吧,附件真的损坏了,原始代码我也没有了,再提取我也没精力了,不好意思,哪位之前下过可以重发一遍吗?不过即使 ...
- Maven进行install的时候报错,COMPILATION ERROR : Failed to execute goal org.apache.maven.plugins:maven-surefire-plugin:2.13:test (default-test) on project cmu: There are test failures.
maven进行install的时候,test类里面报错: COMPILATION ERROR : [INFO] -------------------------------------------- ...
- vue中文章的折叠于显示全部
在以一篇文章中,可能文章特别长,但是在页面第一次显示的时候可能就只需要显示一部分,这种情况下就需要自己进行修改 基本思路 利用类名就是预先定义一个类名,设置高度,和overflow:hidden,前提 ...
- 写了十年JS却不知道模块化为何物?
作者:肖光宇 野狗科技联合创始人,先后在猫扑.百度.搜狗任职,爱折腾的前端工程师. 野狗官博:https://blog.wilddog.com/ 野狗官网:https://www.wilddog.co ...
- maven使用中遇到的问题
一>手动将jar包安装到仓库的命令示例: 首先:编写命令:mvn install:install-file -Dfile=D:\lucene-highlighter-4.10.2.jar -Dg ...
- VIP之Scaler
VIP Scaller II 从以前的时序来看 当把2160p分辨率经过Scaller之后,变换为1080p输出的数据再经过CVO处理之后,输出的帧结构不正常,有效数据组成一个行,无效数据也是 ...
- Nios II——定制自己的IP1之Nios接口类型
信号自动识别的接口前缀 接口前缀 接口类型 asi Avalon-ST宿端口(输入) aso Avalon-ST源端口(输出) avm Avalon-MM主端口 avs Avalon-MM从端口 ax ...
- sas和ssd盘写入数据效率对比
表结构如下: CREATE TABLE `tab_AAA` ( `id` bigint(20) NOT NULL AUTO_INCREMENT , `customer_no` varchar(32 ...
- SecureCRTv7.3 和 navicat110_mysql
激活步骤: 一.首次使用: 1.保持SecureCRT未打开. 2.打开注册机keygen.exe文件(Windows vista ,7,8需要以管理员身份运行),点击[Patch]按钮,会让你选择文 ...