数据结构c++实现----链式栈

来源:互联网 发布:ubuntu iso 编辑:程序博客网 时间:2024/05/17 01:03

不废话,上代码

//head.h

#ifndef HEAD#define HEAD#include<iostream>using namespace std;template<typename T> class LinkStack;template <typename T>class LinkNode{public:friend class LinkStack<T>;LinkNode();LinkNode( const T &elem);//~LinkNode();用不到    private:T data;LinkNode<T> *pPre;LinkNode<T> *pNext;};template <typename T>LinkNode<T>::LinkNode():pPre(NULL),pNext(NULL){//用于初始化头结点,data用不到。}template <typename T>LinkNode<T>::LinkNode( const T &elem):data(elem),pPre(NULL),pNext(NULL){//初始化其余元素} #endif

//lstack.cpp
#include "head.h"template<typename T> class LinkStack{public:LinkStack();~LinkStack();bool IsEmpty();void Push(const T &data);T Pop();T GetTop();int GetSize();void Clear();private:LinkNode<T> *Top;LinkNode<T> *Base;int Size;};template<typename T> LinkStack<T>::LinkStack():Size( 0 ){Top = new LinkNode<T>;Base = Top;}template<typename T> LinkStack<T>::~LinkStack(){if( ! IsEmpty() ){Clear();}delete Base;}template<typename T> bool LinkStack<T>::IsEmpty(){if( Size == 0 ){return true;}else{return false;}}template<typename T> int LinkStack<T>::GetSize(){return Size;}template<typename T> T LinkStack<T>::GetTop(){return Top->data;}template<typename T> void LinkStack<T>::Push( const T &data){LinkNode<T> *p;p = new LinkNode<T>;p->pPre = Top;p->data = data;Top = p;++Size;}template<typename T> T LinkStack<T>::Pop(){LinkNode<T> *q;q = Top;T data;Top = q->pPre;data = q->data;delete q;--Size;return data;}template<typename T> void LinkStack<T>::Clear(){LinkNode<T> *p;while( Top != Base ){p = Top;Top = p->pPre;delete p;--Size;}}

//main.cpp  测试

#include "head.h"#include "lstack.cpp"int main(){LinkStack<int> ls;cout<< ls.GetSize()<<endl;ls.Push( 66);ls.Push( 55);ls.Push( 44);ls.Push( 33);ls.Push( 22);cout<< ls.GetSize()<<endl;cout<< ls.Pop()<<endl;ls.Clear();cout<< ls.GetSize()<<endl;}


原创粉丝点击