栈是一种线性结构,相比与数组,栈对应的操作时数组的子集,只能从一端添加元素,也只能从一端取出元素,是一种 后进先出(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. 列表相关函数,深浅拷贝,字典相关函数,集合相关操作及文件操作---day08

    1.列表的相关函数 append() 功能:向列表的末尾添加新的元素 格式:列表.append(值) 返回值:None 注意:新添加的值在列表的末尾,该函数直接操作原有列表 insert() 功能:在 ...

  2. django中model聚合使用

    from django.db.models.functions import Cast, Coalesce, Concat, ConcatPair, Greatest # Cast,类型转换 q1 = ...

  3. Kotlin 协程三 —— 数据流 Flow

    目录 一.Flow 的基本使用 1.1 Sequence 与 Flow 1.2 Flow 的简单使用 1.3 创建常规 Flow 的常用方式: 1.4 Flow 是冷流(惰性的) 1.5 Flow 的 ...

  4. [Azure Developer]把Azure Function中ILogger对象静态化为静态方法提供日志记录

    问题描述 在Azure Function代码中,有默认的ILogger对象来记录函数的日志,如果函数引用了一些静态对象,是否有办法使用这个默认的ILogger对象来记录日志呢? using Syste ...

  5. [Linux ] 编译 ffmpeg 使用 AV1 编码 svt_av1 编码器

    编译带 AV1 编码器的 ffmpeg 安装 aom git clone --depth 1 https://aomedia.googlesource.com/aom mk build cmake - ...

  6. Java 对属性赋值的位置 执行的先后顺序

    1 package com.bytezreo.block; 2 3 /** 4 * 5 * @Description 对属性赋值的位置: 6 * @author Bytezero·zhenglei! ...

  7. 用json画图的画图软件 推荐 Balsamiq

    看这个库的时候发现的的这个软件 https://github.com/ironman1987/chinese-developer-roadmap 下载:https://www.zdfans.com/h ...

  8. K8S容器环境下资源限制与jvm内存回收

    一.k8s中的java资源限制与可能的问题 与以前单机跑单服务的情况相比,在k8s.docker容器化环境下的宿主机内存.cpu相对更大,所以当运行java类程序的时候,就必然有必要对容器进行内存限制 ...

  9. 20_使用SDL显示BMP图片

    文本的主要内容是:使用SDL显示一张BMP图片,算是为后面的<显示YUV图片>做准备. 为什么是显示BMP图片?而不是显示JPG或PNG图片? 因为SDL内置了加载BMP的API,使用起来 ...

  10. ModuleNotFoundError: No module named xxx 的原因和解决办法(附带新大陆)

    PS:要转载请注明出处,本人版权所有. PS: 这个只是基于<我自己>的理解, 如果和你的原则及想法相冲突,请谅解,勿喷. 前置说明   本文作为本人csdn blog的主站的备份.(Bl ...