[数据结构]栈的实现-C++

来源:互联网 发布:淘宝卖家订购哪些服务 编辑:程序博客网 时间:2024/06/05 20:22

栈用两种方法实现,一种是链表,一种是数组



栈使用数组实现:


//StackBaseArray.h

#pragma oncetemplate <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 oncetemplate <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;}}