本文为转载--原文链接:https://blog.csdn.net/qq_38605328/article/details/101081328

目录

一、自定义类实现链表

二、自定义类实现栈

三、自定义类实现队列


一、自定义类实现链表

1.定义节点的数据类型

  1. public class NodeClass<T> {
  2. private T Date; //数据
  3. private NodeClass<T> Next; //指针
  4. public T getDate() {
  5. return Date;
  6. }
  7. public void setDate(T date) {
  8. Date = date;
  9. }
  10. public NodeClass<T> getNext() {
  11. return Next;
  12. }
  13. public void setNext(NodeClass<T> next) {
  14. Next = next;
  15. }
  16. @Override
  17. public String toString()
  18. {
  19. return "NodeClass{" +
  20. "data=" + Date +
  21. ", next=" + Next +
  22. '}';
  23. }
  24. }

2.定义一个学生类

  1. public class Student {
  2. private String stuName; // 学生姓名
  3. private String stuNum; // 学号
  4. private String stuInfo; // 学生信息
  5. public String getStuName() {
  6. return StuName;
  7. }
  8. public void setStuName(String stuName) {
  9. this.stuName = stuName;
  10. }
  11. public String getStuNum() {
  12. return stuNum;
  13. }
  14. public void setStuNum(String stuNum) {
  15. this.stuNum = stuNum;
  16. }
  17. public String getStuInfo() {
  18. return stuInfo;
  19. }
  20. public void setStuInfo(String stuInfo) {
  21. this.stuInfo = stuInfo;
  22. }
  23. @Override
  24. public String toString() {
  25. return "Student{" +
  26. "stuNum=" + stuNum +
  27. ", name='" + stuName + '\'' +
  28. ", otherInfo='" + stuInfo + '\'' +
  29. '}';
  30. }
  31. }

3.测试类

  1. public class StudentLink {
  2. public static void main(String[] args) {
  3. String[] student = new String[] {"阿里巴巴","腾讯","百度","字节跳动"};
  4. NodeClass<Student> head = new NodeClass<Student>();
  5. NodeClass<Student> flag = head;
  6. for( int i = 0; i < student.length; i++) {
  7. Student stu = new Student();
  8. flag.setDate(stu);
  9. stu.setStuName(student[i]);
  10. stu.setStuNum(String.valueOf(i));
  11. stu.setStuInfo("this is " + student[i]);
  12. if( i < student.length-1) {
  13. flag.setNext(new NodeClass<Student>());
  14. flag = flag.getNext();
  15. }
  16. }
  17. System.out.println(head);
  18. }
  19. }

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.定义栈类

  1. public class StackClass<T> {
  2. //栈顶元素
  3. private NodeClass<T> head;
  4. public NodeClass<T> gethead() {
  5. return head;
  6. }
  7. public void sethead(NodeClass<T> head) {
  8. this.head = head;
  9. }
  10. /**
  11. * <p>Description:入栈 </p>
  12. * @return
  13. */
  14. public void push(NodeClass<T> push){
  15. if( head == null ){
  16. head = push;
  17. }else{
  18. push.setNext(head);
  19. head = push;
  20. }
  21. }
  22. /**
  23. * <p>Description:出栈 </p>
  24. * @return 栈顶元素
  25. */
  26. public NodeClass<T> pop(){
  27. NodeClass<T> result = head;
  28. if( head != null ){
  29. head = head.getNext();
  30. }
  31. return result;
  32. }
  33. public void read(){
  34. System.out.println(head.toString());
  35. }
  36. }

2.测试类

  1. public static void main(String[] args) {
  2. //入栈出栈
  3. String[] studentNames = new String[] {
  4. "百度","阿里巴巴","腾讯","字节跳动","美团","滴滴","网易",
  5. "58同城","携程","牛客网"
  6. };
  7. StackClass<Student> stack = new StackClass<Student>();
  8. for(int i = 0; i < studentNames.length; i++) {
  9. NodeClass<Student> flag1 = new NodeClass<Student>();
  10. Student stu = new Student();
  11. flag1.setData(stu);
  12. stu.setStuNum(String.valueOf(i));
  13. stu.setStuName(studentNames[i]);
  14. stu.setStuInfo("I am the best!");
  15. stack.push(flag1);
  16. if(i == 3 || i == 6) {
  17. NodeClass<Student> result = stack.pop();
  18. if(result == null) {
  19. System.out.println("空了");
  20. }else {
  21. System.out.println(result.getData().getStuName());
  22. }
  23. }
  24. }
  25. while(true) {
  26. NodeClass<Student> result = stack.pop();
  27. if(result == null) {
  28. System.out.println("空了");
  29. break;
  30. }else {
  31. System.out.println(result.getData().getStuName());
  32. }
  33. }
  34. }

