目录
一、结构体
typedef struct
{
int data[MAX];
int top;
} seq_stack, *stack;
二、判满
int full_stack(stack S)
{
if (S == NULL)
{
printf("入参为空\n");
return -1;
}
return S->top == MAX - 1 ? 1 : 0;
}
三、判空
int empty_stack(stack S)
{
if (S == NULL)
{
printf("入参为空\n");
return -1;
}
return S->top == -1 ? 1 : 0;
}
四、创建
stack create_stack()
{
stack p = (stack)malloc(sizeof(seq_stack));
if (p == NULL)
{
printf("内存申请失败\n");
return NULL;
}
printf("内存申请成功\n");
p->top = -1;
memset(p->data, 0, sizeof(p->data));
return p;
}
五、入栈
void push_stack(stack S, int data)
{
if (S == NULL)
{
printf("入参为空\n");
return;
}
if (!full_stack(S))
{
S->data[++(S->top)] = data;
return;
}
printf("栈已满,无法入栈\n");
}
六、出栈
int pop_stack(stack S)
{
if (S == NULL)
{
printf("入参为空\n");
return -1;
}
if (!empty_stack(S))
return S->data[(S->top)--];
printf("栈为空,无法出栈\n");
}
七、打印
void print_seqlist(stack S)
{
if (S == NULL)
{
printf("入参为空\n");
}
else if (empty_stack(S))
{
printf("栈为空\n");
}
else
{
int i = S->top;
while (i > -1)
{
printf("top->S[%d] = %d\n", i, S->data[i]);
i--;
}
}
}
八、清空
void clean_stack(stack S)
{
if (S == NULL)
printf("入参为空\n");
else if (empty_stack(S))
printf("栈为空\n");
else
{
S->top = -1;
printf("栈已清空\n");
}
}
九、销毁
void distory_stack(stack *S)
{
if (S == NULL || *S == NULL)
printf("入参为空\n");
else if (empty_stack(*S))
printf("栈为空\n");
else
{
free(*S);
*S = NULL;
if (*S == NULL)
{
printf("栈已释放\n");
}
}
}
十、应用:二进制转换
void binary_selfcompute(stack S, int data)
{
if (data == 0)
return;
push_stack(S, data % 2);
binary_selfcompute(S, data / 2);
}