C++学习笔记49:栈
栈是一种只能从一端访问的线性数据结构,栈是一种后进先出的数据结构
//stack.h
#ifndef STACK_H
#define STACK_H
#include <cassert>
template <class T, int SIZE = > class Stack
{
private:
T list[SIZE];
int top;
public:
Stack();
void push(const T &item);
T pop();
void clear();
const T &peek() const;
bool isEmpty() const;
bool isFull() const;
}; //模板的实现
template <class T, int SIZE>
Stack<T, SIZE>::Stack():top(-){} template <class T, int SIZE> void Stack<T, SIZE>::push(const T &item)
{
assert(!isFull());
list[++top] = item;
} template <class T, int SIZE> T Stack<T, SIZE>::pop() const
{
assert(!isEmpty());
return list[top--];
} template <class T, int SIZE> const T &Stack<T, SIZE>::peek() const
{
assert(!isEmpty());
return list[top];
} template <class T, int SIZE> bool Stack<T, SIZE>::isEmpty() const
{
return top == -;
} template <class T, int SIZE> bool Stack<T, SIZE>::isFull() const
{
return top == SIZE - ;
} template <class T, int SIZE> void Stack<T, SIZE>::clear()
{
top = -;
} #endif //
栈的引用:判断是否存在不匹配的()
#include <iostream>
#include <string>
#include <cassert>
using namespace std; template <class T, int MAX = > class Stack
{
private:
T list[MAX + ];
int top;
public:
Stack();
void push(const T &item);
T pop();
const T & peek() const;
bool isEmpty() const;
}; template <class T, int MAX> Stack<T, MAX>::Stack() :top(-)
{ } template <class T, int MAX> void Stack<T, MAX>::push(const T &item)
{
if (top != MAX - )
{
list[++top] = item;
}
} template <class T, int MAX> bool Stack<T, MAX>::isEmpty() const
{
return top == -;
} template <class T, int MAX> T Stack<T, MAX>::pop()
{
assert(!isEmpty());
return list[top--];
} template <class T, int MAX> const T &Stack<T, MAX>::peek() const
{
assert(!isEmpty());
return list[top];
} void judgeBrackets(string str)
{
Stack<char>p;
int k = ;
int count = ;
while (str[k] != '\0')
{
if (str[k] == '(')
{
p.push(str[k]);
count++;
}
if (str[k] == ')')
{
if (count == )
{
cout << "NO" << endl;
count--;
break;
}
else
{
p.pop();
count--;
}
}
k++;
}
if (count == )
cout << "Yes" << endl;
if (count > )
cout << "NO" << endl;
} int main()
{
string str;
while (cin >> str)
{
judgeBrackets(str);
}
}
C++学习笔记49:栈的更多相关文章
- [原创]java WEB学习笔记49:文件上传基础,基于表单的文件上传,使用fileuoload 组件
本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当 ...
- 【Linux学习笔记】栈与函数调用惯例
栈与函数调用惯例(又称调用约定)— 基础篇 记得一年半前参加百度的校招面试时,被问到函数调用惯例的问题.当时只是懂个大概,比如常见函数调用约定类型及对应的参数入栈顺序等.最近看书过程中,重新回顾了这些 ...
- IDA Pro 权威指南学习笔记(十) - 栈帧
栈帧(stack frame)是在程序的运行时栈中分配的内存块,用于特定的函数调用 如果一个函数没有执行则不需要内存,当函数被调用时就需要用到内存 1.传给函数的参数的值需要存储到函数能够找到它们的位 ...
- STL学习笔记6 -- 栈stack 、队列queue 和优先级priority_queue 三者比较
栈stack .队列queue 和优先级priority_queue 三者比较 默认下stack 和queue 基于deque 容器实现,priority_queue 则基于vector 容器实现 ...
- jvm学习笔记:栈帧
栈帧内的数据结构 局部变量表(Local Variables):记录非静态方法的this指针.方法参数.局部变量 操作数栈(Operand Stack):用于计算的栈结构 动态链接(Dynamic L ...
- android学习笔记49——SQLite2
使用SQLite工具 位于Android SDK/tools-->sqlite3.exe,其是一个简单的SQLite数据库管理工具,类似于MySQL提供的命令行窗口. ..... 使用特定方法操 ...
- Java学习笔记49(DBUtils工具类二)
上一篇文章是我们自己模拟的DBUtils工具类,其实有开发好的工具类 这里使用commons-dbutils-1.6.jar 事务的简单介绍: 在数据库中应用事务处理案例:转账案例 张三和李四都有有自 ...
- 学习笔记49—matlab FDR校正
matlab自带函数mafdr,当ttest数较多时,可直接用[FDR, Q]=mafdr(P):但是Storey procedure在p值少于1000个时会崩溃,此时应改用BH FDR方法:mafd ...
- Android(java)学习笔记49:通过反射获取私有构造方法并且使用
1. 反射获取私有构造方法并且使用: (1)获取字节码文件.class对象: Class c = Class.forName("cn.itcast_01.Person&qu ...
随机推荐
- Hadoop集群最迅速的配置免密码登陆方法
1:多台机器互相免密登陆的思路(默认你的linux操作系统已经安装好ssh): 第一步:在各自的机器上面生成密钥: 在第1台机器上生产一对钥匙: ssh-keygen -t rsa 在第2台机器上生产 ...
- webpack项目打包配置
webpack.config.js 文件中,其中“plugins”最为重要 var path = require("path"); const webpack = require( ...
- How to trigger an Animation when TextBlock’s Text is changed during a DataBinding
原文:http://michaelscherf.wordpress.com/2009/02/23/how-to-trigger-an-animation-when-textblocks-text-is ...
- 部署Asp.net core & Nginx,通过nginx转发
部署Asp.net core & Nginx,通过nginx转发 CentOS 7 x64 1.vs2017 建立Asp.net core项目,并发布到目录 2.通过FTP工具,将程序copy ...
- window与linux文件共享解决方案
我的系统是windows7 x64,虚拟机上的linux系统是centos6.5 方法一: 1.在win7系统上建立一个用户 2.在f盘建立一个文件夹linuxshare,然后右击-属性-共享-高级共 ...
- nginx-fastcgi 反向代理
Nginx处理php页面 用fpm-server 基于fastcgi模块实现 Ngx_http_proxy_module 只能反代后端http server的主机 Ngx_fastcgi_prox ...
- excel怎么样批量将unix时间戳转化为北京时间
https://jingyan.baidu.com/article/63acb44afb1e2561fcc17e3f.html 1.单元格属性改变日期 2.使用公式: =(A2+8*3600)/864 ...
- Ubuntu Navicat 安装破解+解决乱码+其他问题
一 下载安装 Navicat Premium: https://www.navicat.com.cn/download/navicat-premium Navicat products: https: ...
- Maya cmds filterExpand 列出 选择的 uvs vertices faces edges 等 component 类型
Maya cmds filterExpand 列出 选择的 uvs vertices faces edges 等 component 类型 cmds.ls() 的 flags 中没有指明 uvs 等这 ...
- 使用 linux 的 epoll 的套接字
1. 代码: import socket import selectors #IO多路复用的选择模块 epoll_selector = selectors.EpollSelector() 实例化一个和 ...