链式栈实现:push、pop与循环栈操作

需积分: 15 2 下载量 105 浏览量 更新于2024-09-05 收藏 15KB DOCX 举报
"这篇资源主要介绍了栈的基本操作,包括链式栈的实现,以及循环栈的概念。通过C++代码展示了如何初始化、压入元素、弹出元素和打印栈中的元素。" 栈是一种特殊的线性数据结构,其特点是后进先出(LIFO)。在栈中,最近添加的元素(称为栈顶元素)是第一个被删除的元素。栈广泛应用于计算机科学的各个领域,如表达式求值、递归调用等。 链式栈是栈的一种实现方式,它使用链表来存储元素。在这个例子中,`Stack` 结构体包含了两个指针,`top` 指向栈顶元素,`head` 指向栈底元素。`Node` 结构体表示链表节点,包含一个整型数据 `data` 和指向下一个节点的指针 `next`。 `init` 函数用于初始化栈,它创建了一个新的栈顶节点,并将 `top` 和 `head` 都指向这个节点。初始时,栈底节点的数据设为0,且没有下一个节点。 `push` 函数实现了将元素压入栈的操作。首先,创建一个新的节点,然后遍历链表找到最后一个节点(即当前栈顶),将新节点的 `next` 指向它,并更新栈顶指针 `top`。 `pop` 函数用于弹出栈顶元素。在检查栈是否为空后,如果栈不为空且栈顶只有一个元素,那么弹出该元素(将其数据赋给 `i`),并更新栈顶指针 `top` 指向栈底。注意,当栈只有一个元素时,弹出操作后栈变为空。 `Print` 函数用于打印栈中的所有元素,从栈顶开始遍历链表并输出每个节点的数据。 在主函数 `main` 中,用户可以选择执行压入、弹出或打印栈的操作。用户输入的数字对应于不同的操作,直到输入0退出循环。每个操作后,都会再次询问用户选择下一次的操作。 循环栈是另一种栈的实现,它使用数组实现,但是通过巧妙的索引管理,使得栈可以在有限的空间内实现无限次的压入和弹出。在循环栈中,当栈满时,下一个元素会“循环”回到数组的开头。然而,这个资源没有具体涉及循环栈的实现,只提到了链式栈。