基于java的数据结构学习——数组实现的栈以及简单应用的 C++ 实现

源码:


//
// Created by PC-Saw on 2019/1/3.
//#ifndef DATA_STRUCTURE_ARRAYSTACK_H
#define DATA_STRUCTURE_ARRAYSTACK_H#include "Stack.h"
#include "MyArray.h"template<typename T>
class ArrayStack : public Stack<T> {private:MyArray<T>* array;public:ArrayStack();                                       // 无参构造ArrayStack(int capacity);                           // 有参构造~ArrayStack();                                      // 析构函数ArrayStack(const ArrayStack<T>& arr);               // 拷贝构造ArrayStack<T> &operator= (const ArrayStack<T> arr); // 重载赋值操作符MyArray<T> &operator[](int index);                  // 重载[]操作赋//友元函数实现 重载输出 << 操作符friend ostream & operator << (ostream &out, ArrayStack<T> &obj){out << "ArrayStack size = " << obj.getSize() << ", Capacity = " << obj.getCapacity() << endl;out << "ArrayStack: [";for (int i = 0; i < obj.getSize(); ++i){out << obj.array->get(i);if (i != obj.getSize() - 1)out << ", ";}out << "] Top";return out;}//友元函数实现 输入 >> 操作符friend istream & operator >> (istream &in, ArrayStack<T> &obj){for (int i = 0; i < obj.getSize(); ++i) {in << obj.array[i];}if (!in){obj = new ArrayStack();}return in;}int getCapacity();      // 获取栈容量int getSize();          // 获取栈内元素个数bool isEmpty();         // 判断栈空bool isFull();          // 判断栈满void push(T t);         // 元素压入栈T pop();                // 元素出栈T peek();               // 查看栈顶元素
};// 无参构造函数
template <typename T>
ArrayStack<T>::ArrayStack(){cout << "调用 ArrayStack() 构造" << endl;array = new MyArray<T>();
}// 有参构造
template <typename T>
ArrayStack<T>::ArrayStack(int capacity){cout << "调用 ArrayStack(int) 构造" << endl;array = new MyArray<T>(capacity);
}// 析构函数
template <typename T>
ArrayStack<T>::~ArrayStack(){cout << "调用析构函数" << endl;delete[] array;array = nullptr;
}// 拷贝构造
template <typename T>
ArrayStack<T>::ArrayStack(const ArrayStack<T>& arr){cout << "拷贝构造" << endl;array = new MyArray<T>(arr.getCapacity());array = arr;
}// 重载赋值操作符
template <typename T>
ArrayStack<T>& ArrayStack<T>::operator= (const ArrayStack<T> arr){cout << "调用 = 赋值操作" << endl;if (this->array != nullptr){delete[] this->array;this->array = nullptr;}this->array = new MyArray<T>(arr.getCapacity());for (int i = 0; i < arr.getSize(); ++i) {this->array[i] = arr[i];}return *this;
}// 重载[]操作赋
template <typename T>
MyArray<T>& ArrayStack<T>::operator[](int index){if (index < 0 || index > this->getSize() - 1)throw "索引非法!";return this->array[index];
}// 获取栈容量
template <typename T>
int ArrayStack<T>::getCapacity(){return array->getCapacity();
}// 获取栈内元素个数
template <typename T>
int ArrayStack<T>::getSize(){return array->getSize();
}// 判断栈空
template <typename T>
bool ArrayStack<T>::isEmpty(){return array->isEmpty();
}// 判断栈满
template <typename T>
bool ArrayStack<T>::isFull(){return array->isFull();
}// 元素压入栈
template <typename T>
void ArrayStack<T>::push(T t){array->pushBack(t);
}// 元素出栈
template <typename T>
T ArrayStack<T>::pop(){return array->removeBack();
}// 查看栈顶元素
template <typename T>
T ArrayStack<T>::peek(){return array->getBack();
}#endif //DATA_STRUCTURE_ARRAYSTACK_H

