Java时间类--JDK8

news/2024/7/20 17:05:17/文章来源:https://blog.csdn.net/xpy2428507302/article/details/139217068

为什么JDK8会又新增时间相关类呢?

 ① JDK7的时间对象如果需要比较大小的话,必须都先转换成毫秒值;JDK8则不需要,可以直接比较。

② JDK7的时间对象可以修改,在多线程环境下就会导致数据不安全;JDK8不能修改,不会发生安全问题。

JDK8时间类一共有10个类,

前3个类似于JDK7中的Date类,

第4个类似于JDK7中的 SimpleDateFormat 类,

第5~7类类似于JDK7中的 Calendar 类,

最后三个类用于计算时间间隔。

一、ZoneId时区类

1. getAvailableZoneIds方法

public class Demo {public static void main(String[] args) {//1.getAvailableZoneIds  获取所有的时区名称Set<String> zoneIds = ZoneId.getAvailableZoneIds();System.out.println(zoneIds.size());//603个时区System.out.println(zoneIds);}
}

运行结果: 

2. systemDefault方法

public class Demo {public static void main(String[] args) {//2.systemDefault  获取系统默认时区ZoneId zoneId = ZoneId.systemDefault();System.out.println(zoneId);//Asia/Shanghai}
}

如果想要更改系统默认时区:

① 点击系统设置

② 点击 “时间和语言”

 ③ 点击 "日期和时间" 

④ 选择时区

 比如将时区修改为 台北:

再次获取系统默认时区:

 3. of 方法

public class Demo {public static void main(String[] args) {//3.of  获取指定的时区ZoneId zoneId = ZoneId.of("Asia/Pontianak");System.out.println(zoneId);//Asia/Pontianak}
}

获取到时区之后就可以结合后续类进行操作了。

二、Instant时间戳类

1.now方法

public class Demo {public static void main(String[] args) {//1.now  获取当前时间的时间戳对象(标准时间)Instant now=Instant.now();System.out.println(now);}
}

 细节:

now方法获取的是标准时间(不含时区),如果想获得我国的时间,还要在此基础上+8h。

2. ofxxx方法

public class Demo {public static void main(String[] args) {//2.ofxxx  根据指定的(秒/毫秒/纳秒)获取时间戳对象Instant instant1 = Instant.ofEpochMilli(0L);//距时间原点0msSystem.out.println(instant1);Instant instant2 = Instant.ofEpochSecond(1L);//距时间原点1sSystem.out.println(instant2);Instant instant3 = Instant.ofEpochSecond(1L, 1000000000L);//距时间原点1s + 10^9ns = 2sSystem.out.println(instant3);}
}

运行结果: 

细节:

用ofxxx方法获取指定时间的时间戳对象,是不带时区的

3.atZone方法

public class Demo {public static void main(String[] args) {//3.atZone  获取指定时区的时间戳对象ZonedDateTime time = Instant.now().atZone(ZoneId.of("Asia/Shanghai"));System.out.println(time);}
}

运行结果:

细节:

atZone方法不是静态方法,不能通过类名调用,需要通过 对象名.方法名 调用。

4.isxxx方法

public class Demo {public static void main(String[] args) {//4.isxxx 用于时间的判断Instant instant1 = Instant.ofEpochMilli(0L);Instant instant2 = Instant.ofEpochMilli(1000L);//isbefore  判断调用者(instant1)代表的时间是否在参数(instant2)代表的时间之前boolean result1 = instant1.isBefore(instant2);System.out.println(result1);//true//isAfter  判断调用者(instant1)代表的时间是否在参数(instant2)代表的时间之前之后boolean result2 = instant1.isAfter(instant2);System.out.println(result2);//false}
}

细节:

使用isxxx方法无需将时间转换成毫秒值,就可以直接对两个时间对象进行比较了。

5.minusxxx方法和plusxxx方法

public class Demo {public static void main(String[] args) {//5.minusxxx  减少时间Instant instant1 = Instant.ofEpochMilli(3000L);System.out.println(instant1);//1970-01-01T00:00:03Z//minusSeconds:减少xx秒//minusMillis:减少xx毫秒//minusNanos:减少xx纳秒Instant instant2 = instant1.minusSeconds(1L);System.out.println(instant2);//1970-01-01T00:00:02Z//6.plusxxx  增加时间(方法和minusxxx同理)Instant instant3=instant1.plusSeconds(1L);System.out.println(instant3);//1970-01-01T00:00:04Z}
}

细节:

JDK8之后,创建的时间对象是不可能发生改变的。

所以,增加/减少后,原有时间对象并没有改变,而是创建了一个新的时间对象。

三、ZoneDateTime带时区的时间类

1.now方法和of方法

public class Demo {public static void main(String[] args) {//1.now  获取当前的时间对象(带时区)ZonedDateTime now = ZonedDateTime.now();System.out.println(now);//2.of  获取指定的时间对象(带时区)//① 指定方式一 --> 年,月,日,时,分,秒,纳秒,时区ZonedDateTime time1 = ZonedDateTime.of(2024, 5, 20,13, 14, 20, 0, ZoneId.of("Asia/Shanghai"));System.out.println(time1);//② 指定方式二 --> Instant + 时区Instant instant = Instant.ofEpochMilli(0L);ZoneId zoneId = ZoneId.of("Asia/Shanghai");ZonedDateTime time2 = ZonedDateTime.ofInstant(instant, zoneId);System.out.println(time2);}
}

运行结果:

细节:

① 通过运行结果可以看出,ZonedDateTime类创建的时间对象是带时区的

② of 方法有两种指定方式:

一种是        年,月,日,时,分,秒,纳秒,时区

另一种是     Instant + 时区

2.withxxx方法、minusxxx方法和plusxxx方法

public class Demo {public static void main(String[] args) {Instant instant = Instant.ofEpochMilli(0L);ZoneId zoneId = ZoneId.of("Asia/Shanghai");ZonedDateTime time1 = ZonedDateTime.ofInstant(instant, zoneId);System.out.println("time1:"+time1);//3.withxxx  修改时间ZonedDateTime time2 = time1.withYear(2000);System.out.println("time2:"+time2);//4.minusxxx  减少时间ZonedDateTime time3 = time2.minusYears(1);System.out.println("time3:"+time3);//5.plusxxx  增加时间ZonedDateTime time4 = time3.plusYears(1);System.out.println("time4:"+time4);}
}

