stack 栈
其实今天我们主要讲的是搜索,但是留作业不知道怎么就突然全变成栈了。
其实栈和队列没什么区别,只是一个先进先出,一个先进后出。基本操作也是一样的。
栈(stack)又名堆栈,它是一种运算受限的线性表。其限制是仅允许在表的一端进行插入和删除运算。这一端被称为栈顶,相对地,把另一端称为栈底。
向一个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。
- size() 返回实际个数
- empty() 判断是否为空
- push(item) 压栈
- top() 返回栈顶元素
- pop() 将栈顶元素删除
- s1.swap(s2) 将两个栈元素交互
- s1 == s1 判断是否相等
手里有几个括号匹配的题,大家过目。
第一个,只有()小括号的简化版
#include<iostream>
#include<vector>
#include<stack>
#include<cstdio>
#include<cstring>
using namespace std;
char a[];
stack <char> st;
int ok = ;
int main()
{
gets(a);
int l;
l = strlen(a);
for(int i = ;i < l;i ++)
{
if(a[i] == '(' || a[i] == ')')
{
if(a[i] == '(')
st.push('(');
else
{
if(st.empty() == )
{
if(st.top() == '(')
st.pop();
else
{
ok = ;
break;
}
}
else
{
ok = ;
break;
}
} }
}
if(ok == && st.empty() == )
{
cout<<"YES"<<endl;
}
else
cout<<"NO"<<endl;
return ;
}
未完待续。。。
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cmath>
#include<cstring>
#include<string>
using namespace std;
int a[] = {},b[] = {};
char s[];
void gsy(int a[])
{
int i;//将括号转换为数字,以比较括号级别
for(i = ;i < strlen(s);i++)
{
if(s[i] == '{') a[i + ] = ;
if(s[i] == '[') a[i + ] = ;
if(s[i] == '(') a[i + ] = ;
if(s[i] == '<') a[i + ] = ;
if(s[i] == '>') a[i + ] = ;
if(s[i] == ')') a[i + ] = ;
if(s[i] == ']') a[i + ] = ;
if(s[i] == '}') a[i + ] = ;
}
}
int main()
{
int i,n,t = ,m,j,k;
cin>>n;
for(i = ;i <= strlen(s);i++)
{
scanf("%s",s);
gsy(a);
for(j = ;j <= strlen(s);j++)
{
if(a[j] <= ) //左括号
if(a[j] >= b[t])
b[++t] = a[j];
else break;
if(a[j] >= )
if(a[j] + b[t] == ) t--;
else t++;
}
if(t == )
cout<<"YES"<<endl;
else
cout<<"NO"<<endl;
}
return ;
}
stack 栈的更多相关文章
- java - Stack栈和Heap堆的区别
首先分清楚Stack,Heap的中文翻译:Stack—栈,Heap—堆. 在中文里,Stack可以翻译为“堆栈”,所以我直接查找了计算机术语里面堆和栈开头的词语: 堆存储 ...
- stack 栈的实现
今天晚上去「南哪」听了场AI的讲座,除了话筒真心不给力之外,算是对微软这方面的进展有了更多了解,毕竟是半宣传性质的活动吧. 光听这些是没用的,眼下还是打好基础,多尝试学点新技术,拓宽能力和视野比较重要 ...
- Heap(堆)和stack(栈)有的区别是什么。
java的内存分为两类,一类是栈内存,一类是堆内存.栈内存是指程序进入一个方法时,会为这个方法单独分配一块私属存储空间,用于存储这个方法内部的局部变量,当这个方法结束时,分配给这个方法的栈会释放,这个 ...
- C#部分---特殊集合:stack栈集合、queue队列集合、哈希表集合。
1.stack栈集合:又名 干草堆集合 栈集合 特点:(1)一个一个赋值 一个一个取值(2)先进后出实例化 初始化 Stack st = new Stack(); //添加元素用push st.Pus ...
- JAVA Stack栈和Heap堆的区别(转)
首先分清楚Stack,Heap的中文翻译:Stack—栈,Heap—堆. 在中文里,Stack可以翻译为“堆栈”,所以我直接查找了计算机术语里面堆和栈开头的词语: ...
- 容器vector的使用总结 容器stack(栈)
0.头文件:#include<vector>; using namespace std; 1.定义: vector<type> vec; 2.迭代器 vector<typ ...
- Stack栈的三种含义
理解stack栈对于理解程序的执行至关重要.easy混淆的是,这个词事实上有三种含义,适用于不同的场合,必须加以区分. 含义一:数据结构 stack的第一种含义是一组数据的存放方式,特点为LIFO,即 ...
- STL --> stack栈
stack栈 c++stack(堆栈)是一个容器的改编,它实现了一个先进后出的数据结构(FILO),使用该容器时需要包含#include<stack>头文件: 定义stack对象示例: s ...
- 逻辑运算符、三元运算符、for循环、stack(栈),heap(堆),方法区,静态域
Lesson One 2018-04-17 19:58:39 逻辑运算符(用于逻辑运算,左右两边都是 true 或 false) 逻辑与-& 和 短路与-&& 区别: & ...
- java.util.Stack(栈)的简单使用
import java.util.Stack; import org.junit.Before; import org.junit.Test; /** * Stack(栈)继承了Vector类,底层实 ...
随机推荐
- CSS——img
img标签初始化:在低版本的ie浏览器会自带边框,所以建议border:0px.
- [Windows Server 2003] ASP.net安装方法
★ 欢迎来到[护卫神·V课堂],网站地址:http://v.huweishen.com★ 护卫神·V课堂 是护卫神旗下专业提供服务器教学视频的网站,每周更新视频.★ 本节我们将带领大家:安装ASP.n ...
- windows 设置注册表服务自动启动
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\xxx\Start = ,=自动,,=禁用
- sql日期提取
--插入数据修改不行:必须提供学号 insert into Student(生日类型) values('阳历') --把月份提取出来 显示两位数 select DATENAME(month,getda ...
- 把excel、txt当数据库来查询
Sub excel连接数据库() Dim Con As New ADODB.Connection Dim strCon, strsql As String Dim rs As ADODB.Record ...
- AcRxClass::addX
AcRxClass::addX函数 virtual AcRxObject * addX( AcRxClass* pProtocolClass, AcRxObject* pProtocolObject) ...
- IOS内购--后台PHP认证
参考网址:https://blog.csdn.net/que_csdn/article/details/80861408 http://www.php.cn/php-weizijiaocheng-39 ...
- C 利用strtok, feof 截取字符串
#cat /tmp/fff 10:hugetlb:/hello/06b11c9967cc0e106f5f4673246f671aa7388f623f58b250d9d9cb0f8c0f2b18 9:d ...
- hdu 2084 数塔(简单dp)
题目 简单dp //简单的dp #include<stdio.h> #include<string.h> #include<algorithm> using nam ...
- recreate dbcontrol on database 11.2.0.1 using emca
[oracle@osb ~]$ env | grep ORA ORACLE_SID=ACE ORACLE_BASE=/oracle ORACLE_TERM=xterm ORACLE_HOME=/ora ...