3.输出:

  1. 腾讯
  2. 滴滴
  3. 牛客网
  4. 携程
  5. 58同城
  6. 网易
  7. 美团
  8. 字节跳动
  9. 阿里巴巴
  10. 百度
  11. 空了

三、自定义类实现队列

1.定义队列类

  1. public class QueClass<T> {
  2. private NodeClass<T> start; //队首
  3. private NodeClass<T> end; //队尾
  4. public NodeClass<T> getStart() {
  5. return start;
  6. }
  7. public void setStart(NodeClass<T> start) {
  8. this.start = start;
  9. }
  10. public NodeClass<T> getEnd() {
  11. return end;
  12. }
  13. public void setEnd(NodeClass<T> end) {
  14. this.end = end;
  15. }
  16. public void push( NodeClass<T> add ){
  17. if( start == null ){
  18. start = add;
  19. end = start;
  20. }else{
  21. end.setNext(add);
  22. end = end.getNext();
  23. }
  24. }
  25. public NodeClass<T> pop(){
  26. NodeClass<T> result = start;
  27. if( start != null ){
  28. start = start.getNext();
  29. }
  30. return result;
  31. }
  32. public void read(){
  33. System.out.println(start.toString());
  34. }
  35. }

2.测试类

  1. public static void main(String[] args) {
  2. //入队出队
  3. String[] studentNames = new String[] {
  4. "百度","阿里巴巴","腾讯","字节跳动","美团","滴滴","网易",
  5. "58同城","携程","牛客网"
  6. };
  7. QueClass<Student> que = new QueClass<Student>();
  8. for(int i = 0; i < studentNames.length; i++) {
  9. NodeClass<Student> flag1 = new NodeClass<Student>();
  10. Student stu = new Student();
  11. flag1.setData(stu);
  12. stu.setStuNum(String.valueOf(i));
  13. stu.setStuName(studentNames[i]);
  14. stu.setStuInfo("I am the best!");
  15. que.push(flag1);
  16. }
  17. while(true) {
  18. NodeClass<Student> result = que.pop();
  19. if(result == null) {
  20. System.out.println("空了");
  21. break;
  22. }else {
  23. System.out.println(result.getData().getStuName());
  24. }
  25. }
  26. }

3.输出

  1. 百度
  2. 阿里巴巴
  3. 腾讯
  4. 字节跳动
  5. 美团
  6. 滴滴
  7. 网易
  8. 58同城
  9. 携程
  10. 牛客网
  11. 空了

4.手绘:

