/*
*链栈的创建
*栈满的判断
*栈空的判断
*入栈
*出栈
*取栈顶元素
*/
#include<stdio.h>
#include<stdlib.h>
typedef int element;
typedef struct link_stack
{
element data;
struct link_stack *next;
}Link_Stack;
Link_Stack*creat_linkstack();//链栈的创建
int empty_link_stack(Link_Stack*top);//判断栈空
int push_stack(Link_Stack*top,element x);//入栈
int pop_link_stack(Link_Stack*top,element*x);//出栈操作
int getdata_linkstack(Link_Stack*top,int *x);//取栈顶元素
void main()
{
Link_Stack*top;
element x,y,z;
top=creat_linkstack();
if(top==NULL)
printf("链栈创建失败:\n");
else
printf("链栈创建成功:\n");
if(empty_link_stack(top))
printf("链栈为空:\n");
else
printf("链栈不为空:\n");
printf("请输入要入栈的数据:\n");
scanf("%d",&y);
if(push_stack(top,y))
printf("入栈成功:\n");
else
printf("入栈失败:\n");
if(pop_link_stack(top,&x))
printf("出栈的数据为:%d\n",x);
else
printf("出栈失败:\n");
if( getdata_linkstack(top,&z))
printf("栈顶元素为:%d",z);
else
printf("取栈顶元素失败:\n");
}
Link_Stack*creat_linkstack()//链栈的创建
{
Link_Stack*top,*p;
element x;
top=(Link_Stack*)malloc(sizeof(Link_Stack));
if(top==NULL)
return NULL;
else
top->next=NULL;
printf("请输入数据:\n");
scanf("%d",&x);
while(x!=0)
{
p=(Link_Stack*)malloc(sizeof(Link_Stack));
if(top==NULL)
return NULL;
else
{
p->data=x;
p->next=top->next;
top->next=p;
scanf("%d",&x);
}
}
return top;
}
int empty_link_stack(Link_Stack*top)//判断栈空
{
if(top->next==NULL)
return 1;
else
return 0;
}
int push_stack(Link_Stack*top,element x)//入栈
{
Link_Stack*node;
node=(Link_Stack*)malloc(sizeof(Link_Stack));
if(node==NULL)
return 0;
else
{
node->data=x;
node->next=top->next;
top->next=node;
return 1;
}
}
int pop_link_stack(Link_Stack*top,element*x)//出栈操作
{
if(top->next==NULL)
return 0;
else
{
Link_Stack*node;
node=top->next;
*x=node->data;
top->next=node->next;
free(node);
return 1;
}
}
int getdata_linkstack(Link_Stack*top,int *x)//取栈顶元素
{
if(top->next==NULL)
return 0;
else
{
Link_Stack*node;
node=top->next;
*x=node->data;
return 1;
}
}
版权声明:本文为qq_44213634原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。