首页 > 编程语言 > 详细

栈(C语言版,尾插法,使用头节点)

时间:2021-03-05 14:35:38      阅读:65      评论:0      收藏:0      [点我收藏+]
#include <stdio.h> #include <stdlib.h> #include <stdbool.h> typedef struct Node { int data; struct Node *pNext; }NODE, *PNODE; typedef struct Stack { PNODE pTop; PNODE pBottom; }STACK, *PSTACK; void init(PSTACK pS); bool push(PSTACK, int); bool is_empty(PSTACK); void traverse(PSTACK); bool pop(PSTACK, int *); bool pop(PSTACK pS, int *pVal) { if (is_empty(pS)) return false; *pVal = pS->pTop->data; PNODE q = pS->pTop; pS->pTop = q->pNext; free(q); q = NULL; return true; } void traverse(PSTACK pS) { PNODE p = pS->pTop; if (is_empty(pS)) { printf("stack is empty.\n"); return; } while (p->pNext != NULL) { printf("%d ", p->data); p = p->pNext; } printf("\n"); } bool is_empty(PSTACK pS) { if (pS->pTop == pS->pBottom) return true; return false; } bool push(PSTACK pS, int val) { PNODE pNew = (PNODE)malloc(sizeof(NODE)); if (NULL == pNew) { printf("内存分配失败"); return false; } pNew->data = val; pNew->pNext = pS->pTop; pS->pTop = pNew; return true; } void init(PSTACK pS) { PNODE pNew = (PNODE)malloc(sizeof(NODE)); if (NULL == pNew) { printf("内存分配失败"); exit(-1); } pNew->pNext = NULL; pS->pTop = pS->pBottom = pNew; } int main(void) { STACK S; init(&S); push(&S, 11); push(&S, 22); push(&S, 33); traverse(&S); int val; while (pop(&S, &val)) { printf("出栈成功:%d,栈内剩余:\n", val); traverse(&S); } return 0; }

output:

[root@8be225462e66 c]# gcc stack_hb.c && ./a.out
33 22 11
出栈成功:33,栈内剩余:
22 11
出栈成功:22,栈内剩余:
11
出栈成功:11,栈内剩余:
stack is empty.

栈(C语言版,尾插法,使用头节点)

原文:https://blog.51cto.com/sndapk/2647847

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!