⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 stack.h

📁 利用霍夫曼树进行文件压缩和解压
💻 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 + -