## 栈的定义
栈是限定在表的同一端进行插入或删除操作的线性表。进行插入或删除操作的一端称为栈顶,另一端成为栈底。没有数据元素的栈称为空栈。插入数据元素的操作称为入栈,删除数据元素的操作称为出栈。
栈的顺序存储
顺序栈入栈
Status Stack_Push(StackPtr s,StackEntry item)
{
Status outcome = success;
if(s->top == MAXSTACK-1)
outcome = overflow;
else{
s->top++;
s->entry[s->top] = item;
}
return outcome;
}
顺序栈出栈
Status Stack_Pop(StackPtr s,StackEntry *item)
{
Status outcome = success;
if(s->top == -1)
outcome = underflow;
else
*item = s->entry[s->top--];
return outcome;
}
取栈顶元素
Status Stack_Top(StackPtr s,StackEntry *item)
{
Status outcome = success;
if(Stack_Empty(s))
outcome = underflow;
else
*item = s->entry[s->top];
return outcome;
}
栈的链式存储
链栈入栈
Status Stack_Push(StackPtr s, StackEntry item)
{
Status outcome = success;
StackNodePtr np = MakeNode(item);
if(np == NULL)
outcome = overflow;
else {
np->next = s->top;
s->top = np;
}
return outcome;
}
链栈出栈
Status Stack_Pop(StackEntry *item)
{
Status outcome = success;
if(Stack_Empty(s))
outcome = underflow;
else{
StackNodePtr np = s->top;
s->top = np->next;
*item = np->entry;
free(np);
}
return outcome;
}
取栈顶元素
Status Stack_top(StackPtr s, StackEntry *item)
{
Status outcome = success;
if(Stack_Empty(s))
outcome = underflow;
else
*item = s->top->entry;
return outcome;
}