stack.h
/*===============================================
* 文件名称:stack.h
* 创 建 者:cxy
* 创建日期:2024年01月18日
* 描 述:
================================================*/
#ifndef _STACK_H
#define _STACK_H#include <stdio.h>
#include <stdlib.h>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;elsereturn 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;
}
结果