其中包含出栈进栈操作 创建栈以及判断栈空操作
//栈的链式表示
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
typedef struct stack_node{
int data;
char name[20];
}Stack;
typedef struct LNode{
Stack sdata;
struct LNode * next;
}LNode,*Link;
enum result{MALLOC_OK,MALLOC_NO,EMPTY_OK,EMPTY_NO,PUSH_OK,PUSH_NO,POP_NO=100,POP_OK};
#if 1
int is_empty();
int create_node();
void create_stack();
void push_stack();
int pop_stack();
#endif
void main()
{
Stack new_node;
Stack pop_node;
Link stack = NULL;
create_stack(&stack);
is_empty(stack);
int i,ret;
for(i=1;i<=5;i++)
{
new_node.data=i;
printf("input string:");
scanf("%s",new_node.name);
push_stack(stack,new_node);
}
for(i=0;i<5;i++)
{
ret=pop_stack(stack,&pop_node);
if(ret==POP_NO)
{
printf("POP_ERROR!!!\n");
}
else
{
printf("pop_node.data=%d ",pop_node.data);
printf("pop_node.name=%s\n",pop_node.name);
}
}
}
int pop_stack(Link stack,LNode * pop_node)
{
int ret=is_empty(stack);
if(ret==EMPTY_OK)
return POP_NO;
else
{
LNode * p = stack->next;
pop_node->sdata.data=p->sdata.data;
strcpy(pop_node->sdata.name,p->sdata.name);
stack->next=p->next;
free(p);
return POP_OK;
}
}
void push_stack(Link stack,Stack new_node)
{
LNode * p=NULL;
int ret=create_node(&p);
if(ret==MALLOC_NO)
{
printf("push_stack error!!!\n");
exit(-1);
}
else
{
p->sdata.data=new_node.data;
strcpy(p->sdata.name,new_node.name);
p->next=stack->next;
stack->next=p;
printf("push_stack success!!!\n");
}
}
int is_empty(Link stack)
{
if(stack->next==NULL)
{
printf("stack is NULL!!!\n");
return EMPTY_OK;
}
else
return EMPTY_NO;
}
void create_stack(Link * stack)
{
int ret=create_node(stack);
if(ret==MALLOC_NO)
{
printf("create_stack error!!!\n");
exit(-1);
}
else
{
printf("create_stack success!!!\n");
(*stack)->next=NULL;
}
}
int create_node(LNode ** new_node)
{
*new_node=(LNode *)malloc(sizeof(LNode));
if(!(*new_node))
{
printf("create_node error!!!\n");
return MALLOC_NO;
}
else
return MALLOC_OK;
}