160508 栈和队列
来源:互联网 发布:2008年雪灾知乎 编辑:程序博客网 时间:2024/06/06 11:04
栈和队列
基本操作
栈
#include <iostream> #include <stack> using namespace std; int main() { stack <int> s;//定义栈 s.push(5);//压栈 s.push(6); s.push(7); s.pop(); //出栈 printf(“栈顶元素:%d\n”,s.top()); return 0; }
队列
头文件:
#include <queue>using namespace std;
声明方法:
1、普通声明
queue<int>q;
2、结构体
struct node{ int x, y; }; queue<node>q;
Stl队列的基本操作:
q.push(x) 将x压入队列的末端
q.pop() 弹出队列的第一个元素(队顶元素),注意此函数并不返回任何值
q.front() 返回第一个元素(队顶元素)
q.back() 返回最后被压入的元素(队尾元素)
q.empty() 当队列为空时,返回true
q.size() 返回队列的长度
题目
codevs2058 括号序列
定义满足以下规则字符串为规则序列,否则不是规则序列:
1.空序列是规则序列;
2.如果S是规则序列,那么(S),[S],{S}和< s>也是规则序列;
3.如果A和B都是规则序列,那么AB也是规则序列。
例如,下面的字符串都是规则序列:
(),[],(()),([]),()[],()[()],{{}}<>,([]<>{{}}),<<{}>>
而以下几个则不是:
(,[,],)(,()),([(),<<,{(}),<{}>)
现在,给你一些由”(“、”)”、”[“、”]”、”{“、”}”、”<”、”>”构成的字符串,请判断该字符串是否为规则序列。
输入描述 Input Description
第一行:一个正整数N,表示测试数据组数;
接下来N行:每行一个括号序列(长度不超过L)。
输出描述 Output Description
共N行:对于每一个括号序列,判断其是否规则。
规则输出TRUE,否则输出FALSE。
样例输入 Sample Input
2
{()}<<>>
{{{{{}}}}
样例输出 Sample Output
TRUE
FALSE
数据范围及提示 Data Size & Hint
对于40%数据,有N=1,0
题目分析:
如果遇到左括号,入栈,如果遇到右括号,与栈顶元素比较,如果配对,栈顶元素出栈,否则失配,输出flase;
判断完成后,如果栈空正确,否则false;
代码
#include<iostream>#include<stack>#include<cstring>#include<cstdio>using namespace std;char str[2000001];int main(){ int n; cin>>n; for(int i=1;i<=n;i++){ stack<char>s;//定义为局部变量,每次执行函数重新定义,避免了清空 bool flag=1; scanf("%s",str);//cin>>str; int l; l=strlen(str);//l=str.length(); for(int j=0;j<l;j++){ switch(str[j]){ case ')':if(!s.empty()&&s.top()=='(') s.pop();else flag=0;break;//注意先判断栈是否为空再取栈顶(弹栈)!!! case '>':if(!s.empty()&&s.top()=='<') s.pop();else flag=0;break; case '}':if(!s.empty()&&s.top()=='{') s.pop();else flag=0;break; case ']':if(!s.empty()&&s.top()=='[') s.pop();else flag=0;break; default :s.push(str[j]);break; } } if(flag&&s.empty())cout<<"TRUE"<<endl;else cout<<"FALSE"<<endl;////s.empty条件 注意输出格式大小写!!! }return 0; }
poj3629 Card Stacking
题目描述
贝斯和奶牛们共n个队员玩k张牌,分牌时候,每轮先分给奶牛,再分给贝斯,每次将最前面的一张牌分给队员,再将这张牌后的p张牌按顺序放在最后。要求给出分完所有牌后贝斯的牌(按照从小到大排好序)。
输入
1行,n,k,p
输出
贝斯的牌(用回车分隔)
样例输入
3 9 2
样例输出
3
7
8
题目分析:
队列模拟
代码
#include<iostream>#include<queue>#include<algorithm>using namespace std;int q[100005],head=0,tail=0;int main(){ int n,m,p; cin>>n>>m>>p; for(int i=1;i<=m;i++){ q[tail]=i;tail++; } int f=0; int bs[m/n+1],l=0; while(head!=tail){ f++;f%=n; if(!f)bs[++l]=q[head]; head++;head%=100003; for(int i=1;i<=p;i++){ q[tail]=q[head];tail++;tail%=100003;head++;head%=100003; } } sort(bs,bs+l); for(int i=1;i<=l;i++)cout<<bs[i]<<endl;}
- 160508 栈和队列
- 栈和队列--队列
- 【栈和队列】队列
- 栈、队列和优先队列
- 栈和队列(队列)
- 栈和队列--栈
- 【栈和队列】栈
- 栈和队列
- 栈和队列
- 表、栈和队列
- 栈和队列
- 栈和队列应用
- 栈和队列
- 栈和队列
- 栈和队列
- 栈和队列
- 栈和队列
- 队列和栈
- sigsuspend()函数 解释
- Android酷炫的加载动画
- C# 编程遇到An object reference is required for the non-static field, method, or property错误
- Hadoop完全分布式+HA配置
- fiddlercore学习(1)
- 160508 栈和队列
- Spark简介-1
- HDU5671Matrix
- Hadoop —— HDFS
- 归并算法的非递归实现
- 进程间通信(IPC):管道
- c++操作符new 与delete学习(1)
- 西四的过客 -- 回想起一段讨论
- web移动端页面适配