用数组实现栈(C++)
#include <iostream>
//栈的数组实现
using namespace std;
#define MAXSIZE 10;
template<class T>
class Stack
{
public:
//默认构造函数
Stack();
Stack(size_t maxElements);
Stack(T data[], size_t maxElements);
~Stack();
//入栈
void Push(T data);
//出站并返回
T Pop();
//返回栈顶元素
T Top();
//判断是否为空栈
bool isEmpty();
//栈是否已满
bool isFull();
//清空栈
void Clear();
//获得栈元素个数
size_t GetSize();
private:
//栈标指示器
size_t top;
//数组
T *arrays;
//栈的容量
size_t maxSize;
};
template<class T>
Stack<T>::Stack() : maxSize(MAXSIZE), top(-1)
{
arrays = new T[maxSize];
if (arrays == NULL)
{
cout << "动态分配内存失败";
exit(1);
}
}
template<class T>
Stack<T>::Stack(size_t maxElements) : maxSize(maxElements), top(-1)
{
arrays = new T[maxSize];
if (arrays == NULL)
{
cout << "动态分配内存失败";
exit(1);
}
}
template<class T>
Stack<T>::Stack(T data[], size_t maxElements) : maxSize(maxElements), top(-1)
{
arrays = new T[maxSize];//创建存储栈的数组
if (arrays == NULL)
{
cout << "动态分配内存失败";
exit(1);
}
for (size_t i = 0; i < maxSize; i++)
{
arrays[i] = data[i];
}
top += maxSize;
}
template<class T>
Stack<T>::~Stack()
{
delete[] arrays;
}
template<class T>
void Stack<T>::Push(T data)
{
if (isFull())
{
throw runtime_error("Full stack");
}
else
{
top++;//指向栈顶
arrays[top] = data;
}
}
template<class T>
T Stack<T>::Pop()
{
if (isEmpty())
{
throw runtime_error("No elements in the stack");
}
else
{
T data = arrays[top];
top--;
return data;
}
}
template<class T>
T Stack<T>::Top()
{
if (isEmpty())
{
throw runtime_error("No elements in the stack");
}
else
{
return arrays[top];
}
}
template<class T>
bool Stack<T>::isEmpty()
{
return top == -1;
}
template<class T>
bool Stack<T>::isFull()
{
return top == maxSize - 1;
}
template<class T>
void Stack<T>::Clear()
{
while (Top != -1)
{
Top--;
}
}
template<class T>
size_t Stack<T>::GetSize()
{
return top + 1;
}
int main()
{
try//异常捕获
{
int a[6] = { 1, 2, 3, 4, 5, 6 };
Stack<int> s(a, 6);
s.Pop();
s.Push(7);
while (!s.isEmpty())
{
cout << s.Pop() << " ";
}
cout << endl;
}
catch (exception e)
{
cout << e.what() << endl;
}
system("pause");
return 0;
}
测试运行结果:

