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 ...
随机推荐
- python——mysql京东数据库设计案例(源码)
# 显示界面信息# 循环界面信息# 根据用户输入数据来做相应的选择from pymysql import connect def jingdong_info(): '''#显示界面信息''' prin ...
- Javascript面向对象编程:非构造函数的继承
今天是最后一个部分,介绍不使用构造函数实现"继承". 一.什么是"非构造函数"的继承? 比如,现在有一个对象,叫做"中国人". var Ch ...
- C#学习-类和结构
类和结构体,对两者进行比较 语法上的区别在于,定义类要使用关键字class,而定义结构体则使用关键字struct; 结构体中不可对声明字段进行初始化,但类可以: 如果没有为类显式地定义构造函数,C#编 ...
- XML与HTML的主要差异
1. 参考 XML 简介 2. XML 与 HTML 的主要差异 XML 不是 HTML 的替代. XML 和 HTML 为不同的目的而设计: XML 被设计为传输和存储数据,其焦点是数据的内容. H ...
- C# 之设计原则
代码也需要有秩序,就像世界需要秩序,基于SOLID architecture principles. 一.SOLID原则 S.O.L.I.D.是一组面对面向对象设计的最佳实践的设计原则.术语来自Rob ...
- python基础——高级特性
1.切片 切片: >>> L = ['Michael', 'Sarah', 'Tracy', 'Bob', 'Jack'] >>> L[:3] ['Michael ...
- Python_生成器generator
生成器:调用时返回一个迭代器 如果一个函数中包含yield语法,那这个函数就会变成一个生成器 例1: def draw_money(draw): #这个函数称为生成器 while draw >0 ...
- jav实验二
实验内容 1.初步掌握单元测试和TDD 2.理解并掌握面向对象三要素:封装.继承.多态 3.初步掌握UML建模 4.熟悉S.O.L.I.D原则 5.了解设计模式 实验内容 1.参考Intellj ID ...
- 查看windows电脑CPU核心数,线程数
在Windows中,在cmd命令中输入“wmic”,然后在出现的新窗口中输入“cpu get *”即可查看物理CPU数.CPU核心数.线程数.其中, Name:表示物理CPU数 NumberOfC ...
- Ubuntu18.04上安装Docker-Compose
1.进入https://github.com/docker/compose/releases 查看最新版本,当前版本为1.23.1 sudo curl -L https://github.com/do ...