C:数据结构之链栈(不带头)

目录

前序

准备工作

函数声明

函数接口

1.初始化

2.创造节点

3. 判断栈空

4.入栈

5.出栈 

6.取栈顶元素

7.销毁栈 

8. 获取栈的元素个数

 总结


前序

链栈是基于单链表实现的,其实栈更加适合使用顺序表来实现的,这篇文章我们来探讨一下链栈的实现。

准备工作

老规矩,干活前先把符号都定义好了。代码如下;

#pragma once
#include<stdio.h>
#include<assert.h>
#include<stdbool.h>
#include<stdlib.h>
typedef int DataType;
typedef struct stack
{
	DataType data;
	struct stack* next;
}SL;
typedef struct SLF//用来统计栈元素和插入和删除操作
{
	SL* top;
	int count;
}SLF;

结构体节点是包含节点的值,以及指针域,重命名为SL; 下面将栈顶的节点与栈中的元素封装起来:就这么简单;

函数声明

函数接口

列举出栈要实现的函数功能;

1.初始化

//进行初始化
void SLinit(SLF* e)
{
	assert(e);
	e->count = 0;;
	e->top = NULL;
}

2.创造节点

//创造节点
SL* creat(DataType x)
{
	SL* node = (SL*)malloc(sizeof(SL));
	if (node ==  NULL)
	{
		perror("malloc fail!");
		exit(1);
	}
	node->data = x;
	node->next = NULL;
	return node;
}

3. 判断栈空

//判断栈空
bool SLempty(SLF* e)
{
	return e->count ? false : true;
}

4.入栈

//入栈
void SLpush(SLF* e,DataType x)
{
	//创造节点
	SL* cur = creat(x);
	if (e->count == 0)//如果栈为空,那么把第一个创造的节点当成头结点
	{
		e->top = cur;
		e->count++;
	}
	else
	{
		cur->next = e->top;//如果栈不为空,新节点指向前一个节点,新节点作为尾节点,但是是栈顶;
		e->top = cur;//重新指向栈顶元素
		e->count++;
	}
}

5.出栈 

//删除栈顶元素(出栈)
void SLpop(SLF* e)
{
	SL* delete = e->top;
	e->top = e->top->next;
	free(delete);
	e->count--;
}

6.取栈顶元素

//取出栈顶元素
DataType SLtop(SLF* e)
{
	return e->top->data;//直接返回元素
}

7.销毁栈 

//销毁栈
void SLdestory(SLF* e)
{
	while (e->count != 0)
	{
		SL* pre = e->top;
		e->top = pre->next;
		free(pre);
		e->count--;
	}
	return;
}

8. 获取栈的元素个数

//获取栈的元素个数
int SLsize(SLF* e)
{
	return e->count;
}

 总结

链栈的实现大致就是这样,我把源码放在了下面,希望对大家有所帮助;

test_c: 测试仓库 - Gitee.com

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Python | Leetcode Python题解之第22题括号生成

题目&#xff1a; 题解&#xff1a; class Solution:def generateParenthesis(self, n: int) -> List[str]:if n 0:return []total_l []total_l.append([None]) # 0组括号时记为Nonetotal_l.append(["()"]) # 1组括号只有一种情况for i in range(2,n1): …

SpringBoot和Vue2项目配置https协议

1、SpringBoot项目 ① 去你自己的云申请并下载好相关文件&#xff0c;SpringBoot下载的是Tomcat&#xff08;默认&#xff09;&#xff0c;Vue2下载的是Nginx ② 将下载的压缩包里面的.pfx后缀文件拷贝到项目的resources目录下 ③ 编辑配置文件 &#xff08;主要是框里面的内…

【GN】《Group Normalization》

ECCV-2018 Facebook AI Research 更多论文解读&#xff0c;可参考【Paper Reading】 文章目录 1 Background and Motivation2 Related Work3 Advantages / Contributions4 Method5 Experiments5.1 Datasets and Metrics5.2 Image Classification in ImageNet5.3 Object Detecti…

小程序打开空白的问题处理

小程序打开是空白的&#xff0c;如下&#xff1a; 这个问题都是请求域名的问题&#xff1a; 一、检查服务器域名配置了 https没有&#xff0c;如果没有&#xff0c;解决办法是申请个ssl证书&#xff0c;具体看这里 https://doc.crmeb.com/mer/mer2/4257 二、完成第一步后&#…

vmware esxi6.0安装配置操作

系统安装及配置 在服务器上安装ESXI 6.0 提示是否继续安装 如果不想安装,按ESC后再按F11即可,稍后电脑会重启. 继续安装,则按回车键 按F11同意声明继续 选择将EXSI 安装到哪个硬盘上,我这里使用的是虚拟机,所以只有这一个选项 选择默认键盘布局,默认的美国键盘即可 设置root…

AI大模型探索之路-应用篇1:Langchain框架概述—快速构建大模型应用

目录 一、什么是LangChain&#xff1f; 二、LangChain解决了哪些问题&#xff1f; 三、LangChain总体架构 四、代码实践样例 总结 一、什么是LangChain&#xff1f; 为大模型应用提供简便之道。 LangChain&#xff0c;专为构建庞大的语言模型应用程序设计的框架&#xff0…

应用方案 | 低功率接地故障断路器(GFI)控制芯片D4147简介

应用领域 D4147主要用于三线制GFCI输出接口、GFCI芯片断路器、便携式GFCI线路等领域的产品&#xff0c;侦测并防护火线对地故障和零线对负载短路故障。 功能介绍 D4147 为低功率接地故障断路器&#xff08;GFI&#xff09;控制器芯片&#xff0c;用于检测危险的接地故障电流路径…

基于JSP+Mysql+HTml+Css仓库出入库管理系统设计与实现

博主介绍&#xff1a;黄菊华老师《Vue.js入门与商城开发实战》《微信小程序商城开发》图书作者&#xff0c;CSDN博客专家&#xff0c;在线教育专家&#xff0c;CSDN钻石讲师&#xff1b;专注大学生毕业设计教育和辅导。 所有项目都配有从入门到精通的基础知识视频课程&#xff…

个人求职简历(精选8篇)

HR浏览一份简历也就25秒左右&#xff0c;如果你连「好简历」都没有&#xff0c;怎么能找到好工作呢&#xff1f; 如果你不懂得如何在简历上展示自己&#xff0c;或者觉得怎么改简历都不出彩&#xff0c;那请你一定仔细读完。 互联网运营个人简历范文> 男 22 本科 AI简历…

Altair® Access™ 面向研究人员和工程师的 HPC 作业提交门户

Altair Access™ 面向研究人员和工程师的 HPC 作业提交门户 Access 具有一个简单、强大且统一的界面&#xff0c;可以从中提交和监控远程集群、云或其他资源的相关作业&#xff0c;使工程师和研究人员能够专注于主要活动&#xff0c;减少在应用程序运行及数据移动上投入的时间。…

朴素模式匹配算法

什么是字符串的模式匹配&#xff1f; 字符串模式匹配:在主串中找到与模式串相同的字串&#xff0c;并返回其所在位置 算法思想&#xff1a; 算法思想为:从主串S的第一个字符起&#xff0c;与模式串T的第一个字符比较,若相等&#xff0c;则继续逐个比较后续字符;否则从主串的下一…

微服务项目sc2024通用Base工程

1. cloud-provider-payment8001 2.pom文件 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"ht…

STM32 H7系列学习笔记

必备的API知识 第 1 步&#xff1a;系统上电复位&#xff0c;进入启动文件 startup_stm32h743xx.s&#xff0c;在这个文件里面执行复位中断服务程序。 在复位中断服务程序里面执行函数 SystemInit&#xff0c;在system_stm32h7xx.c 里面。*之后是调用编译器封装好的函数&…

Java基础入门--第十一章--JDBC(Java Database Connection)Java数据库连接

JDBC 11.1 什么是JDBC11.1.1 JDBC概述11.1.2 JDBC驱动程序 11.2 JDBC的常用API11.3 JDBC编程11.3.1 JDBC 编程步骤11.3.2 实现第一个JDBC程序 我的MySQL的root密码: root 11.1 什么是JDBC 11.1.1 JDBC概述 JDBC的全称是Java数据库连接&#xff08;Java Database Connectivit…

为什么用核心板与底板模式开发智能产品?小米SU7坐舱域控制器PCB设计的新选择

随着科技的飞速发展&#xff0c;智能产品市场的竞争日益激烈。如何在最短的时间内&#xff0c;以最低的成本&#xff0c;打造出性能卓越的产品&#xff0c;成为了各大企业面临的重要课题。近日&#xff0c;小米SU7智能汽车的发布为我们提供了一个全新的视角——通过核心板与底板…

算法:多重背包问题dp

文章目录 一、多重背包问题特点1.1、多重背包问题的特征1.2、解决多重背包问题的基本方法典型例题&#xff1a;AcWing——多重背包问题I 1.3、二进制优化1.3.1、二进制优化的思想1.3.2、多重背包问题的二进制优化 一、多重背包问题特点 多重背包问题是背包问题的又一变种&…

钢条切割问题:动态规划算法的典型应用

一、引言 在工业生产和物流管理中&#xff0c;钢条切割问题是一个常见的优化问题。企业在购买长钢条并将其切割为短钢条出售时&#xff0c;往往面临着如何切割以最大化利润的问题。这个问题不仅关系到企业的成本控制和利润最大化&#xff0c;也涉及到资源的有效利用和生产效率…

QA:缺少VC运行时库导致VisualBox和XShell运行出错

前言 启动软件时&#xff0c;特别是绿色版软件&#xff0c;有时会遇到“缺少xxx.dll文件”&#xff0c;导致软件启动失败。 注&#xff1a;xxx.dll是动态链接库&#xff08;DLL&#xff09;文件&#xff0c;包含了程序运行所需的函数和资源。 内容 象上面这种类型的错误&…

漫画|数据工程师面试常见问题之数据倾斜

话说&#xff0c;闹钟一响&#xff0c;现实照进梦想&#xff0c;又是李大虎面试找工作的一天。 李大虎心里一直有个想法&#xff0c;如果一天睡20个小时&#xff0c;然后这20个小时全做美梦&#xff0c;醒来的4个小时用来吃喝拉撒&#xff0c;这样岂不就和那些富二代一样了&am…

AI应用实战2:使用scikit-learn进行回归任务实战

代码仓库在gitlab&#xff0c;本博客对应于02文件夹。 1.问题分析 在此篇博客中我们来对回归任务进行实战演练&#xff0c;背景是直播带货平台的业绩预测。第一步&#xff0c;就是分析问题。 问题痛点&#xff1a; 在直播带货平台上&#xff0c;由于市场环境多变、用户行为复…