哪位大神能够帮忙解决一下啊,求求了
使用Java模拟创建一个单项链表,数据域为Student类,题主是需要代码吗:
Manage类:
package com.ht.servlet;
import java.sql.*;
public class Manager {
public static void main(String[] args) {
Connection connection;
String driver = "com.mysql.cj.jdbc.Driver";
String url = "jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC";
String user = "root";
String password = "123456";
try {
Class.forName(driver);
connection = DriverManager.getConnection(url,user,password);
select(connection);
} catch (Exception e) {
e.printStackTrace();
}
}
public static void select(Connection con) throws SQLException {
Statement statement = con.createStatement();
String sql = "select * from student";
ResultSet resultSet = statement.executeQuery(sql);
int sid;
String sname;
int age;
int grade;
String hobby;
//初始化链表
Link link= new Link();
while (resultSet.next()){
sid = resultSet.getInt("sid");
sname = resultSet.getString("sname");
age = resultSet.getInt("age");
grade = resultSet.getInt("grade");
hobby = resultSet.getString("hobby");
System.out.println("sid:"+sid+" "+"sname:"+sname
+" "+"age:"+age+" "+"grade:"+grade+" "+"hobby:"
+hobby
);
//封装数据域Student
Student stu = new Student(sid,sname,age,grade,hobby);
link.addNode(stu);//添加节点
}
link.display();//遍历所有节点
resultSet.close();
}
}
Link链表类:
package com.ht.servlet;
public class Link {
Node head;// 头节点
public Link() { // 初始化头结点
head = new Node();
}
/**
* 添加节点(往链表后面添加节点)
*
* @param name
*/
public void addNode(Student stu) {
Node curr = head;// 把头结点赋给当前节点
Node newNode = new Node(stu);// 构造新节点
while (true) {
if (curr.getNext() == null) {
curr.setNext(newNode);// 给当前节点设置下一个节点为新节点
break;
}
curr = curr.getNext();// 把下一个节点赋给当前节点继续循环
}
}
// 遍历链表
public void display() {
Node curr = head.getNext();// 从头节点的下一个节点开始遍历
while (curr != null) {
System.out.println(curr.getStudent().sname);
curr = curr.getNext();// 把下一个节点赋给当前节点
}
}
}
Node节点类:
package com.ht.servlet;
public class Node {
Student student;//数据域
Node next;//链域
public Node(){}
public Node(Student stu){
this.student=stu;
}
public Student getStudent() {
return student;
}
public void setStudent(Student student) {
this.student = student;
}
public Node getNext() {
return next;
}
public void setNext(Node next) {
this.next = next;
}
}
Student数据域类:
package com.ht.servlet;
public class Student {
int sid;
String sname;
int age;
int grade;
String hobby;
public Student(){}
public Student(int sid, String sname, int age, int grade, String hobby) {
super();
this.sid = sid;
this.sname = sname;
this.age = age;
this.grade = grade;
this.hobby = hobby;
}
@Override
public String toString() {
return "Student [sid=" + sid + ", sname=" + sname + ", age=" + age
+ ", grade=" + grade + ", hobby=" + hobby + "]";
}
}
//节点类
package T1;
public class SNode {
private Student stud;
private SNode next;
private SNode prior;
public SNode getPrior() {
return prior;
}
public void setPrior(SNode prior) {
this.prior = prior;
}
public SNode() {
stud=null;
prior=null;
next=null;
}
public SNode(Student stud) {
this.stud=stud;
next=null;
}
public Student getStud() {
return stud;
}
public void setStud(Student stud) {
this.stud = stud;
}
public SNode getNext() {
return next;
}
public void setNext(SNode next) {
this.next = next;
}
}
链表类
package T1;
import java.util.Scanner;
public class SLink {
SNode head;
public SLink() {
head = new SNode();
}
//添加节点
public void addNode(Student s){
SNode p = new SNode(s);
SNode h = head;
while(h.getNext() !=null){
h=h.getNext();
}
h.setNext(p);
}
//6.1. 将存储学生的链表设计为有序的,每次往链表中加学生时,按年龄排序
public void addNode2(Student s){
//新增节点
SNode p = new SNode(s);
SNode h = head;
while(h.getNext() !=null){
if(h.getNext().getStud().getAge()<=s.getAge()){
h=h.getNext();
}else{
p.setNext(h.getNext());
h.setNext(p);
break;
}
}
h.setNext(p);
}
//6.2. 将学生链表改成双向链表,完成同样的功能。
public void addNode3(Student s){
//新增节点
SNode p = new SNode(s);
SNode h = head;
while(h.getNext() !=null){
if(h.getNext().getStud().getAge()<=s.getAge()){
h=h.getNext();
}else{
p.setNext(h.getNext());
h.getNext().setPrior(p);
h.setNext(p);
p.setPrior(h);
break;
}
}
h.setNext(p);
p.setPrior(h);
}
//遍历
public void display(){
SNode p = head;
while(p.getNext() !=null){
System.out.println(p.getNext().getStud());
p= p.getNext();
}
System.out.println("-------------------------------");
System.out.println(p.getStud());
while(p.getPrior() !=null){
System.out.println(p.getPrior().getStud());
p= p.getPrior();
}
}
//按学号查找
public Student searchById(int studid){
Student s = null;
SNode p = head;
while(p.getNext() !=null){
if(p.getNext().getStud().getStudid()==studid){
s = p.getNext().getStud();
break;
}
p= p.getNext();
}
return s;
}
//按姓名查找
public Student searchByName(String name){
Student s = null;
SNode p = head;
while(p.getNext() !=null){
if(p.getNext().getStud().getName().equals(name)){
s = p.getNext().getStud();
break;
}
p= p.getNext();
}
return s;
}
//按姓名查找
public Student minAge(){
Student s = null;
SNode p = head;
if(p.getNext()==null){
return null;
}
//初始化
int age=head.getNext().getStud().getAge();
s = head.getNext().getStud();
//查找最小年龄的学生信息
while(p.getNext() !=null){
if(p.getNext().getStud().getAge()<age){
age = p.getNext().getStud().getAge();
s = p.getNext().getStud();
}
p= p.getNext();
}
return s;
}
//按学号删除
public void deleteById(int studid){
SNode p = head;
while(p.getNext() !=null){
if(p.getNext().getStud().getStudid()==studid){
p.setNext(p.getNext().getNext());
break;
}
p= p.getNext();
}
}
//按学号删除
public void deleteByName(String name){
SNode p = head;
while(p.getNext() !=null){
if(p.getNext().getStud().getName().equals(name)){
p.setNext(p.getNext().getNext());
break;
}
p= p.getNext();
}
}
//交换函数
public void swap(int studid1, int studid2){
SNode t1,t2,t3,t4,t5;
/*
* t1:头节点
* t2:p1
* t3:p2
* t4:p3
* */
t1=t2=t3=t4=t5=null;
SNode p = head;
int cnt1=0,cnt2=0;
while(p.getNext() !=null){
cnt1++;
if(p.getNext().getStud().getStudid()==studid1){
t1=p;
t2=p.getNext();
break;
}
p=p.getNext();
}
p = head;
while(p.getNext() !=null){
cnt2++;
if(p.getNext().getStud().getStudid()==studid2){
t3=p;
t4=p.getNext();
break;
}
p=p.getNext();
}
System.out.println("cnt1="+cnt1+";cnt2="+cnt2);
/*2个相邻
* t1是前面一个
* t2,t3是同一个
*/
if(cnt1+1==cnt2){
t2.setNext(t4.getNext());
t1.setNext(t4);
t4.setNext(t2);
}else if(cnt2+1==cnt1){
//t3,t4,t1,t2
t4.setNext(t2.getNext());
t3.setNext(t2);
t2.setNext(t4);
}else{
t1.setNext(t4);
t5=t4.getNext();
t4.setNext(t2.getNext());
t2.setNext(t5);
t3.setNext(t2);
}
}
//不交换节点,只交换节点内的值
public void swapValue(int studid1, int studid2){
SNode t1,t2;
t1=t2=null;
SNode p = head;
while(p.getNext() !=null){
if(p.getNext().getStud().getStudid()==studid1){
t1=p.getNext();
}
if(p.getNext().getStud().getStudid()==studid2){
t2=p.getNext();
}
if(t1!=null && t2!=null)
break;
p=p.getNext();
}
//临时保存t1的学生资料
Student s = t1.getStud();
//把t2节点中的学生资料赋值给t1节点
t1.setStud(t2.getStud());
//把临时变量中的学生资料赋值给t2;
t2.setStud(s);
}
public static void main(String[] args) {
SLink link = new SLink();
Student s1 = new Student(1001,"张三0",118,"宏图1601班");
Student s2 = new Student(1002,"张三1",82,"宏图1601班");
Student s3 = new Student(1003,"张三2",30,"宏图1602班");
Student s4 = new Student(1004,"张三3",33,"宏图1603班");
Student s5 = new Student(1005,"张三4",44,"宏图1604班");
link.addNode3(s1);
link.addNode3(s2);
link.addNode3(s3);
link.addNode3(s4);
link.addNode3(s5);
link.display();
//5.3. 可以按学号,名字查找学生
/*
Scanner input = new Scanner(System.in);
System.out.println("请输入你要查询的学生姓名:");
// int studid = input.nextInt();
String name = input.next();
Student t = link.searchByName(name);
System.out.println("你查找的姓名为:"+name+"的信息如下:");
if(t==null){
System.out.println("查无此人");
}else{
System.out.println(t);
}
*/
//5.4. 查出节点中年龄最小的学生
// System.out.println("年龄最小的学生信息如下:");
// System.out.println(link.minAge());
// //5.5. 可以按学号,名字删除节点
// Scanner input = new Scanner(System.in);
// System.out.println("请输入你要删除的学生姓名:");
//// int studid = input.nextInt();
//// link.deleteById(studid);
// String name = input.next();
// link.deleteByName(name);
// link.display();
// String name = input.next();
// Student t = link.searchByName(name);
// 5.7. 给定两个学生的学号,将他们的位置互换一下
// link.swap(1005, 1004);
// link.display();
}
}
学生类
package T1;
import java.io.Serializable;
public class Student implements Serializable{
private int studid;
private String name;
private int age;
private String className;
public Student() {
}
public Student(int studid,String name,int age,String className) {
this.studid = studid;
this.name = name;
this.age = age;
this.className = className;
}
public int getStudid() {
return studid;
}
public void setStudid(int studid) {
this.studid = studid;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getClassName() {
return className;
}
public void setClassName(String className) {
this.className = className;
}
@Override
public String toString() {
return "学号:"+this.studid +",姓名:"+this.name+",年龄:"+this.age +",班级:"+this.className;
}
}
package com.firstday;
import java.sql.*;
public class Manager {
public static void main(String[] args) {
Connection connection;
String driver="com.mysql.cj.jdbc.Driver";
String url="jdbc:mysql://localhost:3306/test";
String user="root";
String password="root";
try {
Class.forName(driver);
connection= DriverManager.getConnection(url,user,password);
select(connection);
}catch (
ClassNotFoundException | SQLException e){
e.printStackTrace();
}
}
public static void select(Connection con) throws SQLException {
Statement statement = con.createStatement();
String sql = "select * from student";
ResultSet resultSet = statement.executeQuery(sql);
int sid;
String sname;
int age;
int grade;
String hobby;
while (resultSet.next()){
sid = resultSet.getInt("sid");
sname = resultSet.getString("sname");
age = resultSet.getInt("age");
grade = resultSet.getInt("grade");
hobby = resultSet.getString("hobby");
System.out.println("sid:"+sid+" "+"sname:"+sname
+" "+"age:"+age+" "+"grade:"+grade+" "+"hobby:"
+hobby
);
}
resultSet.close();
}
}
您好,我是有问必答小助手,您的问题已经有小伙伴解答了,您看下是否解决,可以追评进行沟通哦~
如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~
ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632