栈的基本实现(入栈,出栈,清空,判断是否为空)

来源:互联网 发布:会员管理系统源码 编辑:程序博客网 时间:2024/04/28 21:18
#include <stdio.h>#include <stdlib.h>typedef struct Node {int data;struct Node *pNext;}NODE, *PNODE;typedef struct Stack {PNODE pTop;PNODE pBottom;}STACK, *PSTACK;void init(PSTACK pS) {pS->pTop = (PNODE)malloc(sizeof(NODE));if(NULL == pS->pTop) {printf("动态内存分配失败!\n");exit(-1);}else {pS->pBottom = pS->pTop;pS->pTop->pNext = NULL;}}void push(PSTACK pS, int val){PNODE pNew = (PNODE)malloc(sizeof(NODE));pNew->data = val;pNew->pNext = pS->pTop;pS->pTop = pNew;}bool empty(PSTACK pS) {if(pS->pTop == pS->pBottom)return true;elsereturn false;}bool pop(PSTACK pS, int* pVal) {if(empty(pS)) {return false;}else {PNODE r = pS->pTop;*pVal = r->data;pS->pTop = r->pNext;free(r);r = NULL;return true;}}void traverse(PSTACK pS) {PNODE p = pS->pTop;while(p != pS->pBottom) {printf("%d ", p->data);p = p->pNext;}printf("\n");}void clear(PSTACK pS){if(empty(pS)){return;}else{PNODE p = pS->pTop;PNODE q = NULL;while(p!=pS->pBottom){q = p->pNext;free(p);p = q;} pS->pTop = pS->pBottom;}}int main(void){STACK S;int val;init(&S);push(&S, 1);push(&S, 2);push(&S, 3);push(&S, 4);push(&S, 5);push(&S, 6);traverse(&S);//clear(&S);   clear()清空栈if(pop(&S, &val))   //val用于保存出栈的数值printf("ok\n");elseprintf("error\n");traverse(&S);return 0;}

代码整理自郝斌数据结构视频
原创粉丝点击