链栈算法库构建

        学习贺利坚老师, 链栈 , 构建链栈算法库

数据结构之自建算法库——链栈_领会链栈结构和掌握链栈中的各种基本算法-CSDN博客文章浏览阅读3.9k次,点赞3次,收藏8次。本文针对数据结构基础系列网络课程(3):栈和队列中第4课时栈的链式存储结构及其基本运算实现。按照“0207将算法变程序”[视频]部分建议的方法,建设自己的专业基础设施算法库。链栈算法库采用程序的多文件组织形式,包括两个文件:      1.头文件:listack.h,包含定义链栈数据结构的代码、宏定义、要实现算法的函数的声明;#ifndef LISTACK_H_INCLUDED#defin_领会链栈结构和掌握链栈中的各种基本算法https://blog.csdn.net/sxhelijian/article/details/48463801        本人详细解析博客:

栈的链式存储结构-CSDN博客文章浏览阅读1.8k次,点赞7次,收藏34次。{//定义链表节点数据//定义指针域,单链表的后继指针域}LiStack;优点 :不存在栈满上溢的情况, 单链表可以一直插入。_栈的链式存储结构https://blog.csdn.net/qq_57484399/article/details/127215718

版本更新日志:

V1.0: 完成基本功能

目录

版本更新日志:

V1.0

chain_stack.h

chain_stack.cpp

main.cpp

演示运行结果:


V1.0

功能函数:

//(1) 初始化栈
void Init_chainStack(chain_Stack *&init_Stack);//(2) 销毁栈
void Destroy_chainStack(chain_Stack *&destroy_Stack);//(3) 输出展示链栈
void Display_chainStack(chain_Stack *show_Stack);//(4) 把一个数据压入链栈(入栈)
void Push_chainStack(chain_Stack *&push_Stack, ElemType push_value);//(5) 把栈顶的数据弹出链栈(出栈)
bool Pop_chainStack(chain_Stack *&pop_Stack, ElemType &pop_value);//(6)  判断链栈是否为空
bool Empty_chainStack(chain_Stack *judge_Stack);//(7)  求链栈中元素个数--栈长度
int Length_chainStack(chain_Stack *measure_Stack);//(8) 访问链栈的栈顶元素
bool GetTop_chainStack(chain_Stack *visited_Stack, ElemType &get_value);

chain_stack.h

#ifndef CHAIN_STACK_H_INCLUDE
#define CHAIN_STACK_H_INCLUDE#include <stdio.h>
#include <malloc.h>typedef char ElemType;typedef struct stack_Node  //链栈有必要有节点
{ElemType data;              //数据域struct stack_Node *next;    //指针域
}chain_Stack;//(1) 初始化栈
void Init_chainStack(chain_Stack *&init_Stack);//(2) 销毁栈
void Destroy_chainStack(chain_Stack *&destroy_Stack);//(3) 输出展示链栈
void Display_chainStack(chain_Stack *show_Stack);//(4) 把一个数据压入链栈(入栈)
void Push_chainStack(chain_Stack *&push_Stack, ElemType push_value);//(5) 把栈顶的数据弹出链栈(出栈)
bool Pop_chainStack(chain_Stack *&pop_Stack, ElemType &pop_value);//(6)  判断链栈是否为空
bool Empty_chainStack(chain_Stack *judge_Stack);//(7)  求链栈中元素个数--栈长度
int Length_chainStack(chain_Stack *measure_Stack);//(8) 访问链栈的栈顶元素
bool GetTop_chainStack(chain_Stack *visited_Stack, ElemType &get_value);#endif

chain_stack.cpp

#include "chain_stack.h"/**************************************************
函数名: Init_chainStack
功  能: 初始化一个链栈
参  数: chain_Stack *&init_Stack: 要进行初始化的链栈
返回值: 无
**************************************************/
void Init_chainStack(chain_Stack *&init_Stack)
{init_Stack = (chain_Stack *)malloc(sizeof(chain_Stack));init_Stack->next = NULL;
}
/**************************************************
函数名: Destroy_chainStack
功  能: 销毁链栈,释放空间
参  数: chain_Stack *&destroy_Stack:要销毁的链栈
返回值: 无
**************************************************/
void Destroy_chainStack(chain_Stack *&destroy_Stack)
{chain_Stack *destroyNode,*nextNode;destroyNode = destroy_Stack; //初始时指向头结点nextNode = destroyNode->next;while(nextNode != NULL){free(destroyNode);destroyNode = nextNode;nextNode = destroyNode->next;}free(destroyNode);
}
/**************************************************
函数名: Display_chainStack
功  能: 从栈顶到栈底,展示栈内元素
参  数: chain_Stack *show_Stack:要展示的链栈
返回值: 无
**************************************************/
void Display_chainStack(chain_Stack *show_Stack)
{chain_Stack *display_Node = show_Stack->next;while(display_Node != NULL){printf("%c ",display_Node->data);display_Node = display_Node->next;}printf("\n");
}/**************************************************
函数名: Push_chainStack
功  能: 把一个数据压入链栈(入栈)
参  数: (1)chain_Stack *&push_Stack:要压栈的链栈(2)ElemType push_value:压栈元素值
返回值: 无
**************************************************/
void Push_chainStack(chain_Stack *&push_Stack, ElemType push_value)
{//链栈不会满chain_Stack *push_Node;push_Node = (chain_Stack *)malloc(sizeof(chain_Stack));push_Node->data = push_value;      //新建链栈节点push_Node->next = push_Stack->next;//插入头结点之后, 为栈顶push_Stack->next = push_Node;  //头结点后继指向 栈顶
}/**************************************************
函数名: Pop_chainStack
功  能: 把栈顶的数据弹出链栈(出栈)
参  数: (1)chain_Stack *&pop_Stack: 要弹出栈顶元素的链栈(2)ElemType &pop_value: 出栈值
返回值: bool:是否弹出栈顶元素? true(栈非空):false(栈空)
**************************************************/
bool Pop_chainStack(chain_Stack *&pop_Stack, ElemType &pop_value)
{bool finished;//头结点之后元素进行出栈chain_Stack *pop_Node;if(pop_Stack->next == NULL){finished = false;}else    //非空,则出栈元素{pop_Node = pop_Stack->next; //指向出栈节点pop_value = pop_Node->data; //传回出栈节点数值pop_Stack->next = pop_Node->next; //弹出栈节点free(pop_Node);     //释放pop_Nodefinished = true;}return finished;
}
/**************************************************
函数名: Empty_chainStack
功  能: 判断链栈是否为空
参  数: (1)chain_Stack *judge_Stack:要进行判断的链栈
返回值: bool: 链栈是否为空? true(空):false(非空)
**************************************************/
bool Empty_chainStack(chain_Stack *judge_Stack)
{return (judge_Stack->next == NULL);
}/**************************************************
函数名: Length_chainStack
功  能: 链栈的元素个数
参  数: chain_Stack *measure_Stack:要进行计算的链栈
返回值: int: 元素个数
**************************************************/
int Length_chainStack(chain_Stack *measure_Stack)
{int counter = 0;chain_Stack *measure_Node;measure_Node = measure_Stack->next;while(measure_Node != NULL){counter++;measure_Node = measure_Node->next;}return counter;
}/**************************************************
函数名: GetTop_chainStack
功  能: 得到栈顶元素的值
参  数: (1)chain_Stack *visited_Stack:要进行访问的链栈(2)ElemType &get_value:得到的栈顶元素值
返回值: bool: 是否得到栈顶元素值 ? true(栈非空):false(栈空)
**************************************************/
bool GetTop_chainStack(chain_Stack *visited_Stack, ElemType &get_value)
{bool finished;if(visited_Stack->next == NULL){finished = false;}else{get_value = visited_Stack->next->data;finished = true;}return finished;
}

main.cpp

#include <stdio.h>
#include "chain_stack.h"int main()
{ElemType elem;chain_Stack *test_1;printf("\n(1)初始化链栈test_1\n");Init_chainStack(test_1);printf("\n(2)链栈为%s\n",(Empty_chainStack(test_1) ? "空":"非空"));printf("\n(3)依次进栈元素为 a,b,c,d,e,\n");Push_chainStack(test_1,'a');Push_chainStack(test_1,'b');Push_chainStack(test_1,'c');Push_chainStack(test_1,'d');Push_chainStack(test_1,'e');printf("\n(4)链栈为%s\n",(Empty_chainStack(test_1) ? "空":"非空"));printf("\n(5)链栈的长度:%d\n",Length_chainStack(test_1));printf("(6)从链栈顶到栈底的元素:");Display_chainStack(test_1);printf("\n(7)出链栈序列:\n");while(!Empty_chainStack(test_1)){Pop_chainStack(test_1,elem);printf("%c ",elem);}printf("\n(8)链栈为%s\n",(Empty_chainStack(test_1) ? "空":"非空"));printf("(9)释放链栈\n");Destroy_chainStack(test_1);return 0;
}

演示运行结果:

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

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

相关文章

安全开发实战(3)--存活探测与端口扫描

目录 安全开发专栏 前言 存活探测 端口扫描 方式一: 1.3.1 One 1.3.2 Two 1.3.3 批量监测 方式二: 1.3.1 One 1.3.2 Two 1.3.3 Three 1.3.4 扫描ip地址,提取出开放端口和协议 ​编辑 1.3.5 批量扫描(最终完成版) 总结 安全开发专栏 安全开发实战​http://t.csd…

【zabbix7】新版本尝鲜之connector

zabbix历史版本中&#xff0c;会使用python脚本&#xff0c;把zabbix的告警发送到kafka进行二次处理&#xff0c;或者使用filebeat把zabbix的Export的njson指标数据发送到kafka进行二次处理&#xff0c;然而在zabbix7中新增了新功能connector简化了操作并且可以根据tag进行区分…

详解Al作画算法原理

ChatGPT AI作画算法&#xff0c;又称为AI图像生成算法&#xff0c;是一种人工智能技术&#xff0c;它可以根据给定的输入自动生成图像。这类算法近年来变得非常流行&#xff0c;尤其是随着深度学习技术的发展。这里我将聚焦于目前最先进的一类AI作画算法&#xff0c;即生成对抗…

C++:构造函数与析构函数

目录 构造函数 构造函数的概念 析构函数的作用 自定义构造函数与默认构造函数 自定义构造函数 默认构造函数 调用自定义构造函数 析构函 自定义析构函数和默认构造函数 自定义构造函数 默认析构函数 构造函数 构造函数的概念 我们通常的函数是都需要有返回值的,但…

布局香港之零售小店篇 | 香港一人小企与连锁超市的竞争

近年来&#xff0c;内地品牌入驻香港市场开拓业务已成大势所趋。香港特区政府早前公布的「2023年有香港境外母公司的驻港公司按年统计调查」显示&#xff0c;2023年母公司在海外及内地的驻港公司数量高达9039家。内地品牌在香港的成功落地&#xff0c;不仅为香港市民带来了丰富…

【第3节】“茴香豆“:搭建你的 RAG 智能助理

目录 1 基础知识1.1.RAG技术的概述1.2 RAG的基本结构有哪些呢&#xff1f;1.3 RAG 工作原理&#xff1a;1.4 向量数据库(Vector-DB )&#xff1a;1.5 RAG常见优化方法1.6RAG技术vs微调技术 2、茴香豆介绍2.1应用场景2.2 场景难点2.3 茴香豆的构建&#xff1a; 3 论文快读 1 基础…

01.JAVAEE初阶之计算机如何工作

1.一台机器如何组成 冯诺依曼体系 CPU 中央处理器: 进行算术运算和逻辑判断.存储器: 分为外存和内存, 用于存储数据(使用二进制方式存储)输入设备: 用户给计算机发号施令的设备.输出设备: 计算机个用户汇报结果的设备. 针对存储空间 硬盘 > 内存 >> CPU针对数据访问…

十大排序算法详解-上篇:比较排序算法【python 动态图解】

作者介绍&#xff1a;10年大厂数据\经营分析经验&#xff0c;现任大厂数据部门负责人。 会一些的技术&#xff1a;数据分析、算法、SQL、大数据相关、python 欢迎加入社区&#xff1a;码上找工作 作者专栏每日更新&#xff1a; LeetCode解锁1000题: 打怪升级之旅 python数据分析…

nginx 配置 SSL 证书实现 https 访问

nginx 配置SSL证书实现https访问 1. SSL 证书简介与获取1.1 SSL 证书介绍1.2 获取 SSL 证书 2. nginx 配置 SSL 文件2.1 SSL 文件放置与配置文件修改2.1.1 文件配置2.1.2 强制 https 访问 2.2 验证配置结果 同步发布在个人笔记 nginx 配置 SSL 证书实现 https 访问 配置好 ngi…

LabVIEW和MES系统的智能化车间数据对接

LabVIEW和MES系统的智能化车间数据对接 随着工业4.0时代的到来&#xff0c;智能制造成为推动制造业高质量发展的重要手段。其中&#xff0c;数字化车间作为智能制造的重要组成部分&#xff0c;其设计与实现至关重要。在数字化车间环境下&#xff0c;如何利用LabVIEW软件与MES系…

求最小公倍数

两种方法 1.直接求 import java.util.Scanner;/*** HJ108 求最小公倍数 - 简单*/ public class HJ108 {public static void main(String[] args) {Scanner sc new Scanner(System.in);while(sc.hasNextInt()){int n1 sc.nextInt();int n2 sc.nextInt();for(int i 1; i &l…

OAuth2、JWT

文章目录 OAuth2JWT OAuth2 官网&#xff1a; https://oauth.net/2/ 在 RFC 6749 中说明 1、资源所有者 resource owner&#xff0c; 如 github 用户 2、客户端/第三方应用 client&#xff0c; 如 支持github 登录的 csdn 3、资源服务器 resource server&#xff0c; 如 4、授…

【高阶数据结构】B树 {B树的概念;B树的实现:节点设计,查找,插入,遍历,删除;B树的性能分析;B+树和B*树;B树的应用}

一、常见的搜索结构 以上结构适合用于数据量相对不是很大&#xff0c;能够一次性存放在内存中&#xff0c;进行数据查找的场景。如果数据量很大&#xff0c;比如有100G数据&#xff0c;无法一次放进内存中&#xff0c;那就只能放在磁盘上了&#xff0c;如果放在磁盘上&#xff…

Linux系统安全:从面临的攻击和风险到安全加固、安全维护策略(文末有福利)

1. Linux面临的攻击与风险 1.1. Linux系统架构 Linux系统架构解读&#xff1a; 用户之间隔离内核态与用户态之间隔离用户进程一般以低权限用户运行系统服务一般以特权服务运行用户态通过系统调用进入内核态内核对系统资源进行管理和分配 1.2. Linux系统常见安全威胁 1.2.1.…

Qt/C++音视频开发71-指定mjpeg/h264格式采集本地摄像头/存储文件到mp4/设备推流/采集推流

一、前言 用ffmpeg采集本地摄像头&#xff0c;如果不指定格式的话&#xff0c;默认小分辨率比如640x480使用rawvideo格式&#xff0c;大分辨率比如1280x720使用mjpeg格式&#xff0c;当然前提是这个摄像头设备要支持这些格式。目前市面上有一些厂家做的本地设备支持264格式&am…

目标检测——YOLOv7算法解读

论文&#xff1a;YOLOv7: Trainable bag-of-freebies sets new state-of-the-art for real-time object detectors (2022.7.6) 作者&#xff1a;Chien-Yao Wang, Alexey Bochkovskiy, Hong-Yuan Mark Liao 链接&#xff1a;https://arxiv.org/abs/2207.02696 代码&#xff1a;h…

C++_第八周做题总结

id:45 A.Equation(类与对象构造) 题目描述 建立一个类Equation&#xff0c;表达方程ax2bxc0。类中至少包含以下方法&#xff1a; 无参构造&#xff08;abc默认值为1.0、1.0、0&#xff09;与有参构造函数&#xff0c;用于初始化a、b、c的值&#xff1b; set方法&#xff0c;…

VS2019中配置C++ OpenCV 4.5.4完整指南

⭐️我叫忆_恒心&#xff0c;一名喜欢书写博客的在读研究生&#x1f468;‍&#x1f393;。 如果觉得本文能帮到您&#xff0c;麻烦点个赞&#x1f44d;呗&#xff01; 近期会不断在专栏里进行更新讲解博客~~~ 有什么问题的小伙伴 欢迎留言提问欧&#xff0c;喜欢的小伙伴给个三…

STM32标准库ADC和DMA知识点总结

目录 前言 一、ADC模数转换器 &#xff08;1&#xff09;AD单通道 &#xff08;2&#xff09;AD多通道 二、DMA原理和应用 &#xff08;1&#xff09;DMA数据转运&#xff08;内存到内存&#xff09; &#xff08;2&#xff09;DMAAD多同道&#xff08;外设到内存&#x…

24深圳杯数学建模挑战赛A题6页初步思路+参考论文+保姆级答疑!!!

问题1:单个残骸的精确位置定位 建立数学模型&#xff0c;分析如果要精准确定空中单个残骸发生音爆时的位置坐标&#xff08;经度、纬度、高程&#xff09;和时间&#xff0c;至少需要布置几台监测设备&#xff1f;假设某火箭一级残骸分离后&#xff0c;在落点附近布置了7台监测…