对栈的各种操作的实现(C语言)

来源:互联网 发布:java时间格式化DD 编辑:程序博客网 时间:2024/05/01 07:52

对栈的各种操作的实现




#include <stdio.h>#include <malloc.h>#include <stdlib.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);//压栈 void traverse(PSTACK);//遍历栈 bool pop(PSTACK,int *);//出栈 bool is_empty(PSTACK);//判断栈是否为空 void clear(PSTACK pS);//清空栈 int main(){STACK S;int val;initStack(&S);//造出一个空栈 pushStack(&S,1);//压栈 pushStack(&S,2);pushStack(&S,5);pushStack(&S,8);pushStack(&S,0);traverse(&S);//clear(&S);//traverse(&S);if(pop(&S,&val)){printf("出栈成功!出栈的元素是%d\n",val);}else{printf("出栈失败!");}traverse(&S);//遍历输出 return 0;} void initStack(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 pushStack(PSTACK pS,int val){PNODE pNew=(PNODE)malloc(sizeof(NODE));if(NULL==pNew){printf("动态内存分配失败!\n");exit(-1);}else{pNew->data=val;        pNew->pNext=pS->pTop;    pS->pTop=pNew;}return;}void traverse(PSTACK pS){PNODE p=pS->pTop;while(pS->pBottom!=p){printf("%d ",p->data);p=p->pNext; }printf("\n");return;}//把pS所指向的栈出栈一次,并把出栈的元素存入pVal形参所指向的变量中。如果出栈失败,返回false,否则返回true bool pop(PSTACK pS,int *pVal){   if(is_empty(pS))   {      return false;   }else   {     *pVal=pS->pTop->data;     PNODE q=pS->pTop;     pS->pTop=pS->pTop->pNext;     free(q);     q=NULL;     return true;   }}bool is_empty(PSTACK pS){if(pS->pBottom==pS->pTop){return true;}else{return false;}}void clear(PSTACK pS){if(is_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;}}




0 0
原创粉丝点击