hdu 1022 (栈)STL容器的应用
来源:互联网 发布:网络品牌策略研究论文 编辑:程序博客网 时间:2024/05/18 11:27
进入和输出的数组为order1,和order2,。当栈为空或者栈顶元素!=order2[i],则入栈,且队列进“in”。否则,即栈不为空且栈顶元素与order[i]相等,则出栈,队列进“out”。
不断进行上面2个判断,直至两个数组遍历完,或者在中途中达不到目标顺序,使程序停止。
结果为“NO”的结束条件是,当栈为空或者栈顶元素!=order2[i]时,数组order1已经遍历了即j==n时,表示出栈顺序不一致。
代码1:使用容器stack和queue
1 #include<iostream> 2 #include<stdio.h> 3 #include<string> 4 #include<string.h> 5 #include<algorithm> 6 #include<math.h> 7 #include<vector> 8 #include<stack> 9 #include<queue>10 using namespace std;11 int n;12 int i,j;13 char order1[12],order2[12];14 void cal()15 {16 stack<int>st;17 queue<string>q;18 for(i=0,j=0;i<n&&j<=n;)// j可以为n,作为判断结束的条件19 {20 if(st.empty()||st.top()!=order2[i])21 {22 if(j==n)23 {24 cout<<"No."<<endl<<"FINISH"<<endl;25 return ;26 }27 st.push(order1[j++]);28 q.push("in");29 }30 else31 {32 st.pop();33 q.push("out");34 i++;35 }36 }37 cout<<"Yes."<<endl;38 string ch;39 while(!q.empty())40 {41 ch=q.front(); //q.front返回的是对头元素的引用,是地址42 cout<<ch<<endl;//输出的是字符串ch,ch为字符串数组的首地址43 q.pop();44 45 }46 cout<<"FINISH"<<endl;47 }48 49 int main()50 {51 while(cin>>n)52 {53 cin>>order1>>order2;54 cal();55 56 }57 58 return 0 ;59 }
代码二:使用容器vector
区别在于输出“in”和“out”是用标记输出的,而没有用队列方便
1 #include<iostream> 2 #include<stdio.h> 3 #include<string> 4 #include<string.h> 5 #include<algorithm> 6 #include<math.h> 7 #include<vector> 8 #include<stack> 9 #include<queue>10 #define N 1211 #define IN 012 #define OUT 113 using namespace std;14 15 char o1[N],o2[N];16 int seq[N*2];17 int n;18 int idx;19 bool cal()20 {21 vector<char> V;22 int i,j;23 for(i=0,j=0;i<n&&j<=n;)24 {25 if(V.empty()||V.back()!=o2[i])26 {27 if(j==n)28 {29 return 0;30 }31 V.push_back(o1[j++]);32 seq[idx++]=IN;33 34 }35 else36 37 {38 V.pop_back();39 seq[idx++]=OUT;40 i++;41 }42 }43 return 1;44 45 }46 47 int main()48 {49 50 while(cin>>n)51 {52 idx=0;53 cin>>o1>>o2;54 if(cal())55 {56 cout<<"Yes."<<endl;57 for(int i=0;i<n*2;i++)58 {59 if(seq[i])60 cout<<"out"<<endl;61 else62 cout<<"in"<<endl;63 }64 65 }66 else67 {68 cout<<"No."<<endl;69 }70 cout<<"FINISH"<<endl;71 }72 return 0 ;73 }
一:
vector类常用函数如下:
1,构造函数 vector();
2,增加函数 push_back(x),向量尾部增加一个元素x。
3,删除函数 pop_back(),删除向量最后一个元素。clear(),删除所有元素。
4,遍历函数
reference back(),返回尾元素的引用。
reference front(),返回首元素的引用。
5,判断函数 bool empty(),向量是否为空。
6,大小函数 size()
7,其他 函数 swap(),交换两个同类型向量的数据。
二:
队列和堆栈
1,构造函数,queue(),stack();
2,队列和堆栈共有函数
bool empty(),
int size();
push(x); 将x压入队尾(栈顶);
pop(),当队列(栈)非空,删除队头(栈顶)元素。
3遍历函数
队列独有 为 front(),返回队头元素引用,back(),返回队尾元素引用。
堆栈独有为 top(),返回栈顶元素的引用。
应用总结:
vector<int > v;
vector<int> :: iterator it; 定义迭代器变量,主要应用于遍历。
it=v.begin() it=v.end() *it(迭代器上的元素值)
三
string
string s;
1:从string对象尾部添加字符 为 S+‘a’ 或
字符串 S+” adff “ 或 S.append(” asff “):
2:string s;
string :: iterator it;
给string 对象插入字符
it=s.begin();
s.insert(it +3, 'p'); // 将字符‘p’ 插入到第3个字符前 (注,字符位置是从0开始计数) 例如:S=addfds 插入后 S=addpfds
3;访问string元素:下标法
string对象的元素是一个字符(char);
4: 删除string对象的元素
清空 S=”“;
或删除第三个元素 it = S.begin(); S.erase(it+3);
或删除0-4区间的所以元素 S.erase(it,it+4);
5.S.length(); S.empty()
6 替换字符串
S.replace(3,4,"ffeeggg") 从第3位开始,将连续的4个字符替换成”ffeeggg“
7.搜索 元素或字符串
S.find(”fdsf“) ,查找字符串S中第一个字符元素(char) 或 第一个字串(用双引号界定), 如果查到,则返回下标值 ,如果查不到,返回4294967295
8 比较
S.compare(” adff“) S>adff 返回1 ,= 返回0 ,S<adff 返回-1;
9: string对象 可以作为vector 元素 vector<string> v;
10: reverse反向排序string对象
reverse(s.begin(),s.end());
11:
- hdu 1022 (栈)STL容器的应用
- hdu 1022——STL中栈的应用
- hdu 1022 Train Problem I(栈的应用+STL)
- stl之multiset容器的应用
- hdu 4858 项目管理(STL容器)
- HDU 4858项目管理(STL容器)
- STL容器-----HDU 水果
- STL 容器应用场景
- hdu-6015map容器的应用
- C++中STL容器的find的应用
- hdu 5131 STL的应用+在线查询
- HDU 1027 STL中next_permutation的应用
- stl之map容器的原理及应用
- 【day0412 C++】顺序容器 STL list类的应用
- STL容器(map)————HDU例题
- HDU-5748 Bellovin 【LIS(STL应用)】
- STL vetor(容器)的用法
- STL容器的约束
- hdu 2199 二分法求单调函数方程的解
- hdu1575 二分+矩阵求幂
- sort()排序
- hdu 2141 二分查找,三个数相加
- hdu 1969 二分+精度
- hdu 1022 (栈)STL容器的应用
- 新人报到
- hdu 1509 1873()病人要看病 优先队列(符号重载)
- hdu 1381 map(映射)
- hdu 1106 字符串处理
- 初识kmp hdu 1686
- kmp hdu 3336 下标从1开始
- hdu 3746 kmp求循环节 下标从1开始
- hdu 1358 kmp 求前缀有几个循环