栈是一种线性结构,相比与数组,栈对应的操作时数组的子集,只能从一端添加元素,也只能从一端取出元素,是一种 后进先出(Last In First Ou,LIFO) 的数据结构。

push

pop

代码底层是动态数组,先阅读这篇文章更佳 Array.h 点它

栈应用之括号匹配

include"ArrayStack.h"
using namespace std; int isValid(string s)
{
ArrayStack<char>* stack = new ArrayStack<char>();
for (int i = 0; i < s.size(); ++i) {
char c = s.at(i);
if (c == '(' || c == '[' || c == '{') {
stack->push(c);
}
else {
if (stack->isEmpty()) {
return false;
}
char topChar = stack->pop();
if (c == ')' && topChar != '(') {
return false;
}
if (c == ']' && topChar != '[') {
return false;
}
if (c == '}' && topChar != '{') {
return false;
}
}
}
return stack->isEmpty();
} int main()
{
string str = "(){}[]";
cout << isValid(str) << endl;
return 0;
}

代码清单之ArrayStack.h

#pragma once
#include"Array.h"
template<typename T> class ArrayStack
{
public:
ArrayStack()
{
arr = new Array<T>();
}
ArrayStack(const int capacity)
{
arr = new Array<T>(capacity);
}
//返回栈的大小
int getSize()const;
//判断栈是否为空
bool isEmpty()const;
//返回栈的容量
int getCapacity()const;
//入栈
void push(T& t)const;
//出栈
T pop()const;
//返回栈顶
T peek()const;
void print()const;
~ArrayStack()
{
delete arr;
arr = nullptr;
}
private:
Array<T>* arr;
}; template<typename T>
inline int ArrayStack<T>::getSize()const
{
return arr->getSize(); //调用返回数组大小,也就是栈的大小
} template<typename T>
inline bool ArrayStack<T>::isEmpty()const
{
return arr->isEmpty(); //调用判断数组是否为空,也就是栈是否为空
} template<typename T>
inline int ArrayStack<T>::getCapacity() const
{
return arr->getCapacity(); //调用返回数组的容量
} template<typename T>
inline void ArrayStack<T>::push(T& t) const
{
arr->addLast(t); //调用从数组尾部添加一个元素
} template<typename T>
inline T ArrayStack<T>::pop()const
{
return arr->removeLast(); //调用删除数组的最后一个元素
} template<typename T>
inline T ArrayStack<T>::peek()const
{
return arr->getLast(); //调用返回数组最后一个元素也就是栈顶
} template<typename T>
inline void ArrayStack<T>::print() const
{
std::cout << "ArrayStack: size = " << arr->getSize() << ", capacity = " << arr->getCapacity() << std::endl;
std::cout << "bottom ";
arr->print();
std::cout << " top" << std::endl;
}

