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;
}
结果
