数组栈来自于上一篇文章(头文件1、2,源文件1、2)
1、实现链表模板
2、创建链表栈模板
3、比较数组栈和链表栈
1. 头文件1
Array.h
#pragma once
template<typename T>
class Array
{
public:
Array(int capacity);
Array();
T& operator[](int i);
int GetSize();
int GetCapacity();
bool IsEmpty();
void add(int index, T e);
void AddLast(T e);
void AddFirst(T e);
void toString();
int get(T index);
void set(int index, T e);
bool contains(T e);
int find(T e);
//删除并返回
T remove(int index);
T removeFirst();
T removeLast();
void removeelement(T e);
T GetLast();
T GetFirst();
~Array();
private:
void reSize(int newcapacity);
protected:
private:
int size;
T *data;
int capacity;
};
2. 头文件2
ArrayStack.h
#pragma once
#include "Array.h"
#include "StackInterface.h"
template<typename T>
class ArrayStack:public Stack<T>
{
public:
ArrayStack(int capacity);
ArrayStack();
int GetSize();
bool IsEmpty();
int getcapacity();
void Push(T e);
T pop();
T peek();
void toString();
~ArrayStack();
private:
Array<T> array;
};
3. 头文件3
LinkListStack.h
#pragma once
#include "StackInterface.h"
#include "LinkList.hpp"
template<typename T>
class LinkListStack:public Stack<T>
{
public:
LinkListStack();
int GetSize();
bool IsEmpty();
void Push(T e);
T pop();
T peek();
void toString();
~LinkListStack();
private:
LinkList<T> list;
};
4. 头文件4
StackInterface.h
#pragma once
template<typename T>
class Stack {
public:
virtual int GetSize() = 0;
virtual bool IsEmpty() = 0;
virtual void Push(T e) = 0;
virtual T pop() = 0;
virtual T peek() = 0;
};
5. 源文件1
Array.hpp
#pragma once
#include "Array.h"
#include <string>
#include <iostream>
using namespace std;
template<typename T>
Array<T>::Array(int capacity) {
cout << "Array(int)" << endl;
data = new T[capacity];
size = 0;
this->capacity = capacity;
}
template<typename T>
Array<T>::Array() {
cout << "Array()" << endl;
this->capacity = 5;
data = new T[capacity];
size = 0;
}
template<typename T>
T& Array<T>::operator[](int i) {
return data[i];
}
template<typename T>
int Array<T>::GetSize() {
return size;
}
template<typename T>
int Array<T>::GetCapacity() {
return capacity;
}
template<typename T>
bool Array<T>: