#include <iostream>
#include <fstream>
#include <string>
using namespace std;
template<typename T>
class stack
{
public:
stack() :head(0), end(0),top(0){}
void Push(T *d);
T *Pop();
int len(){ return top; }
~stack()
{
while (head)
delete Pop();
head = end = NULL;
}
private:
int top;
class s
{
public:
s() :data(0), next(0){}
s(T *datas, s *nexts);
T *GetD();
void SetT(T *i);
s*GetN();
void SetN(s*p);
private:
T *data;
s *next;
}*head,*end;
};
template<typename T>
void stack<T>::Push(T *d)
{
if (!head)
{
head = new s(d, NULL);
end = head;
top++;
return;
}
s *p = new s(d, NULL);
end->SetN(p);
end = p;
top++;
return;
}
template<typename T>
T * stack<T>::Pop()
{
T *t = head->GetD();
s *tmp = head;
head = head->GetN();
delete tmp;
tmp = NULL;
top--;
return t;
}
template <typename T>
T *stack<T>::s::GetD()
{
return data;
}
template<typename T>
void stack<T>::s::SetT(T *i)
{
data = i;
}
template <typename T>
typename stack<T>::s* stack<T>::s::GetN()
{
return next;
}
template<typename T>
void stack<T>::s::SetN(s*p)
{
next = p;
}
template <typename T>
stack<T>::s:: s(T *datas, s *nexts)
{
data = datas;
next = nexts;
}
void main11()
{
stack<string>ss;
string st;
ifstream in("1.cpp");
while (getline(in, st))
ss.Push(new string(st));
in.close();
string *p;
while (ss.len())
{
p = ss.Pop();
cout << *p<<endl;
delete p;
}
system("pause");
}
C++数据结构 简单栈 (一贯作风::懒)
最新推荐文章于 2023-03-16 22:05:30 发布