链栈是一种栈的实现方式,使用链表来存储栈中的元素。下面是链栈的基本操作的C语言实现:
#include <stdio.h>
#include <stdlib.h>
// 定义链栈的结点结构
typedef struct Node {
int data; // 存储数据
struct Node* next; // 指向下一个结点的指针
} Node;
// 定义链栈的结构
typedef struct {
Node* top; // 栈顶指针
} Stack;
// 初始化链栈
void init(Stack* stack) {
stack->top = NULL;
}
// 判断链栈是否为空
int isEmpty(Stack* stack) {
return stack->top == NULL;
}
// 元素入栈
void push(Stack* stack, int data) {
Node* newNode = (Node*)malloc(sizeof(Node));
newNode->data = data;
newNode->next = stack->top;
stack->top = newNode;
}
// 元素出栈
int pop(Stack* stack) {
if (isEmpty(stack)) {
// 栈为空时出栈操作非法
printf("Stack is empty\n");
return -1;
}
Node* tempNode = stack->top;
int data = tempNode->data;
stack->top = tempNode->next;
free(tempNode);
return data;
}
// 获取栈顶元素
int peek(Stack* stack) {
if (isEmpty(stack)) {
// 栈为空时获取栈顶元素非法
printf("Stack is empty\n");
return -1;
}
return stack->top->data;
}
// 打印链栈中的元素
void display(Stack* stack) {
if (isEmpty(stack)) {
printf("Stack is empty\n");
return;
}
Node* currentNode = stack->top;
while (currentNode) {
printf("%d ", currentNode->data);
currentNode = currentNode->next;
}
printf("\n");
}
int main() {
Stack stack;
init(&stack);
push(&stack, 1);
push(&stack, 2);
push(&stack, 3);
push(&stack, 4);
display(&stack); // 输出:4 3 2 1
printf("Peek: %d\n", peek(&stack)); // 输出:4
printf("Pop: %d\n", pop(&stack)); // 输出:4
printf("Pop: %d\n", pop(&stack)); // 输出:3
display(&stack); // 输出:2 1
return 0;
}
以上是链栈的基本操作的C语言实现。代码中使用结构体 Node
表示链栈的节点,Stack
表示链栈本身。链栈的基本操作包括初始化链栈、判断链栈是否为空、元素入栈、元素出栈、获取栈顶元素和打印链栈中的元素。你可以根据需要进行相应的调用和扩展。