C语言数据结构-链式栈

头文件:stack.h

#ifndef __STACK_H__
#define __STACK_H__

#include <stdio.h>
#include <stdlib.h>

typedef int DataType;

/* 链式栈节点类型 */
typedef struct staNode
{
    DataType data;
    struct staNode *pNext;
}StackNode;


/* 链式栈标签类型 */
typedef struct list
{
    StackNode *pTop;   //指向栈顶指针
    int cLen;
}StackList;

extern StackList *createSatckList();
extern int isEmptyStackList(StackList *);
extern int pushStackList(StackList *, DataType );
extern int popStackList(StackList *, DataType *);
extern DataType getStackTop(StackList *);
extern void clearStackList(StackList *);
extern void destroyStackList(StackList **);

extern void showStackList(StackList *pList);
#endif
源文件:stack.c main.c

stack.c

#include "stack.h"

StackList *createSatckList()
{
    StackList *pList = malloc(sizeof(StackList));
    if (NULL == pList)
    {
        perror("fail to malloc");
        return NULL;
    }
    pList->pTop = NULL;
    pList->cLen = 0;

    return pList;
}


int isEmptyStackList(StackList *pList)
{
    return pList->cLen == 0;
}

入栈:
int pushStackList(StackList *pList, DataType data)
{
    StackNode *pTmpNode = malloc(sizeof(StackNode));
    if (NULL == pTmpNode)
    {
        perror("fail to malloc");
        return -1;
    }
    pTmpNode->data = data;
    pTmpNode->pNext = NULL;

    pTmpNode->pNext = pList->pTop;
    pList->pTop = pTmpNode;
    pList->cLen++;

    return 0;
}

遍历:

void showStackList(StackList *pList)
{
    StackNode *pTmpNode = pList->pTop;
    while (pTmpNode != NULL)
    {
        printf("%d ", pTmpNode->data);
        pTmpNode = pTmpNode->pNext;
    }
    printf("\n");
}

出栈:
int popStackList(StackList *pList, DataType *pOutData)
{
    if (isEmptyStackList(pList))
    {
        return 0;
    }
    StackNode *pTmpNode = pList->pTop;
    if (NULL != pOutData)
    {
        *pOutData = pTmpNode->data;
    }
    pList->pTop = pTmpNode->pNext;
    free(pTmpNode);
    pList->cLen--;

    return 0;
}

DataType getStackTop(StackList *pList)
{
    if (!isEmptyStackList(pList))
    {
        return pList->pTop->data;
    }
}

void clearStackList(StackList *pList)
{
    while (pList->pTop != NULL)
    {
        popStackList(pList, NULL);
    }
}

销毁:

void destroyStackList(StackList **ppList)
{
    clearStackList(*ppList);
    free(*ppList);
    *ppList = NULL;
}
main.c

#include "stack.h"


int main(int argc, const char *argv[])
{
    StackList *pList = NULL;
    DataType OutData;

    pList = createSatckList();

    pushStackList(pList, 1);
    pushStackList(pList, 2);
    pushStackList(pList, 3);
    pushStackList(pList, 4);

    showStackList(pList);

    popStackList(pList, &OutData);
    printf("pop data = %d\n", OutData);

    showStackList(pList);

    destroyStackList(&pList);
    return 0;
}
 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.pswp.cn/news/907676.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

M4Pro安装ELK(ElasticSearch+LogStash+Kibana)踩坑记录

ElasticSearch安装&#xff0c;启动端口9200&#xff1a; docker pull elasticsearch:8.13.0 新增配置文件elasticsearch.yml&#xff1a; cd /opt/homebrew/etc/ mkdir elasticsearch_config cd elasticsearch_config vi elasticsearch.yml cluster.name: "nfturbo…

uni-app学习笔记十六-vue3页面生命周期(三)

uni-app官方文档页面生命周期部分位于页面 | uni-app官网。 本篇再介绍2个生命周期 1.onUnload&#xff1a;用于监听页面卸载。 当页面被关闭时&#xff0c;即页面的缓存被清掉时触发加载onUnload函数。 例如:在demo6页面点击跳转到demo4&#xff0c;在demo4页面回退不了到d…

Java互联网大厂面试:从Spring Boot到Kafka的技术深度探索

Java互联网大厂面试&#xff1a;从Spring Boot到Kafka的技术深度探索 在某家互联网大厂的面试中&#xff0c;面试官A是一位技术老兵&#xff0c;而被面试者谢飞机&#xff0c;号称有丰富的Java开发经验。以下是他们的面试情景&#xff1a; 场景&#xff1a;电商平台的后端开发…

机器学习算法——KNN

一、KNN算法简介 1.KNN思想 &#xff08;1&#xff09;K-近邻算法 根据你的“邻居”来推断你是什么类别 KNN算法思想&#xff1a;如果一个样本在特征空间&#xff08;训练集&#xff09;中的k个最相似的样本中的大多数属于某一个类别。则该样本也属于这个类别 &#xff08…

如何评估CAN总线信号质量

CAN总线网络的性能在很大程度上取决于其信号质量。信号质量差可能导致通信错误&#xff0c;进而引发系统故障、效率降低甚至安全隐患。因此&#xff0c;评估和确保CAN总线信号质量是维护系统健康和可靠性的关键。 在CAN总线网络中&#xff0c;数据通过双绞线上的差分信号传输。…

封装一个小程序选择器(可多选、单选、搜索)

组件 <template><view class"popup" v-show"show"><view class"bg" tap"cancelMultiple"></view><view class"selectMultiple"><view class"multipleBody"><view class&…

2.1HarmonyOS NEXT开发工具链进阶:DevEco Studio深度实践

