目录一、栈的概念二、栈的实现1.引入头文件、定义栈的结构、声明栈的方法2.栈的方法实现3.访问栈中全部元素一、栈的概念栈一种特殊的线性表其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端称为栈顶另一端称为栈底。栈中的数据元素遵循后进先出LIFOLast In First Out的原则。压栈栈的插入操作叫做进栈/压栈/入栈。入数据在栈顶。出栈栈的删除操作叫做出栈。出数据也在栈顶。二、栈的实现栈的实现一般可以使用数组或链表实现相对而言数组的结构实现更优一些因为数组在尾上插入数据的代价比较小。以下是支持动态增长的顺序栈的C语言实现代码1.引入头文件、定义栈的结构、声明栈的方法#includestdio.h #includestdlib.h #includestdbool.h #includeassert.h typedef int STDataType; typedef struct Stack { STDataType* a; int top; // 栈顶 int capacity; // 容量 }ST; // 初始化 void STInit(ST* pst); // 销毁 void STDestroy(ST* pst); // 入栈 void STPush(ST* pst, STDataType data); // 出栈 void STPop(ST* pst); // 获取栈顶元素 STDataType STTop(ST* pst); // 判空 bool STEmpty(ST* pst); // 获取元素个数 int STSize(ST* pst);2.栈的方法实现#include Stack.h // 初始化 void STInit(ST* pst) { assert(pst); pst - a NULL; // top指向栈顶元素的下一个位置 pst-top 0; pst-capacity 0; } // 销毁 void STDestroy(ST* pst) { free(pst-a); pst-a NULL; pst-capacity 0; } // 入栈 void STPush(ST* pst, STDataType data) { assert(pst); if (pst-top pst-capacity) { int newCapacity pst-capacity 0 ? 4 : pst-capacity * 2; STDataType* tmp (STDataType*)realloc(pst-a, 2 * newCapacity * sizeof(STDataType)); if (tmp NULL) { perror(realloc fail); return; } pst-a tmp; pst-capacity newCapacity; } pst-a[pst-top] data; pst-top; } // 出栈 void STPop(ST* pst) { assert(pst); assert(pst-top 0); pst-top--; } // 获取栈顶元素 STDataType STTop(ST* pst) { assert(pst); assert(pst-top 0); return pst-a[pst-top-1]; } // 判空 bool STEmpty(ST* pst) { assert(pst); return pst-top 0; } // 获取元素个数 int STSize(ST* pst) { assert(pst); return pst-top; }3.访问栈中全部元素// 访问栈中全部元素 while (!STEmpty(s)) { printf(%d ,STTop(s)); STPop(s); }完