C语言链栈
作者:野牛程序员:2023-08-23 11:42:04C语言阅读 2854
链栈(Linked Stack)是一种基于链表实现的栈数据结构,它同样遵循后进先出(LIFO)的原则。在 C 语言中,链栈的操作比顺序栈稍微复杂,因为需要涉及链表的节点创建和管理。以下是一个简单的链栈的示例代码:
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
// 定义链表节点
typedef struct Node {
int data;
struct Node *next;
} Node;
// 定义链栈
typedef struct {
Node *top;
} LinkedStack;
// 初始化链栈
void initLinkedStack(LinkedStack *stack) {
stack->top = NULL;
}
// 判断链栈是否为空
bool isLinkedStackEmpty(LinkedStack *stack) {
return stack->top == NULL;
}
// 入栈操作
void pushLinkedStack(LinkedStack *stack, int value) {
Node *newNode = (Node *)malloc(sizeof(Node));
newNode->data = value;
newNode->next = stack->top;
stack->top = newNode;
}
// 出栈操作
int popLinkedStack(LinkedStack *stack) {
if (isLinkedStackEmpty(stack)) {
printf("链栈为空,无法出栈\\n");
return -1; // 返回一个特殊值表示出栈失败
}
Node *temp = stack->top;
int value = temp->data;
stack->top = stack->top->next;
free(temp);
return value;
}
// 获取链栈顶元素
int peekLinkedStack(LinkedStack *stack) {
if (isLinkedStackEmpty(stack)) {
printf("链栈为空\\n");
return -1; // 返回一个特殊值表示栈为空
}
return stack->top->data;
}
// 清空链栈
void clearLinkedStack(LinkedStack *stack) {
while (!isLinkedStackEmpty(stack)) {
popLinkedStack(stack);
}
}
// 销毁链栈
void destroyLinkedStack(LinkedStack *stack) {
clearLinkedStack(stack);
}
int main() {
LinkedStack stack;
initLinkedStack(&stack);
pushLinkedStack(&stack, 10);
pushLinkedStack(&stack, 20);
pushLinkedStack(&stack, 30);
printf("链栈顶元素:%d\\n", peekLinkedStack(&stack));
printf("出栈元素:%d\\n", popLinkedStack(&stack));
printf("出栈元素:%d\\n", popLinkedStack(&stack));
printf("链栈顶元素:%d\\n", peekLinkedStack(&stack));
destroyLinkedStack(&stack);
return 0;
}在这段代码中,使用了链表的方式实现链栈。Node 结构表示链表节点,LinkedStack 结构表示链栈。链栈的操作与顺序栈类似,但需要特别注意内存分配和释放。同样,这只是链栈的一个简单示例,实际应用中可能需要更多的错误检查和优化。链栈适用于存储动态大小的数据。
野牛程序员教少儿编程与信息学奥赛-微信|电话:15892516892

- 上一篇:C语言数制转换
- 下一篇:C语言线性表之循环链表
