#include <stdio.h> #include <stdlib.h> #include <malloc.h> #include <stdbool.h> typedef struct Node{ int data; struct Node *pNext; }NODE,*PNODE; typedef struct Stack{ PNODE pTop;//顶部 PNODE pBottom;//底部 }STACK,*PSTACK; void initStack(PSTACK); void pushStack(PSTACK,int val); void traverse(PSTACK); bool pop(PSTACK,int *); bool empty(PSTACK pS); int main() { STACK S;//一开始什么都没有,是垃圾值 int val; initStack(&S); pushStack(&S,1); pushStack(&S,2); pushStack(&S,3); pushStack(&S,4); pushStack(&S,5); pushStack(&S,6); if(pop(&S,&val)){ printf("出栈成功,出栈的元素是%d\n",val); }else{ printf("出栈失败\n"); } traverse(&S); clear(&S); traverse(&S); return 0; } void initStack(PSTACK pS){ pS->pTop = (PNODE)malloc(sizeof(NODE)); if(pS->pTop==NULL){ printf("动态内存分配失败!\n"); exit(-1); }else{ pS->pBottom=pS->pTop; } } void pushStack(PSTACK pS,int val){ PNODE pNew = (PNODE)malloc(sizeof(NODE)); pNew->data = val; pNew->pNext = pS->pTop; pS->pTop = pNew; return; } void traverse(PSTACK pS){ PNODE p = pS->pTop; while(p!=pS->pBottom){ printf("%d \n",p->data); p=p->pNext; } printf("\n"); return; } 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; } } bool empty(PSTACK pS){ if(pS->pTop == pS->pBottom){ return true; }else{ return false; } } 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=NULL; p = q; } pS->pTop = pS->pBottom; } }
文章来源: 栈的基本操作