栈的链式存储表示

1 栈的链式表示
栈的链式存储结构称为链栈,是运算受限的单链表。其插入和删除操作只能在表头位置上进行。因此,链栈没有必要像单链表那样附加头结点,栈顶指针top就是链表的头指针。图3-4是栈的链式存储表示形式。

链栈的结点类型说明如下:

typedef  struct  Stack_Node
{  ElemType   data ;
struct Stack_Node  *next ;
} Stack_Node ;

这里写图片描述

2 链栈基本操作的实现
(1) 栈的初始化

Stack_Node  *Init_Link_Stack(void)
{    Stack_Node  *top ;
top=(Stack_Node  *)malloc(sizeof(Stack_Node )) ;
top->next=NULL ; 
return(top) ;
}

(2) 压栈(元素进栈)

Status push(Stack_Node *top , ElemType  e)
{   Stack_Node  *p ;
p=(Stack_Node  *)malloc(sizeof(Stack_Node)) ; 
if (!p)  return  ERROR; 
/*  申请新结点失败,返回错误标志 */
p->data=e ; 
p->next=top->next  ; 
top->next=p ;    /*  钩链  */
return OK;
}

(3) 弹栈(元素出栈)

Status pop(Stack_Node  *top , ElemType *e)
/*  将栈顶元素出栈  */
{   Stack_Node  *p ;
ElemType  e ;
if  (top->next==NULL )
return ERROR ;    /*  栈空,返回错误标志    */
p=top->next ; e=p->data ;    /*  取栈顶元素  */
top->next=p->next ;     /*  修改栈顶指针  */
free(p) ; 
return OK ;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值