栈的基本操作

匿名 (未验证) 提交于 2019-12-03 00:22:01
#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;     } } 

文章来源: 栈的基本操作
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!