小说网 找小说 无限小说 烟雨红尘 幻想小说 酷文学 深夜书屋

链栈

    今天,我们一起用C++写链栈,具体如下。

LinkStack.h具体内容:

#include "StackNode.h"

template<typename Type> class LinkStack{
public:
	LinkStack() :m_ptop(NULL){}
	~LinkStack(){
		MakeEmpty();
	}

public:
	void MakeEmpty();           //make the stack empty
	void Push(const Type item); //push the data
	Type Pop();                 //pop the data
	Type GetTop() const;        //get the data
	void Print();               //print the stack

	bool IsEmpty() const{
		return m_ptop == NULL;
	}

private:
	StackNode<Type> *m_ptop;
};

template<typename Type> void LinkStack<Type>::MakeEmpty(){
	StackNode<Type> *pmove;
	while (m_ptop != NULL){
		pmove = m_ptop;
		m_ptop = m_ptop->m_pnext;
		delete pmove;
	}
}

template<typename Type> void LinkStack<Type>::Push(const Type item){
	m_ptop = new StackNode<Type>(item, m_ptop);
}

template<typename Type> Type LinkStack<Type>::GetTop() const
{
	if (IsEmpty()){
		cout << "There is no elements!" << endl;
		exit(1);
	}
	return m_ptop->m_data;
}

template<typename Type> Type LinkStack<Type>::Pop()
{
	if (IsEmpty()){
		cout << "There is no elements!" << endl;
		exit(1);
	}
	StackNode<Type> *pdel = m_ptop;
	m_ptop = m_ptop->m_pnext;
	Type temp = pdel->m_data;
	delete pdel;
	return temp;
}

template<typename Type> void LinkStack<Type>::Print(){
	StackNode<Type> *pmove = m_ptop;
	cout << "buttom";
	while (pmove != NULL){
		cout << "--->" << pmove->m_data;
		pmove = pmove->m_pnext;
	}
	cout << "--->top" << endl << endl << endl;
}
StackNode.h具体内容:

template<typename Type> class LinkStack;

template<typename Type> class StackNode{
private:
	friend class LinkStack < Type > ;
	StackNode(Type dt, StackNode<Type> *next = NULL) :m_data(dt), m_pnext(next){}

private:
	Type m_data;
	StackNode<Type> *m_pnext;
};
main.cpp具体内容:

#include <iostream>
using namespace std;
#include "LinkStack.h"
int main(){
	LinkStack<int> stack;
	int init[10] = { 1, 3, 5, 7, 4, 2, 8, 0, 6, 9 };
	for (int i = 0; i < 10; i++){
		stack.Push(init[i]);
	}
	stack.Print();
	cout << stack.Pop() << endl;
	stack.Print();
	cout << stack.GetTop() << endl;
	stack.Print();
	cout << stack.Pop() << endl;
	stack.Print();
	stack.MakeEmpty();
	stack.Print();
	cin.get();
	return 0;
}
运行效果如图1所示:

                                                                                                                                   图1 运行效果

posted on 2014-09-14 18:24  牛栏山1  阅读(114)  评论(0编辑  收藏  举报

导航