当前位置: 代码迷 >> 综合 >> Java——自定义类实现 Linklist,Stack,Queue
  详细解决方案

Java——自定义类实现 Linklist,Stack,Queue

热度:89   发布时间:2023-12-23 21:24:28.0

目录

一、自定义类实现链表

二、自定义类实现栈

三、自定义类实现队列


一、自定义类实现链表

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;}@Overridepublic 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;}@Overridepublic 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.手绘:

  相关解决方案