栈的链式存储表示

来源:互联网 发布:mac os 10.13 发布 编辑:程序博客网 时间:2024/06/02 01:41

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 ;}
0 0
原创粉丝点击