C语言对栈的实现基本操作
C语言对栈的实现基本操作,操作如下:
#include<stdio.h> #include<malloc.h> #include<stdlib.h> #include<stdbool.h> typedefstructNode { intdata; structNode*pNext; }NODE,*PNODE; typedefstructStack { PNODEpTop; PNODEpBottom; }STACK,*PSTACK;//PSTACK等价于structSTACK* voidinit(PSTACK);//初始化栈 voidpush(PSTACK,int);//压栈 voidtraverse(PSTACK);//遍历 boolpop(PSTACKpS,int*pVal);//出栈 voidclear(PSTACKpS);//清空栈 intmain(void) { STACKS;//STACK等价于structStack intval; init(&S);//造出空栈 push(&S,1);//压栈 push(&S,2); push(&S,3); push(&S,4); push(&S,5); push(&S,6); traverse(&S);//遍历输出 /* if(pop(&S,&val)) { printf("出栈成功,出栈的元素是%d\n",val); } else { printf("出栈失败!\n"); } */ clear(&S); traverse(&S); return0; } voidinit(PSTACKpS) { pS->pTop=(PNODE)malloc(sizeof(NODE)); if(NULL==pS->pTop) { printf("动态内存分配失败\n"); exit(-1); } else { pS->pBottom=pS->pTop; pS->pTop->pNext=NULL; } } voidpush(PSTACKpS,intval) { PNODEpNew=(PNODE)malloc(sizeof(NODE));//创建新的节点 pNew->data=val;//将val的值赋给新节点的数据域 pNew->pNext=pS->pTop;//将新节点的指针域指向下一个节点.pS->Top不能改写成pS->Bottom pS->pTop=pNew;//pTop指向新节点 return; } voidtraverse(PSTACKpS) { PNODEp=pS->pTop; while(p!=pS->pBottom) { printf("%d",p->data); p=p->pNext; } printf("\n"); return; } boolempty(PSTACKpS) { if(pS->pTop==pS->pBottom) { returntrue; } else { returnfalse; } } boolpop(PSTACKpS,int*pVal) { if(empty(pS)) { returnfalse; } else { PNODEr=pS->pTop; *pVal=r->data; pS->pTop=r->pNext; free(r); r=NULL; returntrue; } } //清空栈 voidclear(PSTACKpS) { if(empty(pS))//如果 { return; } else { PNODEp=pS->pTop;//定义元素p指向栈顶元素 PNODEq=NULL;//定义元素q,初始值为空 while(p!=pS->pBottom)//如果栈不为空 { q=p->pNext;//q指向p的下一个元素 free(p);//释放p所指向的栈顶元素 p=q;//将q所指向的元素赋给p } pS->pTop=pS->pBottom; } }
希望本文所述对大家c程序设计有所帮助。