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

不废话,上代码

//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;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值