数组栈(ArrayStack)
栈
栈是一种线性结构,相比与数组,栈对应的操作时数组的子集,只能从一端添加元素,也只能从一端取出元素,是一种 后进先出(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)的更多相关文章
- java——数组栈 ArrayStack
栈的应用: undo操作-编辑器 系统调用栈-操作系统 括号匹配-编译器 以下是动态数组实现的数组栈: 定义动态数组: package Date_pacage; public class Array& ...
- ArrStack——数组栈(procedure)
//数组栈,对于无法预料栈的长度情况下,可能会因为原分配数组不够长而导致数据溢出,或因为数组太长而浪费空间.但是操作快,不需要额外的操作.而链表与此想法,可以动态分配内存,但是要增加额外的操作. #i ...
- Python与数据结构[1] -> 栈/Stack[0] -> 链表栈与数组栈的 Python 实现
栈 / Stack 目录 链表栈 数组栈 栈是一种基本的线性数据结构(先入后出FILO),在 C 语言中有链表和数组两种实现方式,下面用 Python 对这两种栈进行实现. 1 链表栈 链表栈是以单链 ...
- Java手写数组栈
public class ArrayStack{ private String[] items; //数组 private int count; //栈内元素 private int n; //栈大小 ...
- 12.java链表栈和数组栈
栈是一个先入后出的有序列表,栈是限制线性表中元素的插入和删除只能在线性表的同一端进行的一种特殊线性表,一端为变化的一端,称为栈顶,另一端是固定的,称为栈底.先入的元素在栈底,最后放入的元素在栈顶,删除 ...
- java:数据结构复习(二)数组栈
import java.util.Arrays;import java.util.Scanner; /** * @author 李正阳 */public class MyArraysStack< ...
- c++如何解决大数组栈内存不够的问题
在c++中,我们可以直接通过下面的方式创建一个数组: ; ; ; double phi[N][Nx][Ny]; double phi_b[N][Nx][Ny]; 但是,如果上述的Nx和Ny比较小还好说 ...
- [js]数组栈和队列操作
写在前面 在项目中,对数组的操作还是比较常见的,有时候,我们需要模拟栈和队列的特性才能实现需求,这里记录一下这个知识点. 栈 栈(stack)又名堆栈,它是一种运算受限的线性表.其限制是仅允许在表的一 ...
- 数组栈的C语言实现
#ifndef _CONST_H_#define _CONST_H_ #include <stdio.h>#include <stdlib.h> typedef enum { ...
- 数据结构和算法(Golang实现)(14)常见数据结构-栈和队列
栈和队列 一.栈 Stack 和队列 Queue 我们日常生活中,都需要将物品排列,或者安排事情的先后顺序.更通俗地讲,我们买东西时,人太多的情况下,我们要排队,排队也有先后顺序,有些人早了点来,排完 ...
随机推荐
- Failed to bind properties under ” to com.zaxxer.hikari.HikariDataSource
1.问题说明 今天配置spring boot多数据源,同时用到了oracle和postgresql,结果配置完毕后启动报这个错. 2.原因分析 忘记添加postgresql驱动了!!! 3.解决方案 ...
- 从零开始写 Docker(一)---实现 mydocker run 命令
本文为从零开始写 Docker 系列第一篇,主要实现 mydocker run 命令,构造了一个具有基本的 Namespace 隔离的简单容器. 如果你对云原生技术充满好奇,想要深入了解更多相关的文章 ...
- lib,dll的位置
在添加第三方库的时候需要注意放置的路径,注意区分x86和x64的文件夹路径以及VS的版本,不要放错了 lib的位置:(需要先将lib放到该路径下,不然会说找不到.lib)C:\Program File ...
- 分层架构设计模式总结-MVC,洋葱架构,整洁架构,六边形架构,DDD等等
一.单层结构不分层 最开始开发项目时,由于需求较少,用一个单独的工程文件就可以满足开发的需求了,不需要进行划分. 二.MVC 分层和三层 到后面需求越来越多,于是就把文件进行分解,怎么分解?有人提出了 ...
- Java常用编程类库
Java语言已经有许多非常成熟的开源基础类库,封装了日常开发中的各种常用操作,如:对象判空,字符串编码,本地缓存等等. 可以直接在项目中引入对应类库使用即可,或者参与完善相应类库的方法. 现将常用的基 ...
- Linux驱动开发笔记(三):基于ubuntu的helloworld驱动源码编写、makefile编写以及驱动编译加载流程测试
前言 前面学习了驱动的基础框架,上一篇编译了gcc7.3.0,那么为了方便很好的熟悉流程,本篇,将使用ubuntu18.04,直接编译ubuntu18.04的驱动,然后做好本篇文章的相关实战测试. ...
- JVM-对象实例化
JVM-对象实例化 1.创建对象的方式 new:最常见的方式.Xxx的静态方法,XxxBuilder/XxxFactory的静态方法 Class的newInstance方法:反射的方式,只能调用空参的 ...
- nftables语法及例子
先上我自己实际测试通过的例子,用例子便于在实践中学习: # 0 --- 说明 ---下面例子中的单引号目的是为了避免nftable参数中的星号.花括号.分号等符号被shell展开解释掉了,导致nft命 ...
- STL-unordered_map,unordered_set模拟实现
unordered_set #pragma once #include"28hashtable_container.h" namespace test { //template & ...
- ChatGPT用10秒画完一张UML流程图,而我用了。。。
不用AI的程序员,失业潮真的快来临了. 一张订单履约的流程图,我花了10分钟才完成,而ChatGPT绘图过程只用了10秒钟,基本可以达到同样的水平,通过ChatGPT可以显著提高画流程图的效率. 订单 ...