思维导图
#include "zan_bcc.h"
//从堆区申请顺序栈的空间
seq_p create_zhan()
{
seq_p K = (seq_p)malloc(sizeof(seq_stack));
if(K==NULL)
{
printf("空间申请失败\n");
return NULL;
}
K->tob = -1;
return K;
}
//入栈压栈
void push_stack(seq_p K,datatype data)
{
if(K==NULL)
{
printf("入参为空,请检查\n");
return;
}
if(full_stack(K))
{
printf("栈已满\n");
return;
}
K->tob++;
K->data[K->tob] = data;
}
//判空
int empty_seq(seq_p K)
{
if(K==NULL)
{
printf("入参为空,请检查\n");
return -1;
}
return K->tob==-1?1:0;
}
//判满
int full_stack(seq_p K)
{
if(K==NULL)
{
printf("入参为空\n");
return -1;
}
return K->tob==MAX-1?1:0;
}
// 输出栈
void show(seq_p K)
{
if(K==NULL)
{
printf("入参为空\n");
return;
}
if(full_stack(K))
{
printf("栈已空\n");
return;
}
for(int i=K->tob;i>=0;i--)
{
printf("%-4d",K->data[i]);
}
putchar(10);
}
//出栈
void pop_stack(seq_p K)
{
if(K==NULL)
{
printf("入参为空\n");
return;
}
if(full_stack(K))
{
printf("栈已空\n");
return;
}
printf("%d\n",K->data[K->tob--]);
}
//释放顺序栈
void free_stack(seq_p *K)
{
if(K==NULL||*K==NULL)
{
printf("申请空间失败\n");
return;
}
free(*K);
*K=NULL;
}
链栈
#include "lian_zhan.h"
//申请节点
node_p create_node(int data)
{
node_p new = (node_p)malloc(sizeof(node));
if(new==NULL)
{
printf("空间申请失败\n");
return NULL;
}
new->data=data;
return new;
}
//入栈
void push_staski(node_p *H,int data)
{
node_p new = create_node(data);
new->next = *H;
*H = new;
}
//判空
int empty_stack(node_p H)
{
return H==NULL?1:0;
}
//出栈
void pop_skd(node_p *H)
{
node_p del = *H;
*H =(*H)->next;
printf("要出栈的元素为%d\n",del->data);
free(del);
}
//输出栈
void show(node_p H)
{
if(empty_stack(H))
{
printf("栈表为空\n");
return;
}
node_p p =H;
while(p!=NULL)
{
printf("%d->",p->data);
p = p->next;
}printf("H\n");
}