Java 链表、栈、队列底层实现原理
本文为转载--原文链接:https://blog.csdn.net/qq_38605328/article/details/101081328
目录
一、自定义类实现链表
二、自定义类实现栈
三、自定义类实现队列
一、自定义类实现链表
1.定义节点的数据类型
- public class NodeClass<T> {
- private T Date; //数据
- private NodeClass<T> Next; //指针
- public T getDate() {
- return Date;
- }
- public void setDate(T date) {
- Date = date;
- }
- public NodeClass<T> getNext() {
- return Next;
- }
- public void setNext(NodeClass<T> next) {
- Next = next;
- }
- @Override
- public String toString()
- {
- return "NodeClass{" +
- "data=" + Date +
- ", next=" + Next +
- '}';
- }
- }
2.定义一个学生类
- public class Student {
- private String stuName; // 学生姓名
- private String stuNum; // 学号
- private String stuInfo; // 学生信息
- public String getStuName() {
- return StuName;
- }
- public void setStuName(String stuName) {
- this.stuName = stuName;
- }
- public String getStuNum() {
- return stuNum;
- }
- public void setStuNum(String stuNum) {
- this.stuNum = stuNum;
- }
- public String getStuInfo() {
- return stuInfo;
- }
- public void setStuInfo(String stuInfo) {
- this.stuInfo = stuInfo;
- }
- @Override
- public String toString() {
- return "Student{" +
- "stuNum=" + stuNum +
- ", name='" + stuName + '\'' +
- ", otherInfo='" + stuInfo + '\'' +
- '}';
- }
- }
3.测试类
- public class StudentLink {
- public static void main(String[] args) {
- String[] student = new String[] {"阿里巴巴","腾讯","百度","字节跳动"};
- NodeClass<Student> head = new NodeClass<Student>();
- NodeClass<Student> flag = head;
- for( int i = 0; i < student.length; i++) {
- Student stu = new Student();
- flag.setDate(stu);
- stu.setStuName(student[i]);
- stu.setStuNum(String.valueOf(i));
- stu.setStuInfo("this is " + student[i]);
- if( i < student.length-1) {
- flag.setNext(new NodeClass<Student>());
- flag = flag.getNext();
- }
- }
- System.out.println(head);
- }
- }
4.输出
NodeClass{data=Student{stuNum=0, name='阿里巴巴', otherInfo='this is 阿里巴巴'}, next=NodeClass{data=Student{stuNum=1, name='腾讯', otherInfo='this is 腾讯'}, next=NodeClass{data=Student{stuNum=2, name='百度', otherInfo='this is 百度'}, next=NodeClass{data=Student{stuNum=3, name='字节跳动', otherInfo='this is 字节跳动'}, next=null}}}}
5.手绘:
二、自定义类实现栈
1.定义栈类
- public class StackClass<T> {
- //栈顶元素
- private NodeClass<T> head;
- public NodeClass<T> gethead() {
- return head;
- }
- public void sethead(NodeClass<T> head) {
- this.head = head;
- }
- /**
- * <p>Description:入栈 </p>
- * @return
- */
- public void push(NodeClass<T> push){
- if( head == null ){
- head = push;
- }else{
- push.setNext(head);
- head = push;
- }
- }
- /**
- * <p>Description:出栈 </p>
- * @return 栈顶元素
- */
- public NodeClass<T> pop(){
- NodeClass<T> result = head;
- if( head != null ){
- head = head.getNext();
- }
- return result;
- }
- public void read(){
- System.out.println(head.toString());
- }
- }
2.测试类
- public static void main(String[] args) {
- //入栈出栈
- String[] studentNames = new String[] {
- "百度","阿里巴巴","腾讯","字节跳动","美团","滴滴","网易",
- "58同城","携程","牛客网"
- };
- StackClass<Student> stack = new StackClass<Student>();
- for(int i = 0; i < studentNames.length; i++) {
- NodeClass<Student> flag1 = new NodeClass<Student>();
- Student stu = new Student();
- flag1.setData(stu);
- stu.setStuNum(String.valueOf(i));
- stu.setStuName(studentNames[i]);
- stu.setStuInfo("I am the best!");
- stack.push(flag1);
- if(i == 3 || i == 6) {
- NodeClass<Student> result = stack.pop();
- if(result == null) {
- System.out.println("空了");
- }else {
- System.out.println(result.getData().getStuName());
- }
- }
- }
- while(true) {
- NodeClass<Student> result = stack.pop();
- if(result == null) {
- System.out.println("空了");
- break;
- }else {
- System.out.println(result.getData().getStuName());
- }
- }
- }
3.输出:
- 腾讯
- 滴滴
- 牛客网
- 携程
- 58同城
- 网易
- 美团
- 字节跳动
- 阿里巴巴
- 百度
- 空了
三、自定义类实现队列
1.定义队列类
- public class QueClass<T> {
- private NodeClass<T> start; //队首
- private NodeClass<T> end; //队尾
- public NodeClass<T> getStart() {
- return start;
- }
- public void setStart(NodeClass<T> start) {
- this.start = start;
- }
- public NodeClass<T> getEnd() {
- return end;
- }
- public void setEnd(NodeClass<T> end) {
- this.end = end;
- }
- public void push( NodeClass<T> add ){
- if( start == null ){
- start = add;
- end = start;
- }else{
- end.setNext(add);
- end = end.getNext();
- }
- }
- public NodeClass<T> pop(){
- NodeClass<T> result = start;
- if( start != null ){
- start = start.getNext();
- }
- return result;
- }
- public void read(){
- System.out.println(start.toString());
- }
- }
2.测试类
- public static void main(String[] args) {
- //入队出队
- String[] studentNames = new String[] {
- "百度","阿里巴巴","腾讯","字节跳动","美团","滴滴","网易",
- "58同城","携程","牛客网"
- };
- QueClass<Student> que = new QueClass<Student>();
- for(int i = 0; i < studentNames.length; i++) {
- NodeClass<Student> flag1 = new NodeClass<Student>();
- Student stu = new Student();
- flag1.setData(stu);
- stu.setStuNum(String.valueOf(i));
- stu.setStuName(studentNames[i]);
- stu.setStuInfo("I am the best!");
- que.push(flag1);
- }
- while(true) {
- NodeClass<Student> result = que.pop();
- if(result == null) {
- System.out.println("空了");
- break;
- }else {
- System.out.println(result.getData().getStuName());
- }
- }
- }
3.输出
- 百度
- 阿里巴巴
- 腾讯
- 字节跳动
- 美团
- 滴滴
- 网易
- 58同城
- 携程
- 牛客网
- 空了
4.手绘:
Java 链表、栈、队列底层实现原理相关推荐
- 常见数据结构和算法实现(排序/查找/数组/链表/栈/队列/树/递归/海量数据处理/图/位图/Java版数据结构)
常见数据结构和算法实现(排序/查找/数组/链表/栈/队列/树/递归/海量数据处理/图/位图/Java版数据结构) 数据结构和算法作为程序员的基本功,一定得稳扎稳打的学习,我们常见的框架底层就是各类数据 ...
- 《Java并发编程的艺术》:第2章 Java并发机制的底层实现原理
前言 Java代码在编译后会变成Java字节码,字节码被类加载器加载到JVM里,JVM执行字节 码,最终需要转化为汇编指令在CPU上执行,Java中所使用的并发机制依赖于JVM的实现和 CPU的指令. ...
- Java并发机制的底层实现原理
Java代码在编译后会变成Java字节码,字节码被类加载器加载到JVM里,JVM执行字节码,最终需要转化为汇编指令在CPU上执行,Java中所使用的并发机制依赖于JVM的实现和CPU的指令.本章我们将 ...
- 黑马程序员 C语言数据结构与算法之线性表(链表/栈/队列/顺序表)
C语言 链表基础知识清晰讲解(黑马) 讲的蛮好,就是音质不太好,有时听不清讲的啥! [黑马]数据结构与算法之线性表(链表/栈/队列/顺序表)[配套源码 嘛蛋,看错了,这是java的... 文章目录 链 ...
- 面试必备:高频算法题汇总「图文解析 + 教学视频 + 范例代码」必问之 链表 + 栈 + 队列 部分!
链表 链表是最基本的数据结构,面试官也常常用链表来考察面试者的基本能力,而且链表相关的操作相对而言比较简单,也适合考察写代码的能力.链表的操作也离不开指针,指针又很容易导致出错. 综合多方面的原因,链 ...
- 《Java并发编程的艺术》一一第2章Java并发机制的底层实现原理
第2章Java并发机制的底层实现原理 2.1 volatile的应用 Java代码在编译后会变成Java字节码,字节码被类加载器加载到JVM里,JVM执行字节码,最终需要转化为汇编指令在CPU上执行, ...
- 深入学习Java多线程——并发机制底层实现原理
2019独角兽企业重金招聘Python工程师标准>>> Java代码在编译后会变成Java字节码,字节码被类加载器加载到JVM里,JVM执行字节码,最终需要转化为汇编指令在CPU上执 ...
- Java线程安全队列Queue实现原理
原文链接:https://www.cnblogs.com/DreamRecorder/p/9223016.html 在Java多线程应用中,队列的使用率很高,多数生产消费模型的首选数据结构就是队列.J ...
- java并发机制的底层实现原理(volatile,synchronized,原子操作)
目录 volatile的应用 volatile的定义与实现原理 volatile的使用优化 synchronized的实现原理与应用 Java对象头 锁的升级与对比 偏向锁 轻量级锁 锁的优缺点对比 ...
最新文章
- Windows Server 2008 升级安装
- Android 5.0状态栏和导航栏
- puppet 执行source
- css实现多行文字溢出隐藏——前端小问题不定时更新
- python2中的unicode_python2中的unicode()函数在python3中会报错:
- j2ee之原生AJAX
- 申请信用贷款需要哪些条件?
- struts2框架下的一个简单的ajax例子
- JVM并发机制探讨—内存模型、内存可见性和指令重排序
- debian下使用dpkg来安装/卸载deb包 (转载)
- 还在背面试题?听小米面试官怎么说?【面试官教你如何对线面试官】
- 勿忘2022,迎接2023
- 基于Matlab使用地面雷达探测和跟踪LEO卫星星座仿真(附源码)
- “中国儿童友好城市”倡议书发布 吁智慧城市以“儿童为本”
- vue判断是Android还是ios手机
- 中式风格装修,彰显东方迷人的魅力
- 插画人物着色教程,如何为动漫插图人物添加颜色?
- ios开源框架——UITableView+FDTemplateLayoutCell优化UITableViewCell高度计算
- 三分钟学会数据库, UPDATE 更新
- QUECTEL上海移远4G通讯CAT4模组EC20CEFAG模块串口调试指南之03【EC20模组基础串口指令说明】
热门文章
- 【前端】Echarts的scatter3D各个属性具体含义
- 【Qt】main.cpp:1:24: fatal error: QApplication: No such file or directory
- LeetCode 整数转换英文表示(递归)
- 用多协议换采集器制作家用负氧离子除醛设备(带空气检测传感器)
- 抖音小店发货保障商品是什么?
- 国密wireshark下载
- 如何让下载并安装wireshark
- 【Java】Java GUI制作Windows桌面程序,利用windowbuilder生成界面,使用exe4j打包成可执行文件,使用Inno Setup打包成安装包,超级详细教程
- 安装Linux CentOS 7.7
- centos6.5 离线升级openssh7.7