stack.h
/*=============================================== * 文件名称:stack.h * 创 建 者:cxy * 创建日期:2024年01月18日 * 描 述: ================================================*/ #ifndef _STACK_H #define _STACK_H #include#include typedef struct stack{ int data; struct stack *top; }Stack,*Pstack; int init(Pstack *P); int empty(Pstack p); int push_stack(Pstack p,int data); //尾插 int pop_stack(Pstack p,int *data); //只能从尾巴出栈,在一端操作(栈顶) int clear(Pstack p); #endif
stack.c
/*=============================================== * 文件名称:stack.c * 创 建 者: * 创建日期:2024年01月18日 * 描 述: ================================================*/ #include "stack.h" int init(Pstack *P) { *P = malloc(sizeof(Stack)); if(NULL == *P) { perror("init err:*P"); return -1; } (*P)->top = NULL; } int empty(Pstack p) { if(NULL == p) { perror("empty err:p"); return -1; } if(p->top == NULL) return 1; else return 0; } int push_stack(Pstack p,int data) { if(NULL == p) { perror("push err:p"); return -1; } Pstack q = malloc(sizeof(Stack)); if(NULL == q) { perror("push err:q"); return -1; } while(p->top != NULL) p = p->top; q->data = data; q->top = p->top; p->top = q; return 0; } int pop_stack(Pstack p,int *data) { if(NULL == p) { perror("pop err:p"); return -1; } if(empty(p)) { perror("pop err:empty"); return -1; } while(p->top->top != NULL) p = p->top; Pstack q = p->top; *data = q->data; p->top = q->top; free(q); return 0; } int clear(Pstack p) { if(NULL == p) { perror("clear err:p"); return -1; } Pstack q = p; while(p->top != NULL) { q = p->top; p->top = q->top; free(q); } return 0; }
mian.c
/*=============================================== * 文件名称:main.c * 创 建 者: * 创建日期:2024年01月18日 * 描 述: ================================================*/ #include "stack.h" int main(int argc, char *argv[]) { Pstack p; init(&p); int data; printf("**********empty,1为空**********\n"); data = empty(p); printf("%d\n",data); printf("**********push_stack**********\n"); data = 5; while(data--) { push_stack(p,data); printf("入栈数据为:%d\n",data); } printf("**********empty,1为空**********\n"); data = empty(p); printf("%d\n",data); printf("**********pop_stack**********\n"); data = 5; int num = 0; while(data--) { pop_stack(p,&num); printf("出栈数据为:%d\n",num); } printf("**********clear**********\n"); clear(p); printf("**********empty,1为空**********\n"); data = empty(p); printf("%d\n",data); return 0; }
结果