`// 数据结构 栈的实现 C语言， 只能从头部储存和销毁数据# include <stdio.h># include <stdlib.h># include <malloc.h>// 线性储存部分typedef struct NONE{    int data;    struct NONE * pNext;}None, * pNone;// 栈的头部和底部typedef struct stack{    pNone top;    pNone bottom;}St, * pSt;// 创建一个空栈void Create_Stack(pSt stack);// 压栈void Push_Stack(pSt stack, int val);// 出栈, 返回出栈的那个节点的数据int Out_Stack(pSt stack);// 计算栈中数据个数int Compute_Stack(pSt stack);// 栈的遍历void Travel_Stack(pSt stack); int main(void){    St stack;    Create_Stack(&stack);    Push_Stack(&stack, 1);    Push_Stack(&stack, 1);    Push_Stack(&stack, 1);    Push_Stack(&stack, 1);    int cnt = Compute_Stack(&stack);    printf("此时栈中共有%d个元素！\n", cnt);    Out_Stack(&stack);    cnt = Compute_Stack(&stack);    printf("此时栈中共有%d个元素！\n", cnt);    Travel_Stack(&stack);        return 0;}void Create_Stack(pSt stack){    stack->top = (pNone)malloc(sizeof(None));    if (NULL == stack->top)    {        printf("动态内存分配失败！\n");        exit(-1);    }    else    {        stack->bottom = stack->top;        stack->top->pNext = NULL;    }    return;}void Push_Stack(pSt stack, int val){    pNone pNew = (pNone)malloc(sizeof(None));    if (NULL == pNew)    {        printf("动态内存分配失败！\n");        exit(-1);    }    pNew->data = val;    pNew->pNext = stack->top;    stack->top = pNew;    return;}int Out_Stack(pSt stack){    int val;    pNone pOut;    pOut = stack->top;    val = pOut->data;    stack->top = pOut->pNext;    return val;}int Compute_Stack(pSt stack){    int cnt = 0;  // 记录元素个数    pNone pTemp = stack->top;    while (pTemp != stack->bottom)    {        ++cnt;        pTemp = pTemp->pNext;    }    return cnt;}void Travel_Stack(pSt stack){    pNone pTemp = stack->top;    while (pTemp != stack->bottom)    {        printf("%d\n", pTemp->data);        pTemp = pTemp->pNext;    }        return;}`