#include <iostream>
using namespace std;
template<typename T> class myStack;
template<typename T>
class node
{
friend class myStack<T>;
T data;
node *next, *parent;
};
template<typename T>
class myStack
{
public:
myStack();
~myStack();
void push(const T&);
T& top();
void pop();
bool empty();
int size()
{
return length;
}
private:
void destroy();
node<T> *bottom, *head;
int length;
};
template<typename T>
myStack<T>::myStack() : bottom(0), head(0), length(0){
}
template<typename T>
myStack<T>::~myStack()
{
destroy();
}
template<typename T>
void myStack<T>::push(const T& val)
{
node<T> *t = new node<T>;
t->data = val;
t->next = 0;
if(empty())
{
head = bottom = t;
head ->parent = 0;
}
else
{
head->next = t;
t->parent = head;
head = t;
}
length++;
}
template<typename T>
T& myStack<T>::top()
{
return head->data;
}
template<typename T>
void myStack<T>::pop()
{
node<T> *p = head;
head = head->parent;
delete p;
length--;
}
template<typename T>
bool myStack<T>:: empty()
{
return head == 0;
}
template<typename T>
void myStack<T>::destroy()
{
while(!empty())
pop();
}
int main(void)
{
myStack<int> st;
for(int i = 1; i <= 10; ++i)
{
st.push(i);
}
cout << "size: " << st.size() << endl;
for(int j = 0; j < 10; ++j)
{
if(!st.empty())
{
cout << st.top() << endl;
st.pop();
cout << "size: " << st.size() << endl;
}
}
return 0;
}
栈C++模版实现(链表版)
最新推荐文章于 2021-01-15 23:03:41 发布