C语言实现顺序结构栈的代码示例

0 下载量 144 浏览量 更新于2024-08-30 收藏 149KB PDF 举报
"该资源提供了一段C语言实现顺序结构栈的代码,包括栈的创建、销毁、清空、获取高度、获取大小、检测空栈、压栈、出栈、获取栈顶元素以及遍历栈内元素等操作。作者为wid,编写日期为2013年10月29日。" 在C语言中,实现数据结构往往需要自定义结构体和相应的操作函数。这段代码中,顺序栈是通过数组实现的,它包含了栈底和栈顶两个指针,以及栈的高度和总大小。顺序栈的每个元素是`ElemType`类型,这里定义为包含两个整型成员(`x`和`y`)的结构体`Point2D`,可以理解为二维坐标点。 首先,我们有栈的结构体`ArrStack`,包含以下成员: 1. `ElemType *btm`:表示栈底的指针,初始时指向数组的第一个元素。 2. `ElemType *top`:表示栈顶的指针,初始时与`btm`相同。 3. `int height`:记录栈的高度,即当前栈中的元素个数。 4. `int size`:记录栈的总大小,即数组的长度。 接着,代码中声明了一系列的栈操作函数: 1. `CreateStack(int nSize)`:创建一个大小为`nSize`的栈,需要分配内存并初始化栈结构体。 2. `DestroyStack(ArrStack *pStack)`:销毁栈,释放内存。 3. `ClearStack(ArrStack *pStack)`:清空栈,将栈顶指针重置为栈底。 4. `GetHeight(ArrStack *pStack)`:返回栈的高度。 5. `GetSize(ArrStack *pStack)`:返回栈的总容量。 6. `IsEmpty(ArrStack *pStack)`:检查栈是否为空,如果`height`为0则为空栈。 7. `Push(ArrStack *pStack, ElemType *pt)`:将元素`pt`压入栈,更新栈顶指针和栈高度。 8. `Pop(ArrStack *pStack, ElemType *pt)`:将栈顶元素出栈到`pt`,并更新栈顶指针和栈高度。 9. `GetTop(ArrStack *pStack, ElemType *pt)`:获取栈顶元素到`pt`,不改变栈的状态。 10. `ForEachStack(ArrStack *pStack, void (*func)(ElemType *pt))`:从栈底到栈顶遍历每个元素,调用传入的函数处理每个元素。 11. `ReForEachStack(ArrStack *pStack, void (*func)(ElemType *pt))`:从栈顶到栈底遍历每个元素,调用传入的函数处理每个元素。 这些函数的实现通常涉及指针操作、内存管理(如动态分配和释放)、边界条件检查以及对栈状态的更新。例如,`Push`函数需要确保栈未满,`Pop`函数需要检查栈非空,而遍历函数则需要正确地遍历数组区间。 通过这样的设计,我们可以方便地在C语言环境中实现一个功能完备的顺序栈,用于存储和处理二维坐标点或其他自定义类型的元素。