栈的基本操作算法实现(C语言)
#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 init(PSTACK);//初始化栈void push(PSTACK,int); //压栈bool pop(PSTACK ,int *);//出栈void traverse(PSTACK);//遍历栈void clear(PSTACK ps);//清空栈int main(void){ STACK s; int val; init(&s); push(&s,1); push(&s,2); push(&s,3); traverse(&s); pop(&s,&val); printf("%d\n",val); traverse(&s);}//初始化栈void init(PSTACK ps){ ps->pTop=(PNODE)malloc(sizeof(NODE)); if(ps->pTop==NULL) { printf("动态内存分配失败"); exit(-1); } ps->pBottom=ps->pTop; ps->pBottom->pNext=NULL;}//压栈void push(PSTACK ps,int val){ PNODE p=(PNODE)malloc(sizeof(NODE)); p->data=val; p->pNext=ps->pTop; ps->pTop=p; return ;}//遍历栈void traverse(PSTACK ps){PNODE p=ps->pTop; while(p!=ps->pBottom) { printf("%d ",p->data); p=p->pNext; } printf("\n"); return;}//出栈,不需要返回值,因为直接操作存数据的变量的地址bool pop(PSTACK ps ,int * val){ if(ps->pBottom!=ps->pTop) { PNODE p=ps->pTop; *val =p->data; ps->pTop=p->pNext; free(p); p=NULL; return true; } else return false;}//清空栈void clear(PSTACK ps){//定义一个临时指针q PNODE p=ps->pTop , q=NULL; while(p!=ps->pBottom) { q=p->pNext; free(p); p=q; } ps->pTop=ps->pBottom;}?