用c语言写一个链栈的简单的完整代码
时间: 2024-09-26 17:05:47 浏览: 21
当然可以,下面是一个简化的链栈实现,包含基本的创建、插入、删除和查看顶部元素的功能:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义链栈节点结构
typedef struct StackNode {
int data;
struct StackNode* next;
} StackNode;
// 初始化链栈
StackNode* createStack() {
StackNode* top = NULL;
return top;
}
// 插入元素到链栈顶部
void push(StackNode** top, int value) {
StackNode* newNode = (StackNode*)malloc(sizeof(StackNode));
newNode->data = value;
newNode->next = *top;
*top = newNode;
}
// 删除并返回顶部元素(如果存在)
int pop(StackNode** top) {
if (*top == NULL) {
printf("Stack is empty");
return -1;
}
int data = (*top)->data;
StackNode* temp = *top;
*top = (*top)->next;
free(temp);
return data;
}
// 查看但不删除顶部元素
int peek(StackNode* top) {
if (top == NULL) {
printf("Stack is empty");
return -1;
}
return top->data;
}
// 判断链栈是否为空
int isEmpty(StackNode* top) {
return top == NULL;
}
// 测试代码
int main() {
StackNode* stack = createStack();
// 插入元素
push(&stack, 10);
push(&stack, 20);
push(&stack, 30);
// 查看栈顶元素
int topData = peek(stack);
printf("Top element is %d\n", topData); // 输出 30
// 删除并查看栈顶元素
topData = pop(&stack);
printf("Popped element was %d\n", topData); // 输出 30
// 检查栈是否为空
if (isEmpty(stack)) {
printf("Stack is now empty.\n");
} else {
printf("Stack is not empty.\n");
}
return 0;
}
```
这个例子展示了链栈的基本操作,但请注意,在实际应用中,你需要处理更多的边缘情况,并可能考虑增加错误处理和内存管理功能。