C语言数据结构链栈的相关操作(创建、入栈、出栈、取栈顶元素、判栈空 栈满)

/*
*链栈的创建
*栈满的判断
*栈空的判断
*入栈
*出栈
*取栈顶元素
*/

#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版权协议,转载请附上原文出处链接和本声明。