Java 链表、栈、队列底层实现原理相关推荐

  1. 常见数据结构和算法实现(排序/查找/数组/链表/栈/队列/树/递归/海量数据处理/图/位图/Java版数据结构)

    常见数据结构和算法实现(排序/查找/数组/链表/栈/队列/树/递归/海量数据处理/图/位图/Java版数据结构) 数据结构和算法作为程序员的基本功,一定得稳扎稳打的学习,我们常见的框架底层就是各类数据 ...

  2. 《Java并发编程的艺术》:第2章 Java并发机制的底层实现原理

    前言 Java代码在编译后会变成Java字节码,字节码被类加载器加载到JVM里,JVM执行字节 码,最终需要转化为汇编指令在CPU上执行,Java中所使用的并发机制依赖于JVM的实现和 CPU的指令. ...

  3. Java并发机制的底层实现原理

    Java代码在编译后会变成Java字节码,字节码被类加载器加载到JVM里,JVM执行字节码,最终需要转化为汇编指令在CPU上执行,Java中所使用的并发机制依赖于JVM的实现和CPU的指令.本章我们将 ...

  4. 黑马程序员 C语言数据结构与算法之线性表(链表/栈/队列/顺序表)

    C语言 链表基础知识清晰讲解(黑马) 讲的蛮好,就是音质不太好,有时听不清讲的啥! [黑马]数据结构与算法之线性表(链表/栈/队列/顺序表)[配套源码 嘛蛋,看错了,这是java的... 文章目录 链 ...

  5. 面试必备:高频算法题汇总「图文解析 + 教学视频 + 范例代码」必问之 链表 + 栈 + 队列 部分!

    链表 链表是最基本的数据结构,面试官也常常用链表来考察面试者的基本能力,而且链表相关的操作相对而言比较简单,也适合考察写代码的能力.链表的操作也离不开指针,指针又很容易导致出错. 综合多方面的原因,链 ...

  6. 《Java并发编程的艺术》一一第2章Java并发机制的底层实现原理

    第2章Java并发机制的底层实现原理 2.1 volatile的应用 Java代码在编译后会变成Java字节码,字节码被类加载器加载到JVM里,JVM执行字节码,最终需要转化为汇编指令在CPU上执行, ...

  7. 深入学习Java多线程——并发机制底层实现原理

    2019独角兽企业重金招聘Python工程师标准>>> Java代码在编译后会变成Java字节码,字节码被类加载器加载到JVM里,JVM执行字节码,最终需要转化为汇编指令在CPU上执 ...

  8. Java线程安全队列Queue实现原理

    原文链接:https://www.cnblogs.com/DreamRecorder/p/9223016.html 在Java多线程应用中,队列的使用率很高,多数生产消费模型的首选数据结构就是队列.J ...

  9. java并发机制的底层实现原理(volatile,synchronized,原子操作)

    目录 volatile的应用 volatile的定义与实现原理 volatile的使用优化 synchronized的实现原理与应用 Java对象头 锁的升级与对比 偏向锁 轻量级锁 锁的优缺点对比 ...

最新文章

  1. Windows Server 2008 升级安装
  2. Android 5.0状态栏和导航栏
  3. puppet 执行source
  4. css实现多行文字溢出隐藏——前端小问题不定时更新
  5. python2中的unicode_python2中的unicode()函数在python3中会报错:
  6. j2ee之原生AJAX
  7. 申请信用贷款需要哪些条件?
  8. struts2框架下的一个简单的ajax例子
  9. JVM并发机制探讨—内存模型、内存可见性和指令重排序
  10. debian下使用dpkg来安装/卸载deb包 (转载)
  11. 还在背面试题?听小米面试官怎么说?【面试官教你如何对线面试官】
  12. 勿忘2022,迎接2023
  13. 基于Matlab使用地面雷达探测和跟踪LEO卫星星座仿真(附源码)
  14. “中国儿童友好城市”倡议书发布 吁智慧城市以“儿童为本”
  15. vue判断是Android还是ios手机
  16. 中式风格装修,彰显东方迷人的魅力
  17. 插画人物着色教程,如何为动漫插图人物添加颜色?
  18. ios开源框架——UITableView+FDTemplateLayoutCell优化UITableViewCell高度计算
  19. 三分钟学会数据库, UPDATE 更新
  20. QUECTEL上海移远4G通讯CAT4模组EC20CEFAG模块串口调试指南之03【EC20模组基础串口指令说明】

热门文章

  1. 【前端】Echarts的scatter3D各个属性具体含义
  2. 【Qt】main.cpp:1:24: fatal error: QApplication: No such file or directory
  3. LeetCode 整数转换英文表示(递归)
  4. 用多协议换采集器制作家用负氧离子除醛设备(带空气检测传感器)
  5. 抖音小店发货保障商品是什么?
  6. 国密wireshark下载
  7. 如何让下载并安装wireshark
  8. 【Java】Java GUI制作Windows桌面程序,利用windowbuilder生成界面,使用exe4j打包成可执行文件,使用Inno Setup打包成安装包,超级详细教程
  9. 安装Linux CentOS 7.7
  10. centos6.5 离线升级openssh7.7