来源:c++ 栈的数组实现
用数组实现栈(C++)的更多相关文章
- JavaScript高级程序设计--对象,数组(栈方法,队列方法,重排序方法,迭代方法)
1.使用对象字面量定义对象 var person={}; 使用这种方式创建对象时,实际上不会调用Object构造函数. 开发人员更喜欢对象字面量的语法. 2.有时候需要传递大量可选参数的情形时,一 ...
- 【BZOJ-3238】差异 后缀数组 + 单调栈
3238: [Ahoi2013]差异 Time Limit: 20 Sec Memory Limit: 512 MBSubmit: 1561 Solved: 734[Submit][Status] ...
- 数组实现栈的结构(java)
自定义数组实现栈的结构. package test; public class MyArrayStackClient { public static void main(String[] args) ...
- poj 3415 Common Substrings(后缀数组+单调栈)
http://poj.org/problem?id=3415 Common Substrings Time Limit: 5000MS Memory Limit: 65536K Total Sub ...
- 用数组实现栈demo
package cn.aust.zyw.demo; import java.util.Iterator; /** * Created by zyw on 2016/2/19. * 用数组实现栈 */ ...
- Javascript用数组实现栈和队列
栈是遵循后进先出(LIFO)规则的一种有序集合,比如桌上的一叠书,我们只能从上面放或取. 队列是遵循先进先出(FIFO)规则的一种有序集合,比如排队,先排到的先离开. 数组也是一种有序的集合,它与上面 ...
- BZOJ_3879_SvT_后缀数组+单调栈
BZOJ_3879_SvT_后缀数组+单调栈 Description (我并不想告诉你题目名字是什么鬼) 有一个长度为n的仅包含小写字母的字符串S,下标范围为[1,n]. 现在有若干组询问,对于每一个 ...
- BZOJ_3238_[Ahoi2013]差异_后缀数组+单调栈
BZOJ_3238_[Ahoi2013]差异_后缀数组+单调栈 Description Input 一行,一个字符串S Output 一行,一个整数,表示所求值 Sample Input cacao ...
- BZOJ.4199.[NOI2015]品酒大会(后缀数组 单调栈)
BZOJ 洛谷 后缀自动机做法. 洛谷上SAM比SA慢...BZOJ SAM却能快近一倍... 显然只需要考虑极长的相同子串的贡献,然后求后缀和/后缀\(\max\)就可以了. 对于相同子串,我们能想 ...
- JavaScript中的内置对象-8--1.Array(数组)-Array构造函数; 数组的栈方法; 数组的转换方法; 数组的操作方法; 删除-插入-替换数组项; ECMAScript为数组实例添加的两个位置方法;
JavaScript内置对象-1Array(数组) 学习目标 1.掌握任何创建数组 2.掌握数值元素的读和写 3.掌握数组的length属性 如何创建数组 创建数组的基本方式有两种: 1.使用Arra ...
随机推荐
- java中abstract怎么使用
abstract(抽象)修饰符,可以修饰类和方法 1,abstract修饰类,会使这个类成为一个抽象类,这个类将不能生成对象实例,但可以做为对象变量声明的类型,也就是编译时类型,抽象类就像当于一类的半 ...
- 业内首发 | 区块链数据服务 - BDS
区块链数据服务(Blockchain Data Service,BDS)是京东云区块链产品部发推出的,其将区块链的链式.非结构化数据通过技术手段进行结构化存储,实时同步到高性能数据仓库中. 用户可以通 ...
- Jupyer Notebook, Jupyter Lab 虚拟环境配置
虚拟环境 conda create -n python36 python=3.6 使用以下命令激活: activate python36 Notebook 安装插件 conda install nb_ ...
- NGDC|BIGD
生命组学 生命起源经过复杂演化诞生了大量生物体及其基因组. 现今NCBI最大的基因组: 植物:糖松27.6G 动物:墨西哥蝾螈32.4G 大数据能做什么? 大数据时代如同大航海时代一样,需要具有与时代 ...
- Maven--导出pom中依赖的jar包
参考:https://my.oschina.net/cloudcoder/blog/212648 mvn dependency:copy-dependencies -DoutputDirectory= ...
- MySQL--数据插入
1.创建表的同时插入其他表的数据 CREATE TABLE table_name SELECT ... FROM ... [...] 例: CREATE TABLE tabl_memory EN ...
- BBS数据库设计
BBS数据库设计 一.BBS数据库设计 # models.py from django.db import models # Create your models here. from django. ...
- swoole使用异步redis
1.lnmp安装redis拓展 wget http://download.redis.io/releases/redis-4.0.9.tar.gz chmod 755 redis-4.0.9.tar. ...
- leetcode 17 电话号码的数字组合
给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合.给出数字到字母的映射如下(与电话按键相同).注意 1 不对应任何字母. class Solution { List<String ...
- mybatis使用Map<String,Object>映射mysql结果集,关于字段的问题
--mysql常用字段类型如图 --mybatis使用Map<String,Object>映射,会将tinyint映射成Integer类型.decimal映射成BigDecimal类型 所 ...