提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
引言
本节我们一起来学习c++数据结构中的栈(stack),下面是我的学习笔记,供大家参考,如果觉得总结的不错的话,可以收藏起来方便今后复习。
本章概括
章节 | 内容 |
---|---|
1.1 | 容器 vector |
1.2 | 栈 stack |
1.3 | 队列 queue |
1.4 | 链表 list |
1.5 | set |
1.6 | map |
1.2.1 stack
1.介绍
- 栈是基本的数据结构之一,特点是“先进后出”。例如乘坐电梯时,先进电梯的最后出来;一盒泡腾片,最先放进盒子的药片位于最底层,最后被拿出来。
还可以定义多维数组:
vector< int > a[MAXN];
2.常见操作
功能 | 例子 | 说明 |
---|---|---|
定义 | stack< int > q | 定义一个类型为int的q的栈 |
元素个数 | int size = q.size(); | 元素个数 |
是否为空 | bool isEmpty = q.empty(); | 判断是否为空 |
顶部插入 | q.push(i); | 在顶部插入i |
删除顶部 | a.pop(); | 删除顶部元素 |
顶部元素 | q.top(); | 顶部元素 |
4.代码讲解
#include<iostream>
#include<stack>
using namespace std;
int main(){
stack<int>q;
for(int i = 0;i < 7;i++)
{
q.push(i);//将0到6压进去
}
cout<<q.top()<<endl;//将栈顶输出
cout<<q.size()<<endl;//输出栈元素的个数
//7
while(!q.empty())//当栈不为空的时候执行,直到全部为空
{
q.pop();//将栈顶弹出
}
cout<<q.empty()<<endl;//栈为空则为1,栈不为空则为0
//1
return 0;
}
1.2.2例题
-
problem:
伊格那丢喜欢倒过来写。给定伊格那丢写的一行文字,你应该颠倒所有的单词,然后输出它们。 -
input
输入包含几个测试用例。输入的第一行是一个整数T,也就是测试用例的数量。下面是T个测试用例。
每个测试用例都包含一个包含几个单词的行。一行最多有1000个字符。3
olleh !dlrow
m’I morf .udh
I ekil .mca -
output
对于每个测试用例,您应该输出所处理的文本。hello world!
I’m from hdu.
I like acm.
#include<bits/stdc++.h>
using namespace std;
int main(){
int n;
char ch;
cin>>n;
getchar();
while(n--)
{
stack<char>a;
while(1)
{
ch = getchar();//一次读一个字符
if(ch == ' '||ch == '\n'||ch == EOF)
{
while(!a.empty())
{
putchar(a.top());//输出栈顶
a.pop();//清除栈顶
}
if(ch == '\n'||ch == EOF)break;
cout<<" ";
}
else a.push(ch);//入栈
}
cout<<endl;
}
return 0;
}
下一节我们将对栈queue进行详解,请大家持续关注