基于java的数据结构学习——数组实现的栈以及简单应用C++实现相关推荐

  1. 基于java的数据结构学习——数组实现的栈以及简单应用

    栈 Stack 栈是一种线性结构 相比数组,栈对应的操作是数组的子集 只能从一端添加元素,也只能从一端取出元素 这一端称为栈顶 栈是一种后进先出的数据结构 栈的应用 无处不在的Undo操作(撤销) 括 ...

  2. 基于java的数据结构学习——数组实现的队列和循环队列及性能对比

    队列 Queue 队列也是一种线性结构 相比数组,队列对应的操作是数组的子集 只能从一端(队尾)添加元素,只能从另一端(队首)取出元素 队列是一种先进先出的数据结构 队列的实现及复杂度分析 Queue ...

  3. 基于java的数据结构学习——动态数组C++类模板(含拷贝构造,重载常见运算符)

    之前实现了java的动态数组,试着写了个C++版的,同样对时间复杂度振荡进行了处理.纯手打,代码如下 : // // Created by PC-Saw on 2018/12/19. //#ifnde ...

  4. 基于java的数据结构学习——泛型动态数组的封装

    public class Array<E> {private E[] data;private int size;// 构造函数public Array(int Capacity){dat ...

  5. ndarray python 映射_NDArray — 基于Java的N维数组工具

    前言 随着数据科学在生产中的应用逐步增加,使用N维数组灵活的表达数据变得愈发重要.我们可以将过去数据科学运算中的多维循环嵌套运算简化为简单几行.由于进一步释放了计算并行能力,这几行简单的代码运算速度也 ...

  6. Java版数据结构之数组模拟环形队列demo

    Java版数据结构之数组模拟环形队列demo 我的代码仓库:https://github.com/zhuangbinan/datastructure 类 CircleArray package clu ...

  7. 基于JAVA计算机在线学习管理系统-计算机毕业设计源码+系统+mysql数据库+lw文档+部署

    基于JAVA计算机在线学习管理系统-计算机毕业设计源码+系统+mysql数据库+lw文档+部署 基于JAVA计算机在线学习管理系统-计算机毕业设计源码+系统+mysql数据库+lw文档+部署 本源码技 ...

  8. 基于Java毕业设计在线学习平台源码+系统+mysql+lw文档+部署软件

    基于Java毕业设计在线学习平台源码+系统+mysql+lw文档+部署软件 基于Java毕业设计在线学习平台源码+系统+mysql+lw文档+部署软件 本源码技术栈: 项目架构:B/S架构 开发语言: ...

  9. go语言基础数据结构学习---- 数组, 列表(list)和切片(slice)

    go语言基础数据结构学习–> 数组, 列表(list)和切片(slice) go 语言中的 数组是类型相同的元素的集合, 列表是双链表的容器, 可以添加不同类型的数据切片是对现有数组的引用, 比 ...

最新文章

  1. .net程序调试一:快速定位异常
  2. 利用自定命令打开常用软件,小白秒变大神。
  3. leetcode367. 有效的完全平方数
  4. 【ThinkingInC++】66、pointer Stash的使用
  5. IOHK与World Mobile合作以在坦桑尼亚建立新移动网络
  6. 详解浏览器 428 状态码 428 Precondition Required
  7. asp.net MVC学习的一些总结
  8. AI 领域一大进展:“分布式”和“深度学习”真正深度融合
  9. tensorflow只训练指定变量
  10. Kicad如何导入封装库、符号库(元件库)以及3D模型文件?
  11. python shell清屏指令_python shell怎么清屏
  12. 打不开网页服务器丢失,苹果浏览器safari打不开,丢失网络
  13. Oracle EBS FA创建资产时提示错误不能获得摊派到日期信息解决方案
  14. python爬虫(五)爬虫实战
  15. Git 上传代码到github上
  16. matplotlib之pyplot画饼图(pie)
  17. 美团点评2017秋招笔试真题-安全工程师卷
  18. amd运行android studio,彻底解决AMD 无法运行android studio原生模拟器
  19. 快手某程序接口大全关注.点赞.评论
  20. 计算机主机可以有几块硬盘,最好将计算机硬盘分为几个区域. 硬盘分区原理

热门文章

  1. 齐博php百度编辑器上传图片_php版百度编辑器ueditor怎样给上传图片自动添加水印?...
  2. leetcode217. 存在重复元素(vip题)超简单
  3. springboot——kaptcha
  4. 关系数据库——关系数据语言
  5. ccpc河北大学生程序设计竞赛dp小总结
  6. (一)nodejs循序渐进-nodejs环境安装(基础篇)
  7. 反编译用unity打包的资源文件
  8. 数据结构和算法(03)---栈和队列(c++)
  9. 如何优雅互换Map键与值
  10. Volatile原子性一致性JVM指令重排