#include <stdio.h> #include <malloc.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 traverse(PSTACK);//遍历 bool pop(PSTACK, int *);//出栈 void clear(PSTACK pS);//清空 bool empty(PSTACK); //判断是否为空 int main(int argc, char *argv[]) { STACK S; int val; init(&S); push(&S,1); push(&S,2); push(&S,3); push(&S,4); traverse(&S); // if(pop(&S,&val)) // printf("出栈成功,出栈的元素是%d\n",val); // traverse(&S); clear(&S); traverse(&S); return 0; } void init(PSTACK pS) { pS->pTop = (PNODE)malloc(sizeof(NODE)); pS->pBottom = pS->pTop; pS->pBottom->pNext = NULL; } void push(PSTACK pS, int val) { PNODE pNew = (PNODE)malloc(sizeof(NODE)); pNew->data = val; pNew->pNext = pS->pTop; pS->pTop = pNew; } bool traverse(PSTACK pS) { PNODE p = (PNODE)malloc(sizeof(NODE)); p = pS->pTop; while(p!=pS->pBottom) { printf("-%d-",p->data); p = p->pNext; } printf("\n"); } bool pop(PSTACK pS, int *val) { if(empty(pS)) printf("空栈\n"); else { PNODE p = (PNODE)malloc(sizeof(NODE)); p = pS->pTop; *val = p->data; pS->pTop = p->pNext; free(p); p = 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 = q; } pS->pTop = pS->pBottom; } }
先进后出