#include <iostream>
using namespace std;
template <class Type>
struct Node
{
Type value;
Node *next;
};
template <class Type>
class Stack
{
public:
Stack();
~Stack();
void push(Type value);
Type pop();
int getSize();
private:
int size;
Node<Type> *top;
};
template <class Type>
Stack<Type>::Stack()
{
size = 0;
top = NULL;
}
template <class Type>
Stack<Type>::~Stack()
{
Node<Type> *next;
while (top != NULL)
{
next = top -> next;
delete top;
top = next;
}
}
template <class Type>
void Stack<Type>::push(Type value)
{
Node<Type> *temp;
temp = new Node<Type>;
temp -> value = value;
temp -> next = top;
top = temp;
size++;
}
template <class Type>
Type Stack<Type>::pop()
{
if (top == NULL)
{
cerr << "栈是空的!" << endl;
throw(1);
return 0;
}
Node<Type> *temp;
temp = top;
Type value = top -> value;
top = temp -> next;
delete temp;
size--;
return value;
}
template <class Type>
int Stack<Type>::getSize()
{
return size;
}
int main()
{
Stack<double> stack;
for (int i = 5; i <= 10; i++)
{
stack.push(i+.5);
}
cout << "size:" << stack.getSize() << endl;
while (stack.getSize() > 0)
{
cout << stack.pop() << endl;
}
return 0;
}