作者:吴力强尹泽楠1991 | 来源:互联网 | 2023-08-30 15:10
1栈的链式表示栈的链式存储结构称为链栈,是运算受限的单链表。其插入和删除操作只能在表头位置上进行。因此,链栈没有必要像单链表那样附加头结点,栈顶指针top就是链表的头指针。图3-4
1 栈的链式表示
栈的链式存储结构称为链栈,是运算受限的单链表。
其插入和删除操作只能在表头位置上进行。
因此,链栈没有必要像单链表那样附加头结点,栈顶指针top就是链表的头指针。图3-4是栈的链式存储表示形式。
1 链栈的结点类型说明如下:
2 typedef struct Stack_Node
3 { ElemType data ;
4 struct Stack_Node *next ;
5 } Stack_Node ;
2 链栈基本操作的实现
1 (1) 栈的初始化
2 Stack_Node *Init_Link_Stack(void)
3 { Stack_Node *top ;
4 top=(Stack_Node *)malloc(sizeof(Stack_Node )) ;
5 top->next=NULL ;
6 return(top) ;
7 }
1 压栈(元素进栈)
2 Status push(Stack_Node *top , ElemType e)
3 { Stack_Node *p ;
4 p=(Stack_Node *)malloc(sizeof(Stack_Node)) ;
5 if (!p) return ERROR;
6 /* 申请新结点失败,返回错误标志 */
7 p->data=e ;
8 p->next=top->next ;
9 top->next=p ; /* 钩链 */
10 return OK;
11 }
1 弹栈(元素出栈)
2 Status pop(Stack_Node *top , ElemType *e)
3 /* 将栈顶元素出栈 */
4 { Stack_Node *p ;
5 ElemType e ;
6 if (top->next==NULL )
7 return ERROR ; /* 栈空,返回错误标志 */
8 p=top->next ; e=p->data ; /* 取栈顶元素 */
9 top->next=p->next ; /* 修改栈顶指针 */
10 free(p) ;
11 return OK ;
12 }