栈的实现有一下几个步骤
创建栈
进栈
出栈
清空栈
是否空栈
遍历栈
#include <stdio.h>
typedef struct Student
{
int num;
struct Student *next;
}STUDENT,*PSTUDENT;
typedef struct Stack //创建栈
{
PSTUDENT top;
PSTUDENT bottom;
int link_length;
}STACK,*PSTACK;
void Init_Stack(PSTACK ps);
int Push_Stack(PSTACK ps,int num);
int Pop_Stack(PSTACK ps,int *val);
int Clear_Stack(PSTACK ps);
int Is_Empty(PSTACK ps);
/*
函数名:Init_Stack()
*/
void Init_Stack(PSTACK ps)
{
ps->top=(PSTUDENT)malloc(sizeof(STUDENT));
if(ps==NULL)
{
printf("分配出错!\n");
}
else
{
ps->link_length=0;
ps->bottom=ps->top;
ps->top->next=NULL;
}
}
/*
函数名:进栈
*/
int Push_Stack(PSTACK ps,int num)
{
PSTUDENT pnew=(PSTUDENT)malloc(sizeof(STUDENT));
if(pnew==NULL)
{
printf("分配失败\n");
return 0;
}
pnew->num=num;
pnew->next=ps->top;
ps->top=pnew; //指向栈顶
ps->link_length++;
}
/*
函数名:出栈
*/
int Pop_Stack(PSTACK ps,int *val)
{
PSTUDENT p;
if(Is_Empty(ps))
{
printf("栈空!\n");
}
else
{
*val=ps->top->num;
p=ps->top;
ps->top=p->next;
ps->link_length--;
free(p);
return 1;
}
}
/*
函数名:清空栈
*/
int Clear_Stack(PSTACK ps)
{
PSTUDENT p;
if(Is_Empty(ps))
{
printf("空栈!\n");
return 0;
}
else
{
while(ps->top!=ps->bottom)
{
ps->link_length--;
p=ps->top;
ps->top=ps->top->next;
free(p);
}
}
}
/*
函数名: 是否栈空
*/
int Is_Empty(PSTACK ps)
{
if(ps->top==ps->bottom)
{
printf("栈空!\n");
return 1;
}
return 0;
}
/*
函数名:遍历打印栈
*/
void traverses(PSTACK ps)
{
PSTUDENT p=ps->top;
while(p!=ps->bottom)
{
printf("num is:%d\n",p->num);
p=p->next;
}
}
/*
函数名:主函数
*/
int main()
{
STACK stack;
Init_Stack(&stack);
Push_Stack(&stack,10);
Push_Stack(&stack,20);
traverses(&stack);
return 0;
}