栈用两种方法实现,一种是链表,一种是数组
栈使用数组实现:
//StackBaseArray.h
#pragma once
template <class T>
class StackBaseArray {
private:
T *array;
int maxLength=1;
int top;
public:
StackBaseArray();
StackBaseArray(int maxLength);
bool push(T value);
T pop();
T peek();
bool clear();
bool isEmpty();
};
//StackBaseArray.cpp
#include"StackBaseArray.h"
template <class T> StackBaseArray<T>::StackBaseArray() {
maxLength = 64;
array = new T[64];
top = -1;
}
template <class T> StackBaseArray<T>::StackBaseArray(int maxLength) {
this->maxLength = maxLength;
array = new T[maxLength];
top = -1;
}
template <class T> bool StackBaseArray<T>::push(T value) {
if (top == maxLength - 1) {
return false;
}
top++;
array[top] = value;
return true;
}
template <class T> T StackBaseArray<T>::pop() {
if (top == -1) {
return NULL;
}
top--;
return array[top + 1];
}
template <class T> T StackBaseArray<T>::peek() {
if (top == -1) {
return NULL;
}
return array[top];
}
template <class T> bool StackBaseArray<T>::clear() {
top = -1;
return true;
}
template <class T> bool StackBaseArray<T>::isEmpty() {
if (top == -1) {
return true;
}
else {
return false;
}
}
栈使用链表实现
//StackBaseLinkedList.h
#pragma once
template <class T>
struct Node {
T value;
Node *next;
};
template <class T>
class StackBaseLinkedList {
private:
Node<T> *head;
public:
StackBaseLinkedList();
bool push(T value);
T pop();
T peek();
bool clear();
bool isEmpty();
};
//StackBaseLinkedList.cpp
#include"StackBaseLinkedList.h"
template <class T> StackBaseLinkedList<T>::StackBaseLinkedList() {
head = NULL;
}
template <class T> bool StackBaseLinkedList<T>::push(T value) {
if (head == NULL) {
head = new Node<T>;
head->value = value;
head->next = NULL;
}
else {
Node<T> *n = new Node<T>;
n->value = value;
n->next = head;
head = n;
}
return true;
}
template <class T> T StackBaseLinkedList<T>::pop() {
if (head == NULL) {
return NULL;
}
else {
T value = head->value;
head = head->next;
return value;
}
}
template <class T> T StackBaseLinkedList<T>::peek() {
if (head == NULL) {
return NULL;
}
else {
return head->value;
}
}
template <class T> bool StackBaseLinkedList<T>::clear() {
head = NULL;
return true;
}
template <class T> bool StackBaseLinkedList<T>::isEmpty() {
if (head == NULL) {
return true;
}
else {
return false;
}
}