stack.h

来自「利用霍夫曼树进行文件压缩和解压」· C头文件 代码 · 共 57 行

H
57
字号
#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 + =
减小字号Ctrl + -
显示快捷键?