当前位置:首页C语言 > 正文

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
野牛程序员教少儿编程与信息学竞赛-微信|电话:15892516892
相关推荐

最新推荐

热门点击