1链栈
1.1栈结点结构体定义
typedef struct student
{
char name[32];
char sex;
int age;
}DATA_TYPE;
typedef struct stack_node
{
DATA_TYPE data;
struct stack_node *pnext;
}STACK_NODE;
1.2栈顶结点结构体定义
typedef struct stack_top
{
STACK_NODE *ptop;
int clen;
}STACK_TOP;
1.3创建栈顶结点
STACK_TOP *create_stack_top(void)
{
STACK_TOP *stack_top=NULL;
stack_top=malloc(sizeof(STACK_TOP));
if(NULL==stack_top)
{
perror("fail to malloc");
return NULL;
}
stack_top->ptop=NULL;
stack_top->clen=0;
return stack_top;
}
1.4创建栈结点
STACK_NODE *create_stack_new_node(DATA_TYPE data)
{
STACK_NODE *stack_node=NULL;
stack_node=malloc(sizeof(STACK_NODE));
if(NULL==stack_node)
{
perror("fail to malloc");
return NULL;
}
stack_node->data=data;
stack_node->pnext=NULL;
return stack_node;
}
1.5判断非空栈
int is_empty_stack(STACK_TOP *pstack)
{
return NULL==pstack->ptop;
}
1.6入栈
int push_stack(STACK_TOP *pstack,STACK_NODE *pnode)
{
if(is_empty_stack(pstack))
{
pstack->ptop=pnode;
}
else
{
pnode->pnext=pstack->ptop;
pstack->ptop=pnode;
}
pstack->clen++;
return 0;
}
1.7出栈
1.8遍历栈
void stack_for_each(STACK_TOP *pstack,void (*pfun)(STACK_NODE *))
{
STACK_NODE *ptmp=NULL;
ptmp=pstack->ptop;
while(1)
{
if(NULL==ptmp)
{
break;
}
pfun(ptmp);
ptmp=ptmp->pnext;
}
}
void show_data(STACK_NODE *pnode)
{
printf("%-10s\t%-10c\t%-10d\n",pnode->data.name,pnode->data.sex,pnode->data.age);
}