#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++)的更多相关文章

  1. JavaScript高级程序设计--对象,数组(栈方法,队列方法,重排序方法,迭代方法)

    1.使用对象字面量定义对象 var person={}; 使用这种方式创建对象时,实际上不会调用Object构造函数. 开发人员更喜欢对象字面量的语法.   2.有时候需要传递大量可选参数的情形时,一 ...

  2. 【BZOJ-3238】差异 后缀数组 + 单调栈

    3238: [Ahoi2013]差异 Time Limit: 20 Sec  Memory Limit: 512 MBSubmit: 1561  Solved: 734[Submit][Status] ...

  3. 数组实现栈的结构(java)

    自定义数组实现栈的结构. package test; public class MyArrayStackClient { public static void main(String[] args) ...

  4. poj 3415 Common Substrings(后缀数组+单调栈)

    http://poj.org/problem?id=3415 Common Substrings Time Limit: 5000MS   Memory Limit: 65536K Total Sub ...

  5. 用数组实现栈demo

    package cn.aust.zyw.demo; import java.util.Iterator; /** * Created by zyw on 2016/2/19. * 用数组实现栈 */ ...

  6. Javascript用数组实现栈和队列

    栈是遵循后进先出(LIFO)规则的一种有序集合,比如桌上的一叠书,我们只能从上面放或取. 队列是遵循先进先出(FIFO)规则的一种有序集合,比如排队,先排到的先离开. 数组也是一种有序的集合,它与上面 ...

  7. BZOJ_3879_SvT_后缀数组+单调栈

    BZOJ_3879_SvT_后缀数组+单调栈 Description (我并不想告诉你题目名字是什么鬼) 有一个长度为n的仅包含小写字母的字符串S,下标范围为[1,n]. 现在有若干组询问,对于每一个 ...

  8. BZOJ_3238_[Ahoi2013]差异_后缀数组+单调栈

    BZOJ_3238_[Ahoi2013]差异_后缀数组+单调栈 Description Input 一行,一个字符串S Output 一行,一个整数,表示所求值 Sample Input cacao ...

  9. BZOJ.4199.[NOI2015]品酒大会(后缀数组 单调栈)

    BZOJ 洛谷 后缀自动机做法. 洛谷上SAM比SA慢...BZOJ SAM却能快近一倍... 显然只需要考虑极长的相同子串的贡献,然后求后缀和/后缀\(\max\)就可以了. 对于相同子串,我们能想 ...

  10. JavaScript中的内置对象-8--1.Array(数组)-Array构造函数; 数组的栈方法; 数组的转换方法; 数组的操作方法; 删除-插入-替换数组项; ECMAScript为数组实例添加的两个位置方法;

    JavaScript内置对象-1Array(数组) 学习目标 1.掌握任何创建数组 2.掌握数值元素的读和写 3.掌握数组的length属性 如何创建数组 创建数组的基本方式有两种: 1.使用Arra ...

随机推荐

  1. JavaScript 闭包究竟是什么JavaScript 闭包究竟是什么

    用JavaScript一年多了,闭包总是让人二丈和尚摸不着头脑.陆陆续续接触了一些闭包的知识,也犯过几次因为不理解闭包导致的错误,一年多了资料也看了一些,但还是不是非常明白,最近偶然看了一下 jQue ...

  2. Thinkcmf子栏目获取父级栏目所有子栏目列表

    网站建设时经常需要输出某个栏目的子栏目,对应的在子栏目列表页也需要输出父级栏目的子栏目列表,thinkcmf可以输出所有子栏目,但却无法在子栏目列表页也适用, 因此就需要通过对数据库表查询来完成需求: ...

  3. 201312-2 ISBN号码 Java

    就是把-去掉,然后验证,只需要改最后一位. import java.util.Scanner; public class Main { public static void main(String[] ...

  4. Spring Boot 中集成 Shiro

    https://blog.csdn.net/taojin12/article/details/88343990

  5. E - Two Arithmetic Progressions(CodeForces - 710D)(拓展中国剩余定理)

    You are given two arithmetic progressions: a1k + b1 and a2l + b2. Find the number of integers x such ...

  6. 帝国CMS7.5后台美化模板 后台风格修改 帝国CMS后台模板

    都知道帝国CMS功能强悍,生成静态html也非常好用.可是有时候他的后台样式,丑的让你不想用,dede呢,漏洞太多,PHPCMS好看,可是门槛要求高,你会写PHP才行. 帝国CMS后台美化模板:全面美 ...

  7. 【ccf- csp201412-2】z字形扫描

    //ccf-Z字形扫描 #include<iostream> #include<cmath> using namespace std; #define N 500 int ma ...

  8. Opencv笔记(十八)——轮廓的更多函数及其层次结构

    凸缺陷 前面我们已经学习了轮廓的凸包,对象上的任何凹陷都被成为凸缺陷.OpenCV 中有一个函数 cv.convexityDefect() 可以帮助我们找到凸缺陷.函数调用如下: hull = cv2 ...

  9. Complier

    Complier [2019福建省赛] 模拟题应该有信心写,多出一些样例 当/* 与// 在一起的时候总会出错,一旦出现了这些有效的 应该把它删掉不对后面产生影响 #include<bits/s ...

  10. 功能区按钮调用Excel、PowerPoint、Word中的VBA宏:RunMacro

    功能区按钮调用Excel.PowerPoint.Word中的VBA宏:RunMacro 众所周知,Excel.PPT.Word文档或加载宏文件中可以写很多过程和函数,调试的过程中当然可以按F8或F5直 ...