HarmonyOS NEXT开发工具链进阶&#xff1a;DevEco Studio深度实践 在HarmonyOS NEXT全栈自研的技术体系下&#xff0c;DevEco Studio作为一站式开发平台&#xff0c;通过深度整合分布式开发能力&#xff0c;为开发者提供了从代码编写到多端部署的全流程支持。本章节将围绕多设…

LLMs之Tool:Workflow Use的简介、特点、安装和使用方法、以及案例应用

LLMs之Tool&#xff1a;Workflow Use的简介、特点、安装和使用方法、以及案例应用 目录 Workflow Use的简介 1、Workflow Use的特点 2、Workflow Use的愿景和路线图 Workflow Use的安装和使用方法 1、安装 2、使用方法 查看所有命令 从 Python 中使用&#xff1a; 启动…

二分法算法技巧-思维提升

背景&#xff1a; 在写力扣题目“搜素插入位置 ”时&#xff0c;发现二分法的一个细节点&#xff0c;打算记录下来&#xff0c;先看一张图&#xff1a; 我们知道&#xff0c;排序数组&#xff0c;更高效的是二分查找法~~~而二分法就是切割中间&#xff0c;定义left是最开始的&…

Python 训练营打卡 Day 40

训练和测试的规范写法 一、黑白图片的规范写法&#xff0c;以MNIST数据集为例 import torch import torch.nn as nn import torch.optim as optim from torchvision import datasets, transforms # 用于加载MNIST数据集 from torch.utils.data import DataLoader # 用于创建…

数据结构之栈:原理与常用方法

1. 栈的定义 Stack是Vector的一个子类&#xff0c;它实现标准的后进先出堆栈。Stack只定义了创建空堆栈的默认构造方法。&#xff08;实际上是实现了List接口&#xff0c;因为Vector是List的子类&#xff09;。 Stack() // 创建一个空栈 2. 栈的基本操作 // 压栈操作 publi…

鸿蒙OSUniApp 开发支持图片和视频的多媒体展示组件#三方框架 #Uniapp

使用 UniApp 开发支持图片和视频的多媒体展示组件 前言 在现代移动应用中&#xff0c;图片和视频已成为内容展示的主流形式。一个优秀的多媒体展示组件不仅能提升用户体验&#xff0c;还能增强产品的互动性和视觉冲击力。随着鸿蒙&#xff08;HarmonyOS&#xff09;生态的不断…

STM32CubeMX,arm-none-eabi-gcc简单试用

在windows下&#xff0c;为stm32系列单片机编程&#xff0c;keil有了免费的试用版&#xff0c;有很多开发板示例&#xff0c;给学习单片机编程带来很大的方便。 STM32CubeMX提供了stm32单片机的功能设置&#xff0c;在输出方式上给出了几种方式&#xff0c;有mdk&#xff08;k…

灌水论坛系统总体设计文档

一、实验题目 灌水论坛系统 二、实验目的 旨在通过一个相对完整且功能丰富的Web应用实例&#xff0c;全面地实践和巩固Web开发所需的各项核心技术和工程方法&#xff0c;从而提升其综合应用能力和解决实际开发问题的能力。它不仅仅是完成一个软件&#xff0c;更是一个学习、…

Android 13中 配置签名文件与内置相应的Apk

目录 1.问题场景 2.实现思路 3.将测试代码做成APK并配置签名 4.将apk内置到系统当中的方法 1.问题场景 在展讯平台中Android13的源码已知的情况下&#xff0c;客户写了一个测试类用于调用系统中的一些接口来检验一些功能。为了方便调试排查问题我首先的思路是将客户写的测试…

HarmonyOS 5 应用开发导读:从入门到实践

一、HarmonyOS 5 概述 HarmonyOS 5 是华为推出的新一代分布式操作系统&#xff0c;其核心设计理念是"一次开发&#xff0c;多端部署"。与传统的移动操作系统不同&#xff0c;HarmonyOS 5 提供了更强大的跨设备协同能力&#xff0c;支持手机、平板、智能穿戴、智慧屏…

C语言创意编程:用趣味实例玩转基础语法(4)

文章目录 0. 前言1. &#x1f308; 彩虹文字生成器1.1 程序效果展示1.2 完整代码解析1.3 关键技术详解1.3.1 Windows控制台API1.3.2 颜色编码1.3.3 安全输入1.3.4 跨平台考虑 2. &#x1f3b5; 简易音乐播放器2.1 程序效果展示2.2 完整代码解析2.3 关键技术详解2.3.1 Windows B…

【专题】神经网络期末复习资料(题库)

神经网络期末复习资料&#xff08;题库&#xff09; 链接&#xff1a;https://blog.csdn.net/Pqf18064375973/article/details/148332887?sharetypeblogdetail&sharerId148332887&sharereferPC&sharesourcePqf18064375973&sharefrommp_from_link 【测试】 Th…

Python训练营打卡 Day41

简单CNN 知识回顾 数据增强卷积神经网络定义的写法batch归一化&#xff1a;调整一个批次的分布&#xff0c;常用与图像数据特征图&#xff1a;只有卷积操作输出的才叫特征图调度器&#xff1a;直接修改基础学习率 卷积操作常见流程如下&#xff1a; 1. 输入 → 卷积层 → Batch…

leetcode216.组合总和III:回溯算法中多条件约束下的状态管理

一、题目深度解析与组合约束条件 题目描述 找出所有相加之和为n的k个数的组合&#xff0c;且满足以下条件&#xff1a; 每个数只能使用一次&#xff08;范围为1到9&#xff09;所有数字均为唯一的正整数组合中的数字按升序排列 例如&#xff0c;当k3&#xff0c;n9时&#…