网站首页 > java教程 正文
序言
在前面几篇文章中我们分别讲的数据结构中的几种简单排序(JAVA数据结构和算法-简单排序之冒泡排序、 JAVA数据结构和算法-简单排序之选择排序 、JAVA数据结构和算法-简单排序之插入排序 )和对象排序的使用(数据结构和算法-简单排序之对象排序 )。
在之后近几篇的文章中,我们将要讲解集中不同的结构类型,分别是栈、队列、有序队列。在了解栈之前我们先了解一下之前数据存储结构与之后存储结构的区别。
1、程序员的工具
数组是前面已经介绍过的数据存储结构,和其他数据结构(链表、树)一样,都适用于数据库应用中做数据吉利。它常用于记录那些对应于现实世界的对象和活动的数据,如职员档案、目录、上午数据等。这些结构便于数据的访问:它们易于进行插入、删除和查找特定数据项的操作。
然而之后要讲解的数据结构和算法更多的是作为程序员的工具来运用。它们主要作为构思算法的辅助工具,而不是完全的数据存储工具。这些数据结构的生命周期比那些数据库类型的结构要短得多。在程序操作执行期间它们才被创建,通常用它们去执行某项特殊的任务;当完成任务之后,它们就要被销毁掉。
2、受限的访问
在数组中,若知道数据项的下标,便可以立即访问该数据项;或者通过顺序搜索数据项,访问到数据中的各项数据。而在栈和队列等数据结构中,访问是受限的,即在特定时候只有一个数据项可以被读取或者被删除。
3、更加抽象
栈、队列和优先级队列是比数组和其他数据存储结构更为抽象的结构。主要通过接口对栈、队列和优先级队列进行定义,这些接口表明通过它们可以完成的操作,而它们的主要实现机制对用户来说是不可见的。
例如:栈的主要机制可以用数组来实现,也可以用链表来实现。优先级队列的内部实现可以用数组或一种特别的树-堆来实现。
栈
代码实现
/**
* Created by Bruce on 2020/8/13
* 使用数组实现栈
**/
public class Stack_01 {
private int maxSize;
private long[] stackArray;
private int top;
public Stack_01(int maxSize) {
this.maxSize = maxSize;
stackArray = new long[maxSize];
top = -1;
}
/**
* 是否为空
* @return
*/
public boolean isEmpty(){
return top == -1;//栈顶指针为默认值-1,则代表为空
}
/**
* 栈是否已满
* @return
*/
public boolean isFull(){
return top == maxSize - 1;//栈顶指针为限制数量-1
}
/**
* 向栈中压入元素
* @param value
* @return
*/
public boolean push(long value){
if (isFull()){//已满压入失败
return false;//实际使用中-可抛出异常处理
}
stackArray[++top] = value;//栈顶压入-top是在插入数据项之前递增的
return true;
}
/**
* 弹栈
* @return
*/
public long pop(){
if(isEmpty()){//栈为空
return -1;//实际使用中-可抛出异常处理
}
return stackArray[top--];//先返回再递减
}
/**
* 查看栈顶元素
* @return
*/
public long peek(){
if(isEmpty()){//栈为空返回-1;
return -1L;//实际使用中-可抛出异常处理
}
return stackArray[top];
}
public static void main(String[] args) {
int maxSize = 10;
Stack_01 stack = new Stack_01(maxSize);
System.out.println("入栈:");
for(int i = 0; i <maxSize; i++ ){
long value = i * 10;
stack.push(value);
System.out.print(value);
System.out.print(" ");
}
System.out.println(" ");
System.out.println("弹栈:");
while (!stack.isEmpty()){//不为空
long value = stack.pop();
System.out.print(value);
System.out.print(" ");
}
System.out.println(" ");
}
}
数据打印:
入栈:
0 10 20 30 40 50 60 70 80 90
弹栈:
90 80 70 60 50 40 30 20 10 0
解析
本文摘要自《Java数据结构和算法(第二版)》
猜你喜欢
- 2024-11-12 本地方法栈、JVM栈、本地内存和JVM Heap的区别与关系
- 2024-11-12 Java基础之堆、栈、方法区、类加载器——JVM内存模型分析
- 2024-11-12 java之栈内存与堆内存(栈内存 和堆内存)
- 2024-11-12 深入了解Java虚拟机栈以及内存模型
- 2024-11-12 Java虚拟机栈区域(虚拟机栈描述的是java方法执行的内存模型)
- 2024-11-12 一文读懂Java的“栈内存”[Stack]和“堆空间”[Heap]
- 2024-11-12 JVM 内存结构(jvm内存结构及作用)
- 2024-11-12 「JVM系列」 从一到掌握JVM系列之Java虚拟机栈
- 2024-11-12 答读者问:Java 里的堆内存和栈内存是什么意思?
- 2024-11-12 Java中堆和栈的区别(java中堆和栈的区别在哪)
你 发表评论:
欢迎- 06-15Linux中如何通过Shell脚本来控制Spring Boot的Jar包启停服务?
- 06-15推荐一款超棒的SpringCloud 脚手架项目
- 06-15IDEA将项目打包成jar包(idea打包普通java项目)
- 06-15Spring Boot3 项目 jar 包打包成 Docker 镜像全攻略
- 06-15记录Dockerfile将jar包构建成部署所需的镜像
- 06-15项目基础部署汇总八---linux下xxl-job安装
- 06-15Spring Boot Jar 包秒变 Docker 镜像实现多环境部署
- 06-15终端执行 java -jar example.jar 时报错:“没有主清单属性” 的解决
- 最近发表
-
- Linux中如何通过Shell脚本来控制Spring Boot的Jar包启停服务?
- 推荐一款超棒的SpringCloud 脚手架项目
- IDEA将项目打包成jar包(idea打包普通java项目)
- Spring Boot3 项目 jar 包打包成 Docker 镜像全攻略
- 记录Dockerfile将jar包构建成部署所需的镜像
- 项目基础部署汇总八---linux下xxl-job安装
- Spring Boot Jar 包秒变 Docker 镜像实现多环境部署
- 终端执行 java -jar example.jar 时报错:“没有主清单属性” 的解决
- 如何将本地JAR文件添加到Maven项目中
- Java 类隔离应用:多 Jar 包支持(java接口隔离原则)
- 标签列表
-
- java反编译工具 (77)
- java反射 (57)
- java接口 (61)
- java随机数 (63)
- java7下载 (59)
- java数据结构 (61)
- java 三目运算符 (65)
- java对象转map (63)
- Java继承 (69)
- java字符串替换 (60)
- 快速排序java (59)
- java并发编程 (58)
- java api文档 (60)
- centos安装java (57)
- java调用webservice接口 (61)
- java深拷贝 (61)
- 工厂模式java (59)
- java代理模式 (59)
- java.lang (57)
- java连接mysql数据库 (67)
- java重载 (68)
- java 循环语句 (66)
- java反序列化 (58)
- java时间函数 (60)
- java是值传递还是引用传递 (62)
本文暂时没有评论,来添加一个吧(●'◡'●)