链栈的进栈push和出栈pop操作都很简单,没有任何循环操作,时间复杂度均为O(1)。
对于链栈的进栈push操作,假设元素值为e的新结点是s,top为栈顶指针,示意图如图4-6-2所示代码如下。类似于头插
图4-6-2
/* 插入元素e为新的栈顶元素 */
Status Push(LinkStack *L, SElemType e)
{
//新要插入的结点指针
LinkStackPtr s = (LinkStackPtr)malloc(sizeof(StackNode));
s->data = e;
/* 把当前的栈顶元素赋值给新结点的直接后继,如图中① */
s->next = L->top;//新结点指向原栈顶指针
/* 将新的结点s赋值给栈顶指针,如图中② */
L->top = s;//原栈顶指针指向新结点,上移变成现栈顶结点
L->count++;
return OK;
}