对于链栈来说,通常是不需要头结点的。
结构图如下
#include<iostream>
using namespace std;
const int MAXSIZE = 100;
const int OK = 1;
const int ERROR =0;
typedef int Status;
typedef int ElemType;
typedef struct StackNode
{
ElemType data;
StackNode *next;
}StackNode,*LinkStackPtr;
typedef struct LinkStack
{
LinkStackPtr top;
int count;
}LinkStack;
Status Push(LinkStack *Stk, ElemType e)
{
StackNode* s=(StackNode*)malloc(sizeof(StackNode));
s->data = e;
s->next = Stk->top;
Stk->top = s;
Stk->count++;
return OK;
}
Status Pop(LinkStack *Stk, ElemType *e)
{
if(NULL==Stk->top && 0==Stk->count)
return ERROR;
*e = Stk->top->data;
StackNode* s = Stk->top;
Stk->top = Stk->top->next;
Stk->count--;
free(s);
return OK;
}
Status PrintStack(LinkStack Stk)
{
if(NULL==Stk.top && 0==Stk.count)
{
cout<<"空栈"<<endl;
return ERROR;
}
cout<<"从顶到底"<<endl;
while(Stk.count>0)
{
cout<<Stk.top->data<<endl;
Stk.top = Stk.top->next;
Stk.count--;
}
return OK;
}
int main()
{
LinkStack* stkA = (LinkStack*)malloc(sizeof(StackNode));
stkA->top = NULL;
stkA->count = 0;
int i=0;
for(i=0;i<10;i++)
{
Push(stkA,i*i);
cout<<i*i<<"入栈"<<endl;
}
PrintStack(*stkA);
cout<<"=========="<<endl;
ElemType e;
for(i=0;i<5;i++)
{
Pop(stkA,&e);
cout<<e<<"出栈"<<endl;
}
PrintStack(*stkA);
getchar();
return 0;
}
结果