#include <iostream>
#include <studib.h>
using namespace std;
template<class Type>
class LinkStack
{
struct StackNode
{
Type data;
StackNode* next;
};
private:
StackNode* top;
int cursize;
public:
LinkStack() :top(NULL), cursize(0)//创建函数,初始化
{
}
~LinkStack()//清除
{
Clear();
}
int GetSize()const { return cursize; }
bool Is_Empty() { return GetSize() == 0; }
bool Push(const Type& val)
{
StackNode* s = (StackNode*)::operator new(sizeof(StackNode));//申请空间
if (nullptr == s) return false;
//s->data = val;
new (&s->data) Type(val);//类型+(),调用构造函数
s->next = top;
top = s;
cursize += 1;
return true;
}
Type& GetTop()
{
return top->data;
}
const Type& GetTop() const
{
return top->data;
}
void Pop()
{
StackNode* q = top;
top = q->next;
(&(q->data))->~Type();
free(q);
cursize -= 1;
}
void Clear()
{
while (!Is_empty())
{
Pop();
}
}
};
int main()
{
LinkStack<int> ist;
for (int i = 0; i < 10; ++i)
{
ist.Push(i + 10);
}
while (!ist.Is_Empty())
{
int x = ist.GetTop();
ist.Pop();
cout << x << endl;
}
}
2021-07-12
最新推荐文章于 2021-11-10 17:26:45 发布