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();
}