自己写的一个基于数组实现的栈,欢迎大家批评指正,共同进步

来源:互联网 发布:查看知乎匿名用户 编辑:程序博客网 时间:2024/05/16 05:46

头文件:

 

#include <iostream>
using std::cout;
using std::endl;
using std::cin;
#pragma once
template<typename T>
class Stack{
public:
 Stack(void);
 ~Stack(void);
private:
 T* arr;
 static const int EVERY_SIZE = 100;
 int capacity;
 int top;
 void applyNewCapacity();
public:
 void push(T element);
 T topE();
 T pop();
 void printStack();
 int size(){return top+1;}
 
};

 

 

实现文件:

#include "Stack.h"

template<typename T>
Stack<T>::Stack(void):capacity(0),top(-1),arr(NULL){
}

template<typename T>
void Stack<T>::applyNewCapacity(){
 T* newArr = (T*)malloc((capacity+EVERY_SIZE)*sizeof(T));
 memset(newArr,0,(capacity+EVERY_SIZE)*sizeof(T));
 if(arr){
  memcpy(newArr,arr,capacity*sizeof(T));
  free(arr);
 }
 arr = newArr;
 capacity+= EVERY_SIZE;
}
template<typename T>
Stack<T>::~Stack(void){
 if(arr) free(arr);
}

template<typename T>
void Stack<T>::push(T element){
 if(++top >= capacity){
  this->applyNewCapacity();
 }
 arr[top] = element;
}

template<typename T>
T Stack<T>::topE(){
 if(top<0){
  cout<<"under flow"<<endl;
  return NULL;
 }
 return arr[top];
}

template<typename T>
T Stack<T>::pop(){
 if(top<0){
  cout<<"under flow"<<endl;
  return NULL;
 }
 T temp = arr[top--];
 return temp;
}
template<typename T>
void Stack<T>::printStack(){//from top to btm
 for(int i=top; i>=0; i--){
  cout<<arr[i]<<endl;
 }
}
void main(){
 Stack<int> st;
 st.push(23);
 st.push(54);
 st.push(123);
 st.printStack();
 int top = st.topE();
 cout <<"top "<<top<<endl;

 int pop = st.pop();
 cout <<"pop: "<<pop<<endl;
 st.printStack();
 cin.get();
}