From 0d89d2bdabd20a88d59df0e28d18ff46ed424226 Mon Sep 17 00:00:00 2001 From: Zix <33301611+mvpcaozixiang@users.noreply.github.com> Date: Fri, 12 Oct 2018 19:50:55 +0800 Subject: [PATCH] Create StackBasedOnArray.cpp --- .../StackBasedOnArray/StackBasedOnArray.cpp | 122 ++++++++++++++++++ 1 file changed, 122 insertions(+) create mode 100644 c-cpp/08_stack/StackBasedOnArray/StackBasedOnArray.cpp diff --git a/c-cpp/08_stack/StackBasedOnArray/StackBasedOnArray.cpp b/c-cpp/08_stack/StackBasedOnArray/StackBasedOnArray.cpp new file mode 100644 index 0000000..d96ae5c --- /dev/null +++ b/c-cpp/08_stack/StackBasedOnArray/StackBasedOnArray.cpp @@ -0,0 +1,122 @@ +/** + * 1)顺序栈的操作:入栈和出栈; + * 2)采用模板的方法实现存储任意类型的数据 + * 3)采用数组的栈,支持动态扩容,每次扩容1.5 倍,初始栈的大小是 10 。 + * + * Author:caozx + * time ;2018年10月11日 + */ + +#include +#include "StackBasedOnArray.h" +using namespace std; + +//构造函数,创建栈 +//类模板成员函数的写法 template 返回值类型 类名::成员函数名(参数列表){} +template ArrayStack::ArrayStack() +{ + this -> count = 10; + this -> flag = 0; + this -> array = new T[this -> count]; + if (! this -> array){ + cout << "array malloc memory failure" << endl; + } +} + + +//有参构造函数,创建栈 +template ArrayStack::ArrayStack(int count) +{ + this -> count = count; + this -> flag = 0; + this -> array = new T[this -> count]; + if (! this -> array){ + cout << "array malloc memory failure" << endl; + } +} + +//析构函数,销毁栈 +template ArrayStack::~ArrayStack(){ + this -> count = 0; + this -> flag = 0; + if(this -> array){ + delete [] this -> array; + this -> array = NULL; + } + +} + +// 入栈 +template void ArrayStack::push(T data){ + if(this -> flag == this -> count){ + cout << "The stack is full , so need to enlarge 1.5x! "<< endl; + this -> count = int (1.5 * this -> count); + T * temp = new T [this -> count]; + for(int i = 0; i < this -> flag ; i++){ + temp[i] = this -> array[i]; + //cout << temp[i] < array; //释放原来的空间 + temp[this -> flag] = data; + this -> flag ++; + this -> array = temp; + } + else{ + this -> array [this -> flag] = data; + this -> flag ++ ; + } +} + +//出栈,并删除栈顶元素 +template T ArrayStack::pop(){ + this -> flag --; + T temp = this -> array[this -> flag]; + return temp; +} + +//出栈,不删除栈顶元素 +template T ArrayStack::peek(){ + T temp = this -> array[this -> flag - 1]; + return temp; +} + +template int ArrayStack::stackSize(){ + return this -> flag; +} + +template int ArrayStack::stackMaxSize(){ + return this -> count; +} + +int main(int argc, char const *argv[]) +{ + cout << " === test begin ===" << endl; + ArrayStack arrstack(12); + arrstack.push(10); + arrstack.push(20); + arrstack.push(30); + arrstack.push(40); + arrstack.push(50); + arrstack.push(60); + arrstack.push(70); + arrstack.push(80); + arrstack.push(90); + arrstack.push(100); + arrstack.push(110); + arrstack.push(120); + arrstack.push(130); + arrstack.push(140); + arrstack.push(150); + + cout << "peek , not delete " << arrstack.peek() << endl; + cout << "pop , delete " << arrstack.pop()<