#include <iostream>
using namespace std;
template<typename T>
class Stack
{
private:
//定义一个双向链表
typedef struct DoubleLink
{
T value;
DoubleLink* next;
DoubleLink* prev;
}DOUBLE_LINK,*DOUBLE_LINK_POINT;
DOUBLE_LINK_POINT top; //栈顶
DOUBLE_LINK_POINT head; //头结点
public:
Stack();
~Stack();
bool STACK_EMPTY(); //是否为空栈
void PUSH(T x); //进栈
T POP(); //出栈
T TOP(); //返回栈顶
};
template<typename T>
Stack<T>::Stack()
{
head=(DOUBLE_LINK_POINT)malloc(sizeof(DOUBLE_LINK));
top=head;
head->next=NULL;
head->prev=NULL;
}
template<typename T>
Stack<T>::~Stack()
{
while(head->next!=NULL)
{
top=top->prev;
free(top->next);
top->next=NULL;
}
free(head);
}
template<typename T>
bool Stack<T>::STACK_EMPTY()
{
if(head->next==NULL)
{
return true;
}
else
{
return false;
}
}
template<typename T>
void Stack<T>::PUSH(T x)
{
DOUBLE_LINK_POINT l;
l=(DOUBLE_LINK_POINT)malloc(sizeof(DOUBLE_LINK));
l->value=x;
l->next=NULL;
l->prev=top;
top->next=l;
top=l;
}
template<typename T>
T Stack<T>::POP()
{
if(head->next==NULL)
{
printf("栈为空\n");
exit(0);
}
else
{
T x;
x=top->value;
top=top->prev;
free(top->next);
top->next=NULL;
return x;
}
}
template<typename T>
T Stack<T>::TOP()
{
if(head->next==NULL)
{
printf("栈为空\n");
exit(0);
}
else
{
return top->value;
}
}
int _tmain(int argc, _TCHAR* argv[])
{
Stack<int> S;
S.PUSH(3);
S.PUSH(2);
S.PUSH(8);
//输出栈内元素
while(!S.STACK_EMPTY())
{
cout<<S.POP()<<endl;
}
system("pause");
return 0;
}
算法导论-----栈
最新推荐文章于 2021-01-12 11:42:18 发布