数组栈(ArrayStack)的更多相关文章

  1. java——数组栈 ArrayStack

    栈的应用: undo操作-编辑器 系统调用栈-操作系统 括号匹配-编译器 以下是动态数组实现的数组栈: 定义动态数组: package Date_pacage; public class Array& ...

  2. ArrStack——数组栈(procedure)

    //数组栈,对于无法预料栈的长度情况下,可能会因为原分配数组不够长而导致数据溢出,或因为数组太长而浪费空间.但是操作快,不需要额外的操作.而链表与此想法,可以动态分配内存,但是要增加额外的操作. #i ...

  3. Python与数据结构[1] -> 栈/Stack[0] -> 链表栈与数组栈的 Python 实现

    栈 / Stack 目录 链表栈 数组栈 栈是一种基本的线性数据结构(先入后出FILO),在 C 语言中有链表和数组两种实现方式,下面用 Python 对这两种栈进行实现. 1 链表栈 链表栈是以单链 ...

  4. Java手写数组栈

    public class ArrayStack{ private String[] items; //数组 private int count; //栈内元素 private int n; //栈大小 ...

  5. 12.java链表栈和数组栈

    栈是一个先入后出的有序列表,栈是限制线性表中元素的插入和删除只能在线性表的同一端进行的一种特殊线性表,一端为变化的一端,称为栈顶,另一端是固定的,称为栈底.先入的元素在栈底,最后放入的元素在栈顶,删除 ...

  6. java:数据结构复习(二)数组栈

    import java.util.Arrays;import java.util.Scanner; /** * @author 李正阳 */public class MyArraysStack< ...

  7. c++如何解决大数组栈内存不够的问题

    在c++中,我们可以直接通过下面的方式创建一个数组: ; ; ; double phi[N][Nx][Ny]; double phi_b[N][Nx][Ny]; 但是,如果上述的Nx和Ny比较小还好说 ...

  8. [js]数组栈和队列操作

    写在前面 在项目中,对数组的操作还是比较常见的,有时候,我们需要模拟栈和队列的特性才能实现需求,这里记录一下这个知识点. 栈 栈(stack)又名堆栈,它是一种运算受限的线性表.其限制是仅允许在表的一 ...

  9. 数组栈的C语言实现

    #ifndef _CONST_H_#define _CONST_H_ #include <stdio.h>#include <stdlib.h> typedef enum { ...

  10. 数据结构和算法(Golang实现)(14)常见数据结构-栈和队列

    栈和队列 一.栈 Stack 和队列 Queue 我们日常生活中,都需要将物品排列,或者安排事情的先后顺序.更通俗地讲,我们买东西时,人太多的情况下,我们要排队,排队也有先后顺序,有些人早了点来,排完 ...

随机推荐

  1. Spring源码之容器的功能拓展-ApplicationContext

    目录 一.解析预备 刷新上下文环境 例如对系统属性或者环境变量进行校验和准备 二.初始化 BeanFactory 并进行 Xml 配置文件的读取 三.对BeanFactory 各种功能填充 四.激活以 ...

  2. Docker实践之07-数据管理

    目录 一.数据卷概述 二.创建数据卷 三.查看数据卷 四.挂载数据卷 五.删除数据卷 六.挂载主机目录或文件 七.挂载数据卷与主机目录/文件的比较 一.数据卷概述 数据卷是一个可供一个或多个容器使用的 ...

  3. Hdf5开发笔记(一):hdf5介绍,在windows上编译msvc2015x64版本

    前言   matlab的matio库需要使用到hdf5,编译hdf5的msvc2015x64版本. HDF5介绍   HDF(Hierarchical Data Format)是一种设计用于存储和组织 ...

  4. 面向对象之封装,类的相关操作,私有成员删除,构造方法__init__---day20

    1.面向对象之封装 # ### 面向对象oop -封装 """ 类中封装: 成员属性 成员方法 封装等级: 1.公有:公有成员既能够在类外调用,也可在类内调用 2.私有: ...

  5. 【LeetCode动态规划#17】知道秘密的人,维护多个dp数组

    知道秘密的人数 在第 1 天,有一个人发现了一个秘密. 给你一个整数 delay ,表示每个人会在发现秘密后的 delay 天之后,每天 给一个新的人 分享 秘密.同时给你一个整数 forget ,表 ...

  6. 【ACM专项练习#02】输入整行字符串、输入值到vector、取输入整数的每一位

    输入整行字符串 平均绩点 题目描述 每门课的成绩分为A.B.C.D.F五个等级,为了计算平均绩点,规定A.B.C.D.F分别代表4分.3分.2分.1分.0分. 输入 有多组测试样例.每组输入数据占一行 ...

  7. 第130篇:BOM(window对象)

    好家伙,本篇为<JS高级程序设计>第十二章"BOM"学习笔记   什么是BOM? BOM(Browser Object Model) 是指浏览器对象模型,是用于描述这种 ...

  8. Redis动态配制,限内存,免重启

    p.p1 { margin: 0; font: 14px Menlo; color: rgba(0, 255, 255, 1); background-color: rgba(0, 0, 0, 0.8 ...

  9. 【Azure Storage Blob】如何通过.NET Azure Storage Blobs SDK获取到Blob的MD5值呢?

    问题描述 通过.NET Azure Storage Blobs SDK , 获取Blob的MD5值,查看了Azure操作手册中,介绍可以使用 blob.Properties.ContentMD5 属性 ...

  10. 【Azure 应用服务】App Service For Linux 环境中,如何修改 Nginx 配置中 server_name的默认值 example.com

    问题描述 在App Service for Linux环境中,部署PHP应用,使用Nginx服务器.因为PHP应用中所有静态资源的URL使用的默认域名为 https://example.com:808 ...