📄 stack.h
字号:
#ifndef STACK_H
#define STACK_H
#include<assert.h>
#include<iostream>
using namespace std;
template <class Type> class Stack;
template <class Type> class StackNode {
friend class Stack<Type>;
private:
Type data; //结点数据
StackNode<Type> *link; //结点链指针
StackNode ( Type d, StackNode<Type>
*l=NULL ) : data (d), link (l) { }
};
template <class Type> class Stack {
public:
Stack ( ) : top ( NULL ) { }
~Stack ( );
void Push ( const Type & item);
Type Pop ( );
Type GetTop ( );
void MakeEmpty ( ) { top=NULL; }
bool IsEmpty ( ) const { return top == NULL; }
private:
StackNode<Type> *top; //栈顶指针
};
template <class Type> Stack<Type>::~Stack () {
StackNode<Type> *p;
while ( top != NULL )
{ p = top; top = top->link; delete p;}
}
template <class Type> void Stack<Type>::Push ( const Type &item ) {
top = new StackNode<Type> ( item, top );
//新结点链入top之前, 并成为新栈顶
}
template <class Type> Type Stack<Type>::Pop ( ) {
assert ( !IsEmpty ( ) );
StackNode<Type> *p = top;
Type retvalue = p->data; //暂存栈顶数据
top = top->link; //修改栈顶指针
delete p; return retvalue; //释放,返回数据
}
template <class Type> Type Stack<Type>::GetTop ( ) {
assert ( !IsEmpty ( ) );
return top->data;
}
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -