#include<iostream>
using namespace std;
//链栈实现
template<typename T>
class node
{
public:
node() { data = NULL; next = nullptr; }
node(T _data) { data = _data; next = nullptr; }
~node() { if (next != nullptr) { next = nullptr; } }
T data;
node* next;
};
template<typename T>
class linkStack
{
public:
linkStack() { L = new node<T>; length = 0; top = L->next; }
~linkStack() { removeStack(); delete L; L = nullptr; top = nullptr; }
void push(T elem) //入栈
{
node<T>* p = new node<T>(elem);
node<T>* temp = L;
for (int i = 0; i < length; i++) { temp = temp->next; };
temp->next = p;
top = p;
length++;
}
void pop(T& elem) //出栈
{
if (length == 0) { cout << "栈空!" << endl; return; }
elem = top->data;
delete top;
length--;
node<T>* temp = L;
for (int i = 0; i < length; i++) { temp = temp->next; }
top = temp;
}
void printStack() //从栈底遍历
{
node<T>* temp = L;
for (int i = 0; i < length; i++) { temp = temp->next; cout << temp->data << " "; }
cout << endl;
}
int getLength() { return length; }
void removeStack()
{
node<T>* temp = L->next;
node<T>* _temp = temp->next;
for (int i = 0; i < length; i++)
{
delete temp;
temp = _temp;
if (_temp != top) { _temp = _temp->next; }
}
length = 0;
}
//取栈顶元素
T getTop() { return top->data; }
private:
int length;
node<T>* L;
node<T>* top;
};
数据结构-栈(链式表示)(c++)
于 2022-05-04 18:36:45 首次发布