数据结构:泛型堆栈的实现(C++)


 Mi_Stack实现:

#pragma once
#include "stdafx.h"
#include <iostream>
using namespace std;

template <class Stype>
class Mi_Stack {
public:
	Mi_Stack() {
		eFrist = 0;
		eEnd = 0;
		size = 0;
	};
	void Push(Stype);
	void Pop();
	void Clean();
	void PrintStack();
	void PrintAddress();
	inline int GetSize() {
		return size;
	}
private:
	class Element {
	public:
		Stype data;
		Element* pFront;
		Element* pRear;
	};
	Element* eFrist;
	Element* eEnd;
	int size;
};
template <class Stype>
void Mi_Stack<Stype>::Push(Stype _e) {
	if (0 == size) {
		eFrist = new Element();
		eFrist->data = _e;
		eFrist->pFront = 0;
		eFrist->pRear = 0;
		eEnd = eFrist;
	}
	else {
		Element* e = new Element();
		e->pRear = 0;
		e->data = _e;
		e->pFront = eEnd;
		//修改旧栈顶尾指针
		eEnd->pRear = e;
		//重新定位指针
		eEnd = e;
	}
	size++;
}

template <class Stype>
void Mi_Stack<Stype>::Pop() {
	if (0 == size) {
		cout << "警告:空栈!" << endl;
		return;
	}
	if (eFrist == eEnd) {
		delete eEnd;
		eFrist = eEnd;
		size--;
		return;
	}
	Element *del = eEnd;
	Element *nEnd = eEnd->pFront;
	nEnd->pRear = 0;
	eEnd = nEnd;
	delete del;
	size--;
}

template <class Stype>
void Mi_Stack<Stype>::Clean() {
	if (0 == size) {
		return;
	}
	while (eEnd->pFront) {
		Element* nEnd = eEnd->pFront;
		delete eEnd;
		eEnd = nEnd;
	}
	size = 0;
}

template<class Stype>
void Mi_Stack<Stype>::PrintStack() {
	if (size == 0) {
		cout << "警告:空栈无法输出数据!" << endl;
		return;
	}
	cout << "输出栈数据:" << endl;
	Element *e = new Element();
	e = eFrist;
	while (e->pRear) {
		cout << e->data << " ";
		e = e->pRear;
	}
	cout << e->data << endl;;
}

template<class Stype>
void Mi_Stack<Stype>::PrintAddress() {
	if (size == 0) {
		cout << "警告:空栈无法输出地址!" << endl;
		return;
	}
	cout << "输出栈地址:" << endl;
	Element* e = new Element();
	e = eFrist;
	while (e->pRear)
	{
		cout << e->pFront << "||" << e<< "||" << e->pRear << endl;
		e = e->pRear;
	}
	cout << e->pFront << "||" << e << "||" << e->pRear << endl;
}


 Mi_Stack测试:

void TestStack() {
	cout << "Mi_Stack测试:" << endl;
	Mi_Stack<int> stack;
	stack.Push(1);
	stack.Push(2);
	stack.Push(3);
	stack.Push(4);
	stack.PrintStack();
	stack.PrintAddress();
	stack.Clean();
	stack.PrintStack();
}


 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值