链栈的入栈和出栈操作完整代码
时间: 2024-11-23 16:24:16 浏览: 6
链栈(Linked Stack)是基于链表实现的一种特殊的数据结构,它的入栈(push)和出栈(pop)操作相对简单。这里给出一个简单的单链表作为栈的基础版本,仅使用头结点表示栈顶:
```c
// 定义链栈节点结构
typedef struct Node {
int data; // 数据域
struct Node* next; // 指向下一个节点的指针
} Node;
// 初始化空栈
Node* createStack() {
return NULL;
}
// 入栈操作(push)
void push(Node** top, int value) {
if (*top == NULL) { // 如果栈为空,创建新的头部
*top = (Node*)malloc(sizeof(Node));
(*top)->data = value;
(*top)->next = NULL;
} else {
Node* newNode = (Node*)malloc(sizeof(Node)); // 创建新节点
newNode->data = value;
newNode->next = *top; // 将新节点添加到当前顶部
*top = newNode; // 更新栈顶指针
}
}
// 出栈操作(pop)
int pop(Node** top) {
if (*top == NULL) {
printf("Stack is empty.\n");
return -1; // 返回错误码表示栈已空
} else {
int value = (*top)->data; // 保存要移除的值
Node* temp = *top; // 临时保存当前栈顶
*top = (*top)->next; // 移除栈顶并更新栈顶指针
free(temp); // 释放已被移除的节点
return value; // 返回删除的元素
}
}
```
这个代码实现了链栈的基本功能,但在实际应用中,还需要考虑异常处理和性能优化,例如在频繁出栈的情况下,为了提高效率,可以考虑采用双向链表或者双端队列(deque)。
阅读全文