/*---------------------------------------------------------

 Title: Link Stack(链栈) 链栈-链式存储结构的栈 

 请先阅读教材67页, 2.3.2,2.3.4节, 栈的定义及基本运算

 (注意以下程序为简化后的,仅供入门学习之用)

----------------------------------------------------------*/

#include<stdio.h>

#include<stdlib.h>
//定义栈的结点结构
struct stacknode

{

   int data;//存放数据元素
   struct stacknode * next;//指针,指向下一个结点
};
//初始化栈
struct stacknode * InitialStack()

{

 struct stacknode * head;

 head=(struct stacknode *)malloc(sizeof(struct stacknode ));

 head->next=NULL;// 
 return head;

}
//入栈
void PushIntoStack(struct stacknode * head, int value)

{

    struct stacknode * p;

    p=(struct stacknode *)malloc(sizeof(struct stacknode ));

    p->data=value;

    p->next=head->next;

    head->next=p;

 }
//出栈
void PopFromStack(struct stacknode * head)

{

 struct stacknode * p;

 if(head->next==NULL)

   printf("Pop Failed \n");

 else

    {

    p=head->next;

     head->next=p->next;

    free(p);

     }

}
//显示栈中所有元素
void ShowStack(struct stacknode * head)

{

 struct stacknode * p;

 p=head->next;

 printf("\nShow all elements in stack:\n");

 while(p != NULL)

 {

  printf(" %d ",p->data);

  p=p->next;

 }

}

void main()

{

    struct stacknode * head1;

    head1=InitialStack();

    ShowStack(head1);

    PushIntoStack(head1,11);

    ShowStack(head1);

    PushIntoStack(head1,22);

    ShowStack(head1);

    PopFromStack(head1);

    ShowStack(head1);

}