(3)入栈 StackPush(head,x) int StackPush(LSNode * head, Data Type x) LSNode p p=(LSNode )malloc(sizeof(lsnode)); p->data=x; p->next= head->next; head->next= p return 1
(3)入栈StackPush(head, x) int StackPush(LSNode *head, DataType x) { LSNode *p; p = (LSNode *)malloc(sizeof(LSNode)); p->data = x; p->next = head->next; head->next = p; return 1; }
(4)出栈 StackPop(head,*d) int StackPop(lsNode * head, DataType*d) LSNode*p= head->next if(p==nUll { printi("堆栈已空出错!"); return 0; head->next=p→>next; *d=p->data free(p), return 1
(4)出栈StackPop(head, *d) int StackPop(LSNode *head, DataType *d) { LSNode *p = head->next; if(p == NULL) { printf("堆栈已空出错!"); return 0; } head->next = p->next; *d = p->data; free(p); return 1; }
5)取栈顶数据元素 StackTop(head,d) int StackTop(LSNode head, Data Type*d) LSNode *p=head->next; if(p== NULL prin("堆栈已空出错!"); return o *d= p->data; return I;
(5)取栈顶数据元素StackTop(head, d) int StackTop(LSNode *head, DataType *d) { LSNode *p = head->next; if(p == NULL) { printf("堆栈已空出错!"); return 0; } *d = p->data; return 1; }
(6)撒消动态申请空间 Destroy(*head) void Destroy (lsNode *head) LSNode*p,“pl; p= head; while(p != NULL pI=P p= p->next; free(p1)
(6)撤消动态申请空间Destroy(*head) void Destroy(LSNode*head) { LSNode *p, *p1; p = head; while(p != NULL) { p1 = p; p = p->next; free(p1); } }
说明: 1)链栈的入栈、出栈操作就是栈顶的插入与删除操作,修 改指针即可完成。 2)-般不会出现栈满情况;除非没有空间导致 malloc分配 失败 3采用链栈存储方式的优点是,当栈中元素个数变化较大, 准确数字难以确定时,链栈较顺序堆栈方便
说明: 1) 链栈的入栈、出栈操作就是栈顶的插入与删除操作,修 改指针即可完成。 2)一般不会出现栈满情况;除非没有空间导致malloc分配 失败。 3)采用链栈存储方式的优点是,当栈中元素个数变化较大, 准确数字难以确定时,链栈较顺序堆栈方便