C语言链栈
作者:野牛程序员:2023-08-23 11:42:04C语言阅读 2666
链栈(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语言线性表之循环链表