 细节:

无论是修改,减少还是增加时间,都没有修改原有的时间对象,而是创建了一个新的对象

② 修改,减少,增加都有很多的方法,可以修改各种各样的时间,如下:

四、DateTimeFormatter类

public class Demo {public static void main(String[] args) {//获取时间对象ZonedDateTime time= Instant.now().atZone(ZoneId.of("Asia/Shanghai"));//1.ofPattern  获取格式对象DateTimeFormatter dtf=DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss EE a");//2.format  按照指定方式格式化String str= dtf.format(time);System.out.println(str);//2024-05-26 21:36:06 周日 下午}
}

细节:

DateTimeFormatter 类和 SimpleDateFormat 类一样,都是用于时间的格式化和解析。

但:

DateTimeFormatter 类是不可变的,一旦创建就不可更改。

SimpleDateFormat 类是可变的,可以通过方法调用更改其状态。

所以 DateTimeFormatter 类也解决了因为多线程环境而造成的安全性问题

五、LocalDate类、LocalTime类和LocalDateTime类

该3个类类似于JDK7中的 Calendar 类,使用方法也极其相似。

可以获得时间(日历)对象,取出某个字段值,或者修改、减少/增加某个字段值。

注意:

在JDK7种,月份范围是0~11,与实际月份差1。

而在JDK8种,月份范围是1~12,与实际月份相同。

除此之外,LocalDateTime 对象还可以转换成 LocalDate 对象和 LocalTime 对象

