链表与栈队列结合
1. 链表实现栈和队列
在编程中,栈和队列是非常常见的数据结构,它们分别遵循后进先出(LIFO)和先进先出(FIFO)的原则。虽然栈和队列可以用数组来实现,但在某些情况下,使用链表作为底层数据结构更为灵活和高效。链表的优点在于它能够动态地调整大小,避免了数组在固定大小限制下的不便。
1.1 使用链表实现栈
栈的基本操作包括 push
(入栈)、 pop
(出栈)和 peek
(查看栈顶元素)。下面是使用链表实现栈的具体步骤:
- 定义一个结构体
StackNode
,用于表示栈的节点。 - 定义一个指针
top
,指向栈顶元素。 - 实现
push
操作:创建一个新的节点,将其数据域设置为目标值,并将其next
指针指向当前的栈顶节点,然后更新top
指针。 - 实现
pop
操作:检查栈是否为空,如果不为空,则取出栈顶元素,并更新top
指针。 - 实现
peek
操作:返回栈顶元素的数据域值,但不修改栈结构。
以下是具体的代码实现:
typedef struct StackNode {
int data;