实现链栈的入栈和出栈C语言代码
时间: 2024-10-18 22:06:50 浏览: 54
在C语言中,链式栈(Linked Stack)是一种利用链表结构实现的栈数据结构。下面是简单的链栈入栈(push)和出栈(pop)操作的示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义栈节点结构体
typedef struct Node {
int data;
struct Node* next; // 指向下一个节点的指针
} StackNode;
// 初始化空栈
StackNode* initStack() {
return NULL;
}
// 入栈操作 (push)
void push(StackNode** top, int value) {
StackNode* newNode = (StackNode*)malloc(sizeof(StackNode));
if (newNode == NULL) {
printf("Memory allocation failed.\n");
return;
}
newNode->data = value;
newNode->next = *top;
*top = newNode;
}
// 出栈操作 (pop)
int pop(StackNode** top) {
if (*top == NULL) {
printf("Stack is empty.\n");
return -1; // 返回特殊值表示栈为空
}
int poppedValue = (*top)->data;
StackNode* temp = *top;
*top = (*top)->next;
free(temp); // 释放已弹出节点的内存
return poppedValue;
}
// 主函数演示栈的使用
int main() {
StackNode* stackTop = initStack();
// 入栈
push(&stackTop, 1);
push(&stackTop, 2);
push(&stackTop, 3);
// 出栈
int value = pop(&stackTop);
printf("Popped value: %d\n", value);
return 0;
}
```
在这个代码中,`initStack()`用于初始化一个空栈,`push()`将元素添加到栈顶,`pop()`则从栈顶移除并返回元素。注意,在实际应用中,为了处理特殊情况如栈空,需要对函数的边界情况进行检查。
阅读全文