 1.LocalDate类

public class LocalDateDemo {public static void main(String[] args) {//1.获取当前时间的日历对象(包含:年月日)LocalDate nowDate = LocalDate.now();System.out.println("今天的日期:" + nowDate);//2024-05-26System.out.println("----------------------------------");//2.获取指定的时间的日历对象LocalDate ldDate = LocalDate.of(2023, 1, 1);System.out.println("指定日期:" + ldDate);//2023-01-01System.out.println("----------------------------------");//3.get系列方法获取日历中的每一个属性值int year = ldDate.getYear();System.out.println("year:" + year);System.out.println("----------------------------------");//获取月//方式一Month m = ldDate.getMonth();System.out.println(m);//JANUARYSystem.out.println(m.getValue());System.out.println("----------------------------------");//方式二int month = ldDate.getMonthValue();System.out.println("month:" + month);System.out.println("----------------------------------");//获取日int day = ldDate.getDayOfMonth();System.out.println("day:" + day);System.out.println("----------------------------------");//获取一年的第几天int dayOfYear = ldDate.getDayOfYear();System.out.println("dayOfYear:" + dayOfYear);System.out.println("----------------------------------");//获取星期DayOfWeek dayOfWeek = ldDate.getDayOfWeek();System.out.println(dayOfWeek);//SUNDAYSystem.out.println(dayOfWeek.getValue());System.out.println("----------------------------------");//4.is开头的方法表示判断System.out.println(ldDate.isBefore(ldDate));System.out.println(ldDate.isAfter(ldDate));System.out.println("----------------------------------");//5.with开头的方法表示修改,只能修改年月日LocalDate withLocalDate = ldDate.withYear(2000);System.out.println(withLocalDate);System.out.println("----------------------------------");//6.minus开头的方法表示减少,只能减少年月日LocalDate minusYears = ldDate.minusYears(1);System.out.println(minusYears);System.out.println("----------------------------------");//7.plus开头的方法表示增加,只能增加年月日LocalDate plusYears = ldDate.plusYears(10);System.out.println(plusYears);System.out.println("----------------------------------");}
}

 细节:

① 通过getMonth 和 getDayOfWeek 方法,获取到的都是对象,不是值。

② LocalDate类的with、minus和plus方法,都只能修改年月日。

③ 修改后不会改变原对象(调用者)的值,而是创建了一个新的对象。

2.LocalTime类

public class LocalTimeDemo {public static void main(String[] args) {// 获取本地时间的日历对象。(包含 时分秒)LocalTime nowTime = LocalTime.now();System.out.println("今天的时间:" + nowTime);int hour = nowTime.getHour();//时System.out.println("hour: " + hour);int minute = nowTime.getMinute();//分System.out.println("minute: " + minute);int second = nowTime.getSecond();//秒System.out.println("second:" + second);int nano = nowTime.getNano();//纳秒System.out.println("nano:" + nano);System.out.println("------------------------------------");System.out.println(LocalTime.of(8, 20));//时分System.out.println(LocalTime.of(8, 20, 30));//时分秒System.out.println(LocalTime.of(8, 20, 30, 150));//时分秒纳秒LocalTime mTime = LocalTime.of(8, 20, 30, 150);//is系列的方法System.out.println(nowTime.isBefore(mTime));System.out.println(nowTime.isAfter(mTime));//with系列的方法,只能修改时、分、秒System.out.println(nowTime.withHour(10));//minus系列的方法,只能减少时、分、秒System.out.println(nowTime.minusHours(10));//plus系列的方法,只能增加时、分、秒System.out.println(nowTime.plusHours(10));}
}

细节:

