寒假集训一期(4)

您所在的位置:网站首页 栈中元素倒置 寒假集训一期(4)

寒假集训一期(4)

2023-08-29 09:10| 来源: 网络整理| 查看: 265

文章目录 一、 vector 动态数组常见操作如何定义二维vector结构体二维vector 一、栈和队列CSP-J第一轮常考题做题方法总结——模拟 二、栈的基本操作函数三、队列的基本操作函数双端队列优先队列四、题目数组逆序重存放分析: 【模板】栈分析注意 【模板】队列分析 一点话

一、 vector 动态数组

简单来说,vector是一个没有长度限制的数组,也叫不定长数组。

常见操作 函数功能c.clear()移除容器中所有数据c.empty()判断容器是否为空c.erase(pos)删除pos位置的数据c.erase(begin,end)删除[begin,end]区间的数据c.front()传回第一个数据c.insert(pos,elem)在pos位置插入一个elem拷贝c.pop_back()删除最后一个数据c.push_back(elem)在尾部加入一个数据c.resize(num)重新设置该容器的大小c.size()返回容器中实际数据的个数c.begin()返回指向容器第一个元素的迭代器c.end()返回指向容器最后一个元素的迭代器 如何定义二维vector

有两种方法: 法一:

int n = 5, m = 6; vector obj(n);//定义类型为vector的vector for(int i = 0; i int x, y, z; }tmp; vectora;//这里的node就是结构体上的node

今天讲一下STL里面的栈和队列的基本操作,栈和队列都是一种数据结构,他们的共同点是都是线性结构,当然,他俩也有不同的地方,栈是一种先进后出的数据结构,而队列则是一种先进先出的数据结构。

一、栈和队列

可以这样来说,队列就像一个羽毛球盒,从一边放进去就从另一边拿出来,如果从放进去的那一边一边拿,就会造成羽毛损坏,如图 在这里插入图片描述

而栈则可以看成一个乒乓球盒,也就是说乒乓球盒只有一个口,越先放进去就会被压到最下面,从而就会越后出来,如图 在这里插入图片描述

CSP-J第一轮常考题

在这里插入图片描述 这道题虽然看起来有点难懂,但他确是一道栈的题目,也就是说,我们可以吧弹夹看做一个栈,子弹也就是元素,每将一个子弹放入弹夹,就相当于一个元素入栈,这道题目实际上就是在问下列哪一个出栈顺序是不合法的,我们遇到这样的题目可以画一个示意图: A:在这里插入图片描述 所以合法; B:在这里插入图片描述 所以合法。 C:在这里插入图片描述 D:在这里插入图片描述

做题方法总结——模拟

这道题可以让我们更深刻的理解栈的基本概念。遇到这种题目,我们可以利用栈的概念解决,首先先找准目前没有进过栈的第一个数,然后将目前未进栈元素到我们刚刚找的那个元素全部依次进栈,然后查看出栈顺序是否合法,依次模拟,即可得出结果。

二、栈的基本操作函数

push 元素入栈

push元素入栈pop栈顶元素出栈front获取栈底元素size获取栈长度empty栈判空 三、队列的基本操作函数 push元素入队列pop队尾元素出栈front获取队头元素size获取队列长度empty队列判空top获取队尾元素 双端队列

顾名思义,可以从两边进,两边出

操作解释push_back()在队尾压入元素push_front():在队头压入元素pop_back():删除最后一个元素pop_front():删除第一个元素front():返回第一个元素的引用back():返回最后一个元素的引用 优先队列

优先队列是队列的一种,他是自动帮我们排序的,内部结构是大根堆,常见操作与一般的队列一样,但是定义方式有所不同 如:prioriyt_queue q; 此外,我们经常为了适应题目背景,重载优先队列的排序顺序,一般是在结构体内实现的,大致如下

struct cmp{ bool operator ()(int a, int b){ return (a % 100) > (b % 100); } }; void main(){ priority_queueq; }

如果想要把结构体与优先队列结合起来,那么就需要重载小于符号,具体思想和上面差不多,格式如下:

struct node{ int x, y; bool operator int to, cost; }; struct cmp{ bool operator ()(node a, node b){ return a.cost > b.cost; } }; priority_queue priq; 四、题目 数组逆序重存放

题目描述

将一个数组中的值按逆序重新存放。例如,原来的顺序为 8 , 6 , 5 , 4 , 1 8,6,5,4,1 8,6,5,4,1。要求改为 1 , 4 , 5 , 6 , 8 1,4,5,6,8 1,4,5,6,8。

输入格式

输入为两行:第一行数组中元素的个数 n n n( 1 < n ≤ 100 1 \lt n \le 100 1 cin>>x; h.push(x); } for(i=0;i ios::sync_with_stdio(false); cin>>n; for(i=1;i for(z=1;z>c; if(c=="push"){ cin>>x; h.push(x); continue; } if(c=="pop"){ if(!h.size()){ cout cout ios::sync_with_stdio(false); cin>>n; for(i=1;i cin>>k; h.push(k); continue; } if(f=="2"){ if(h.size()==0){ cout if(h.size()==0){ cout



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3