数据结构:

    第一个关于栈的小程序:

#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>
#include<stdbool.h>
typedef struct Node
{
    int data;
    struct Node *next;
}node,*pnode ;
typedef struct Stack
{
    pnode top;
    pnode bottom
}Stack,*pstack;
void init(pstack s)
{
    s->top=(pnode)malloc(sizeof(node));
    if(s->top==NULL)
    {
        printf("内存分配失败");
        exit(-1);
    }
    else
    {
        s->bottom=s->top;//直接只这样写会有问题,还要将指针域清空
        s->top->next=NULL;
    }
}
    void push(pstack s,int i)
    {
     pnode L=(pnode)malloc(sizeof(node));//建立一个新节点
     L->data=i;
     L->next=s->top;
     s->top=L;
    }
     bool isEmpty(pstack s)
    {
        if(s->top==s->bottom)
            return true;
        else
            return false;
    }
    bool pop(pstack L,int* e)//出栈一次,并把出栈的元素存到e中
    {
        pnode r=(pnode)malloc(sizeof(node));
        if(isEmpty(L))
           //exit(-1);
           return false;
        else
            {
            r=L->top;
            L->top=L->top->next;
            *e=r->data;
            free(r);
            r=NULL;
            return true;
            }
    }
    void traverse(pstack s)//遍历输出
    {
      pnode p=(pnode)malloc(sizeof(node));
      p=s->top;
      while(p!=s->bottom)
      {
          printf("%d   ",p->data);
          p=p->next;
      }
      printf("\n");
    }
void main()
{
    Stack s;
    int e;
   init(&s);
   push(&s,1);
   push(&s,2);
   push(&s,3);
   push(&s,4);
   traverse(&s);
   pop(&s,&e);
   printf("%d",e);
}