/*
实现链栈
*/
#include <iostream>
using namespace std;
#define OK 1
#define ERROR 0
typedef int Status;
typedef int Element;
typedef struct StackNode
{
Element data;
struct StackNode *next;
}StackNode, *LinkStackPtr;
typedef struct LinkStack
{
LinkStackPtr top;
int count;
}LinkStack;
/*初始化链栈*/
void Init(LinkStack *s)
{
s->top = NULL;
s->count = 0;
}
/*判断栈是否空*/
Status StackEmpty(LinkStack* s)
{
if( NULL == s->top)
return OK;
else
return ERROR;
}
/*压栈*/
Status Push(LinkStack *s,Element data)
{
LinkStackPtr p = (LinkStackPtr)malloc(sizeof(StackNode));
p->data = data;
p->next = s->top;
s->top = p;
s->count++;
cout<<"入栈成功"<<endl;
return OK;
}
/*出栈*/
Status Pop(LinkStack *s,Element* e)
{
if( StackEmpty(s))
{
cout<<"出栈失败"<<endl;
return ERROR;
}
LinkStackPtr p;
p = s->top;
*e = s->top->data;
s->top = p->next;
free(p);//释放内存
s->count--;
cout<<"出栈成功"<<endl;
return OK;
}
/*遍历栈*/
void TraverseStack(LinkStack *s)
{
LinkStackPtr p;
p = s->top;
while(p !=NULL)
{
cout<<p->data<<endl;
p = p->next;
}
}
int main()
{
LinkStack s1;
int data;
Init(&s1);
Push(&s1,1);
Push(&s1,2);
TraverseStack(&s1);
Pop(&s1,&data);
Pop(&s1,&data);
cout<<data<<endl;
return 0;
}
我的痕迹