 LocalTime类的get方法只能获取时分秒(纳秒)。

② LocalTime类的with、minus和plus方法,都只能修改时分秒(纳秒)。

③ 修改后不会改变原对象(调用者)的值,而是创建了一个新的对象。

3.LocalDateTime类

public class LocalDateTimeDemo {public static void main(String[] args) {// 当前时间的的日历对象(包含年月日时分秒)LocalDateTime nowDateTime = LocalDateTime.now();System.out.println("今天是:" + nowDateTime);//今天是:System.out.println(nowDateTime.getYear());//年System.out.println(nowDateTime.getMonthValue());//月System.out.println(nowDateTime.getDayOfMonth());//日System.out.println(nowDateTime.getHour());//时System.out.println(nowDateTime.getMinute());//分System.out.println(nowDateTime.getSecond());//秒System.out.println(nowDateTime.getNano());//纳秒// 日:当年的第几天System.out.println("dayofYear:" + nowDateTime.getDayOfYear());//星期System.out.println(nowDateTime.getDayOfWeek());System.out.println(nowDateTime.getDayOfWeek().getValue());//月份System.out.println(nowDateTime.getMonth());System.out.println(nowDateTime.getMonth().getValue());//转换成LocalDate对象LocalDate ld = nowDateTime.toLocalDate();System.out.println(ld);//转换成LocalTime对象LocalTime lt = nowDateTime.toLocalTime();System.out.println(lt.getHour());System.out.println(lt.getMinute());System.out.println(lt.getSecond());}
}

细节:

① LocalDateTime 类的信息最全,包含年月日时分秒

② 修改后不会改变原对象(调用者)的值,而是创建了一个新的对象。

③ LocalDateTime 对象还可以转换成 LocalDate 对象和 LocalTime 对象。

六、工具类

1.Period类

public class PeriodDemo {public static void main(String[] args) {//当前本地  年月日LocalDate today=LocalDate.now();System.out.println(today);//2024-05-28//出生日期  年月日LocalDate birth=LocalDate.of(2001,1,1);Period period= Period.between(birth,today);System.out.println("相差的时间间隔对象"+ period);//P23Y4M27D//相差的年月日System.out.println(period.getYears());//23System.out.println(period.getMonths());//4System.out.println(period.getDays());//27//相差的总月份System.out.println(period.toTotalMonths());//280}
}

细节:

① 在调用between方法计算时间间隔时,是第二个参数减去第一个参数 。

② Period 类侧重于年月日的计算,可以通过getxxx方法,获取 Period 时间间隔对象的年月日。

③ 可以通过 toxxx 方法转换成总共相差的年/月/日。 

2.Duration类

public class DurationDemo {public static void main(String[] args) {//当前本地时间对象LocalDateTime today = LocalDateTime.now();System.out.println(today);//2024-05-28T15:21:29.975429400//出生的日期时间对象LocalDateTime birth = LocalDateTime.of(2000, 1, 1, 00, 00, 00);Duration duration = Duration.between(birth, today);System.out.println("相差的时间间隔对象" + duration);//PT213951H21M29.9754294S//获取时间间隔对象的纳秒System.out.println(duration.getNano());//相差的总天数/小时数/分钟数/秒数/毫秒数/纳秒数System.out.println(duration.toDays());//8914System.out.println(duration.toHours());System.out.println(duration.toMinutes());System.out.println(duration.toSeconds());System.out.println(duration.toMillis());System.out.println(duration.toNanos());}
}

细节:

① 在调用between方法计算时间间隔时,是第二个参数减去第一个参数 。

② Duration类侧重于秒和纳秒的计算,相对来说比较精确一点,可以通过getNano方法,获取 Period 时间间隔对象的纳秒值。

③ 可以通过 toxxx 方法转换成总共相差的 天数/小时数/分钟数/秒数/毫秒数/纳秒数。

3.ChronoUnit类

public class ChronoUnitDemo {public static void main(String[] args) {// 当前本地时间对象LocalDateTime today = LocalDateTime.now();System.out.println(today);//2024-05-28T15:42:34.595451500// 出生的日期时间对象LocalDateTime birthDate = LocalDateTime.of(2000, 1, 1,0, 0, 0);//ChronoUnit.XXX.between()  可以计算两个时间相差的XXXSystem.out.println("相差的年数:" + ChronoUnit.YEARS.between(birthDate, today));System.out.println("相差的月数:" + ChronoUnit.MONTHS.between(birthDate, today));System.out.println("相差的周数:" + ChronoUnit.WEEKS.between(birthDate, today));System.out.println("相差的天数:" + ChronoUnit.DAYS.between(birthDate, today));System.out.println("相差的时数:" + ChronoUnit.HOURS.between(birthDate, today));System.out.println("相差的分数:" + ChronoUnit.MINUTES.between(birthDate, today));System.out.println("相差的秒数:" + ChronoUnit.SECONDS.between(birthDate, today));System.out.println("相差的毫秒数:" + ChronoUnit.MILLIS.between(birthDate, today));System.out.println("相差的微秒数:" + ChronoUnit.MICROS.between(birthDate, today));System.out.println("相差的纳秒数:" + ChronoUnit.NANOS.between(birthDate, today));System.out.println("相差的半天数:" + ChronoUnit.HALF_DAYS.between(birthDate, today));System.out.println("相差的十年数:" + ChronoUnit.DECADES.between(birthDate, today));System.out.println("相差的世纪(百年)数:" + ChronoUnit.CENTURIES.between(birthDate, today));System.out.println("相差的千年数:" + ChronoUnit.MILLENNIA.between(birthDate, today));System.out.println("相差的纪元数:" + ChronoUnit.ERAS.between(birthDate, today));}
}

细节:

最为常用,因为其能计算的单位非常多,是最全面的。

② 通过 ChronoUnit.XXX.between() 可以计算两个时间相差的XXX

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

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

相关文章

如何找到docker的run(启动命令)

使用python三方库进行 需要安装python解释器 安装runlike安装包 pip3 install runlike 运行命令 runlike -p <container_name> # 后面可以是容器名和容器id&#xff0c;-p参数是显示自动换行实验 使用docker启动一个jenkins 启动命令为 docker run -d \ -p 9002:80…

7个靠谱的副业赚钱方法,宝妈,上班族,学生党可以做的兼职副业

你是否也曾面临过这样的困境&#xff1a;生活费紧张&#xff0c;想要找份兼职来补贴家用或是满足自己的小心愿&#xff1f;别担心&#xff0c;今天我将带领你踏入这个丰富多彩的兼职世界&#xff0c;助你轻松达成月入过千的小目标&#xff01; 在我漫长的兼职探索旅程中&#…

预训练模型语义相似性计算(十一) - M3E和BGE

M3E m3e由MokaAI 训练&#xff0c;开源和评测。 m3e的详细介绍可以看官方的github介绍。本文简要摘录其中一些点&#xff0c;以便后续的应用。 1.千万级 (2200w) 的中文句对数据(开源)。 2.支持同质相似句计算(s2s)和异质检索(s2p)&#xff0c;后续支持代码检索。 3.m3e基座模…

Nature 正刊!瑞典于默奥大学研究团队在研究全球河流和溪流的甲烷排放中取得新进展

甲烷(CH4)是一种强有力的温室气体&#xff0c;自工业革命以来&#xff0c;其在大气中的浓度增加了两倍。有证据表明&#xff0c;全球变暖增加了淡水生态系统的 CH4 排放&#xff0c;为全球气候提供了积极的反馈。然而&#xff0c;对于河流和溪流来说&#xff0c;甲烷排放的控制…

测试网0撸大毛 — AI 公链ALIENX推出HAL Testnet活动(含保姆级教程)

近期&#xff0c;OpenAI推出了新一代的GPT-4o让AI再次获得关注。AI硬件销售商英伟达的股价也突破1000美元&#xff0c;市值攀升到2.6万亿美元。AI继续影响到我们生活的方方面面。 在加密货币行业&#xff0c;市场行情也逐渐走出低谷。以太坊现货ETF被批准&#xff0c;为整个市场…

拖线无人机技术:像风筝一样飞行,无人能干扰

拖线无人机技术是一种独特且高效的无人机应用技术&#xff0c;其设计理念源于风筝。这种无人机不仅能够在空中稳定飞行&#xff0c;而且具备极强的抗干扰能力&#xff0c;使其在各种复杂环境下都能保持通信畅通和任务执行的高效。 拖线无人机技术的核心在于其拖线系统。与传统的…

爬虫案例-亚马逊反爬流程分析梳理(验证码突破)(x-amz-captcha)

总体概览&#xff1a;核心主要是需要突破该网站的验证码&#xff0c;成功后会返回我们需要的参数后再去请求一个中间页&#xff08;类似在后台注册一个session&#xff09;&#xff0c;最后需要注意一下 IP 是不能随意切换的 主要难点&#xff1a; 1、梳理整体反爬流程 2、验证…

YOLOv10:实时端到端目标检测

Ao Wang Hui Chen∗  Lihao Liu Kai Chen Zijia Lin  Jungong Han Guiguang Ding Tsinghua University Corresponding Author. 文献来源&#xff1a;中英文对照阅读 摘要 在过去的几年里&#xff0c;YOLO 因其在计算成本和检测性能之间的有效平衡而成为实时目标检测领…

币安领资,可验证计算协议 Marlin Protocol 如何推动去中心化

随着Web3应用的繁荣&#xff0c;DApp应用的整体去中心化和数据隐私也成为重点&#xff0c;同时AI与各类场景的融合也让不少去中心化应用都遇到了网络数据的计算、处理与结果验证等进行协调的问题。面对市场对各种交易和数据通讯的场景的需求不断增加&#xff0c;Marlin Protoco…

计算机毕业设计 | springboot养老院管理系统 老人社区管理(附源码)

1&#xff0c;绪论 1.1 背景调研 养老院是集医疗、护理、康复、膳食、社工等服务服务于一体的综合行养老院&#xff0c;经过我们前期的调查&#xff0c;院方大部分工作采用手工操作方式,会带来工作效率过低&#xff0c;运营成本过大的问题。 院方可用合理的较少投入取得更好…

Java | Leetcode Java题解之第103题二叉树的锯齿形层序遍历

题目&#xff1a; 题解&#xff1a; class Solution {public List<List<Integer>> zigzagLevelOrder(TreeNode root) {List<List<Integer>> ans new LinkedList<List<Integer>>();if (root null) {return ans;}Queue<TreeNode> n…

内网穿透入门使用(frp和natapp)

内网穿透入门使用 简单介绍穿透工具推荐FrpFrp下载安装服务端配置启动服务端配置客户端启动客户端效果查看 NATAppNATApp下载安装NATApp配置启动NATApp 使用途径 我的博客&#xff1a;Lichg&#xff0c;欢迎大家访问留言。 简单介绍 什么是内网穿透&#xff1a; 首先我们对内网…

内网安全--域渗透准备知识

目录 知识点&#xff1a; 0x01 0x02 0x03 系列点&#xff1a; Linux主机信息收集 windows主机信息收集 知识点&#xff1a; 0、域产生原因 1、内网域的区别 2、如何判断在域内 3、域内常见信息收集 4、域内自动化工具收集 -局域网&工作组&域环境区别 -域…

汽车电子零部件(14):TMS热管理系统

前言: TMS(thermal management system)热管理系统,这是新能源汽车诞生后随之而产生的一种新汽车零部件,一旦热管理失控会触发自燃,这种现象也是对EV来说是件头疼的事。汽车的热管理系统(TMS)是一个关键部件,有助于调节汽车电池组、车厢和其他车辆系统的温度。TMS的主要…

【Vue】性能优化

使用 key 对于通过循环生成的列表&#xff0c;应给每个列表项一个稳定且唯一的 key&#xff0c;这有利于在列表变动时&#xff0c;尽量少的删除和新增元素。 使用冻结的对象 冻结的对象&#xff08;Object.freeze(obj)&#xff09;不会被响应化&#xff0c;不可变。 使用函…

Vue3学习使用axios和qs进行POST请求和响应处理

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 一、前言1.准备工作2.发送POST请求3.处理响应数据4.总结 一、前言 在前端开发中&#xff0c;经常需要与后端进行数据交互&#xff0c;其中包括发送POST请求并处理响…

项目十二:简单的python基础爬虫训练

许久未见&#xff0c;甚是想念&#xff0c;今日好运&#xff0c;为你带好运。ok&#xff0c;废话不多说&#xff0c;希望这门案例能带你直接快速了解并运用。&#x1f381;&#x1f496; 基础流程 第一步&#xff1a;安装需要用到的requests库&#xff0c;命令如下 pip inst…

民国漫画杂志《时代漫画》第29期.PDF

时代漫画29.PDF: https://url03.ctfile.com/f/1779803-1248635405-bf3c87?p9586 (访问密码: 9586) 《时代漫画》的杂志在1934年诞生了&#xff0c;截止1937年6月战争来临被迫停刊共发行了39期。 ps: 资源来源网络!

动态内存管理—C语言通讯录

目录 一&#xff0c;动态内存函数的介绍 1.1 malloc和free 1.2 calloc 1.3 realloc 1.4C/C程序的内存开辟 二&#xff0c;通讯录管理系统 动态内存函数的介绍 malloc free calloc realloc 一&#xff0c;动态内存函数的介绍 1.1 malloc和free void* malloc (…

栈的特性及代码实现(C语言)

目录 栈的定义 栈的结构选取 链式储存结构和顺序栈储存结构的差异 栈的代码实现 "stack.h" "stack.c" 总结 栈的定义 栈&#xff1a;栈是限定仅在表尾进行插入和删除操作的线性表。 我们把运行插入的和删除的一段叫做栈顶&#xff08;TOP&#xff…