#pragma once
#include "stdafx.h"
#include "StackNode.h"
//LinkStack,链式栈的类定义
template <typename T>
class Stack {
private:
StackNode<T>* top; //cur ptr
// 7个方法
public:
//Construct Function()
Stack() :top(NULL) {}
//DeConstruct Function()
~Stack() {
StackNode<T>* p; //temp ref domain
while (top != NULL) { //free()
p = top;
top = top->next;
delete p;
}
}
//Push() 从栈顶压入一个元素
void Push(const T & item) {
StackNode<T> * p = new StackNode<T>;
p->data = item; //赋值
p->next = top; //connect cur ptr
top = p; //cur ptr move ++
}
//Pop() 从栈顶弹出一个元素
T Pop() {
if (IsEmpty()) { //empty stack
cerr << "Attempt to pop an empty stack!" << endl;
exit(1);
}
StackNode<T>* p = top; //temp ref domain
T RetValue = p->data; //temp data domain
top = top->next; //top-- move
delete p; //free() p, else will crash memory
return RetValue;
}
//Peek(),GetTop()
T Peek() const {
if (IsEmpty()) { //empty stack
cerr << "Attempt to pop an empty stack!" << endl;
exit(1);
}
return top->data;
}//!_Peek
//Clear()
void Clear(void) {
//不free()会内存泄漏
StackNode<T>* p; //temp ref domain
while (top != NULL) { //free()
p = top;
top = top->next;
delete p;
}
this.top = NULL;
}//!_Clear()
//IsEmpty()
int IsEmpty(void) const {
return top == NULL;
}//!_IsEmpty()
};//!_class Stack
链式栈的类定义
最新推荐文章于 2024-07-25 22:08:16 发布