// 数据结构 栈的实现 C语言, 只能从头部储存和销毁数据# include# include # include // 线性储存部分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;}