链式栈实现(C语言描述)

简介: 这篇文章介绍了如何在C语言中实现链式栈,包括节点和栈的创建、入栈、出栈、获取栈顶元素、判断栈是否为空以及销毁栈的操作。

链式栈实现

#include <stdio.h>
#include <stdlib.h>
/*
    入栈: 表头法插入
    出栈: 表头法删除
*/
typedef struct Node_tlg {
    int data;
    struct Node_tlg* next;
}NODE,*LPNODE;

typedef struct {
    LPNODE stackTop;
    int size;
}STACK,*LPSTACK;

//节点创建
LPNODE createNode(int data) {
    LPNODE newNode = (LPNODE)malloc(sizeof(NODE));
    if (NULL == newNode) {
        printf("节点内存申请失败!\n");
        return NULL;
    }
    newNode->data = data;
    newNode->next = NULL;
    return newNode;
}
//栈创建
LPSTACK createStack() {
    LPSTACK stack = (LPSTACK)malloc(sizeof(STACK));
    if (NULL == stack) {
        printf("栈内存申请失败!\n");
        return NULL;
    }
    stack->stackTop = NULL;
    stack->size = 0;
    return stack;
}
//入栈(头插法)
void push(LPSTACK stack,int data) {
    LPNODE newNode = createNode(data);
    newNode->next = stack->stackTop;
    stack->stackTop = newNode;
    stack->size++;
}
//出栈(头删法)
void pop(LPSTACK stack) {
    if (stack->stackTop == NULL) {
        printf("栈空\n");
        return;
    }
    /*LPNODE delNode = stack->stackTop;
    stack->stackTop = delNode->next;
    free(delNode);
    delNode = NULL;*/
    LPNODE nextNode = stack->stackTop->next;
    free(stack->stackTop);
    stack->stackTop = nextNode;
    stack->size--;
}
//返回栈顶元素
int top(LPSTACK stack) {
    if (empty(stack))
        return -1;
    return stack->stackTop->data;
}

//万金油函数
int empty(LPSTACK stack) {
    return stack->size == 0;
}
int stackSize(LPSTACK stack) {
    return stack->size;
}
//栈销毁
void destroyStack(LPSTACK* stack) {
    if (NULL != *stack) {
        while (!empty(*stack)) {
            pop(*stack);
        }
        free((*stack)->stackTop);
        (*stack)->stackTop = NULL;
        free(*stack);
        *stack = NULL;
    }
}

int main()
{
    LPSTACK stack = createStack();
    for (int i = 0; i < 5; i++)
    {
        push(stack, i);
    }
    while (!empty(stack)) {
        printf("%d\t", top(stack));
        pop(stack);
    }
    printf("\n");
    destroyStack(&stack);
    if (stack == NULL) {
        printf("栈销毁成功!\n");
    }

    system("pause");
    return 0;
}
相关文章
|
2月前
|
C语言
数组栈的实现(C语言描述)
本文介绍了如何在C语言中使用数组来实现栈的数据结构,包括栈的创建、入栈、出栈、获取栈顶元素、检查栈是否为空、获取栈的大小以及销毁栈等操作,并提供了相应的函数实现。
38 1
|
2月前
|
C语言
链式顺序表实现(C语言描述)
本文介绍了如何在C语言中实现链式顺序表,包括数据结构的定义、节点的创建、数据的插入和删除以及链表的打印和销毁。
43 2
|
2月前
|
C语言
顺序表数组法构建(C语言描述)
如何使用C语言通过数组方法构建有序顺序表,包括顺序表的创建、插入、删除和打印等。
21 2
|
2月前
|
C语言
无头链表再封装方式实现 (C语言描述)
如何在C语言中实现无头链表的再封装,包括创建节点和链表、插入和删除操作、查找和打印链表以及销毁链表的函数。
29 0
|
2月前
|
C语言
无头链表二级指针方式实现(C语言描述)
本文介绍了如何在C语言中使用二级指针实现无头链表,并提供了创建节点、插入、删除、查找、销毁链表等操作的函数实现,以及一个示例程序来演示这些操作。
35 0
|
6月前
|
测试技术 C语言
数据结构学习记录——树习题—Tree Traversals Again(题目描述、输入输出示例、解题思路、解题方法C语言、解析)
数据结构学习记录——树习题—Tree Traversals Again(题目描述、输入输出示例、解题思路、解题方法C语言、解析)
48 1
|
6月前
|
存储 算法 安全
数据结构学习记录——图应用实例-拯救007(问题描述、解题思路、伪代码解读、C语言算法实现)
数据结构学习记录——图应用实例-拯救007(问题描述、解题思路、伪代码解读、C语言算法实现)
47 0
|
7月前
|
机器学习/深度学习 C语言
利用C语言实例描述程序中的内聚和耦合
利用C语言实例描述程序中的内聚和耦合
75 1
|
算法 C语言
树的知识网络(数据结构与算法分析 C语言描述第4章)
树的知识网络(数据结构与算法分析 C语言描述第4章)
193 0
|
算法 C语言
散列 知识树状图(数据结构与算法分析 C语言描述)
散列 知识树状图(数据结构与算法分析 C语言描述)
67 0