Java 链表、栈、队列底层实现原理

本文为转载--原文链接: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.手绘:

发布了23 篇原创文章 · 获赞 0 · 访问量 2948

猜你喜欢

转载自blog.csdn.net/kris_lh123/article/details/101115320
今日推荐