建立链栈,并在链栈上实现栈的初始化,判空,入栈和出栈操作。请用c语言完整写出以上代码
时间: 2024-10-09 09:08:14 浏览: 39
Java定义栈结构,并实现入栈、出栈操作完整示例
在C语言中,我们可以使用链表数据结构来创建一个动态的链栈。这里是一个简单的链栈结构及基本操作的实现:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义链栈节点结构
typedef struct Node {
int data;
struct Node* next;
} StackNode;
// 初始化链栈
StackNode* initStack() {
StackNode* stack = (StackNode*)malloc(sizeof(StackNode));
if (!stack) {
printf("Memory allocation failed.\n");
return NULL;
}
stack->next = NULL; // 栈顶元素初始为空
return stack;
}
// 判定链栈是否为空
int isEmpty(StackNode* stack) {
return stack->next == NULL;
}
// 入栈操作(将元素添加到栈顶)
void push(StackNode** stack, int value) {
StackNode* newNode = (StackNode*)malloc(sizeof(StackNode));
if (!newNode) {
printf("Memory allocation failed for new node.\n");
return;
}
newNode->data = value;
newNode->next = *stack;
*stack = newNode;
}
// 出栈操作(弹出并返回栈顶元素)
int pop(StackNode** stack) {
if (isEmpty(stack)) {
printf("Stack is empty.\n");
return -1; // 返回错误代码表示栈空
}
StackNode* temp = *stack;
int topValue = temp->data;
*stack = (*stack)->next; // 移除栈顶节点
free(temp); // 释放栈顶节点内存
return topValue;
}
int main() {
StackNode* stack = initStack();
if (stack != NULL) {
push(&stack, 1);
push(&stack, 2);
push(&stack, 3);
printf("Top element: %d\n", pop(&stack)); // 输出:3
printf("Top element after pop: %d\n", pop(&stack)); // 输出:2
if (isEmpty(stack)) {
printf("Stack is now empty.\n");
} else {
printf("Stack not empty!\n");
}
}
return 0;
}
```
这段代码首先定义了一个链栈节点结构,然后实现了初始化、判断空、入栈和出栈的操作。在`main`函数中演示了如何使用这些操作。
阅读全文