数据结构课程实践(1)

Objects.equals(next, that.next);

}

@Override

public int hashCode() {

return Objects.hash(name, score, StudentNo, age, sex, next);

}

@Override

public String toString() {

return “学生学号: " + this.getStudentNo() +” 学生姓名: " + this.getName()+ " 性别 "+ getSex()+ " 本次成绩: " + getScore();

}

}

package com.课程实践;

import javax.net.ssl.SNIHostName;

import java.util.InputMismatchException;

import java.util.Scanner;

public class StudentList {

StudentNode head;

int N;

public StudentList() {

this.head = null;

N = 0;

}

// 按着成绩插入

public void addStudent(String name,Integer score ,int studentNo,int age,char sex){

StudentNode student = new StudentNode(name,studentNo,age,sex,score,null);

if (head == null){

head = student;

this.N++;

System.out.println(“添加成功”);

return;

}

if (score.compareTo(head.getScore()) > 0) {

student.setNext(head);

head = student;

this.N++;

System.out.println(“添加成功”);

return;

}

StudentNode node = head.getNext();

StudentNode preNode = head;

if (node == null){

head.setNext(student);

this.N++;

System.out.println(“添加成功”);

return;

}

while(node != null){

if (score.compareTo(node.getScore()) > 0){

preNode.setNext(student);

student.setNext(node);

this.N++;

System.out.println(“添加成功”);

return;

}else{

node = node.getNext();

preNode = preNode.getNext();

}

}

preNode.setNext(student);

this.N++;

System.out.println(“添加成功”);

return;

}

public void addStudent(StudentNode student){

if (head == null){

head = student;

this.N++;

System.out.println(“添加成功”);

return;

}

if (student.getScore().compareTo(head.getScore()) > 0) {

student.setNext(head);

head = student;

this.N++;

System.out.println(“添加成功”);

return;

}

StudentNode node = head.getNext();

StudentNode preNode = head;

if (node == null){

head.setNext(student);

this.N++;

System.out.println(“添加成功”);

return;

}

while(node != null){

if (student.getScore().compareTo(node.getScore()) > 0){

preNode.setNext(student);

student.setNext(node);

this.N++;

System.out.println(“添加成功”);

return;

}else{

node = node.getNext();

preNode = preNode.getNext();

}

}

preNode.setNext(student);

this.N++;

System.out.println(“添加成功”);

return;

}

// 学生信息删除

public void deleteStudent(Integer studentNo){

StudentNode node = head.getNext();

StudentNode preNode = head;

if (studentNo.equals(preNode.getStudentNo())) {

head = head.getNext();

this.N --;

System.out.println(“删除成功”);

System.out.println("删除后学生个数 ");

return;

}

while(node != null){

if (studentNo.equals(node.getStudentNo())){

preNode.setNext(node.getNext());

System.out.println(“删除成功”);

this.N --;

System.out.println();

return;

}else{

node = node.getNext();

preNode = preNode.getNext();

}

}

System.out.println(“删除失败,无此学生”);

System.out.println("删除后学生个数 ");

}

public void modifyStudent(Integer studentNo,String newName){

StudentNode node = head;

while(node != null){

if (studentNo.equals(node.getStudentNo())){

node.setName(newName);

System.out.println(“修改姓名成功”);

System.out.println("删除后学生个数 ");

return;

}else{

node = node.getNext();

}

}

System.out.println(“修改失败,无此学生”);

System.out.println("删除后学生个数 ");

}

public void modifyStudent(Integer studentNo,int score) {

StudentNode node = head;

while (node != null) {

if (studentNo.equals(node.getStudentNo())) {

node.setScore(score);

deleteStudent(studentNo);

addStudent(node);

System.out.println(“修改成绩成功,并重新排名”);

System.out.println("删除后学生个数 ");

return;

} else {

node = node.getNext();

}

}

System.out.println(“修改失败,无此学生”);

System.out.println("删除后学生个数 ");

}

public void showAllStudents(){

StudentNode currentNode = head;

int count = 1;

while (currentNode != null){

System.out.print(currentNode);

System.out.println(" 本次排名 " + count);

count++;

currentNode = currentNode.getNext();

}

}

public void findStudent(Integer studentNo){

StudentNode currentNode = head;

int count = 1;

while(currentNode != null){

if (studentNo.equals(currentNode.getStudentNo())){

System.out.print(currentNode);

System.out.println(" 本次排名 " + count);

return;

}else{

currentNode = currentNode.getNext();

count++;

}

}

System.out.println(“查询失败,没有此学生”);

System.out.println("删除后学生个数 ");

}

public Integer getAns(){

Scanner scanner = new Scanner(System.in);

Integer ans;

try {

ans = scanner.nextInt();

}catch (InputMismatchException e){

System.out.println(“请正确输入您要选择的编号”);

ans = getAns();

}

return ans;

}

public Integer getTrueStudentNo(){

Scanner scanner = new Scanner(System.in);

Integer No;

try {

No = scanner.nextInt();

}catch (InputMismatchException e){

System.out.println(“请正确输入学号”);

No = getTrueStudentNo();

}

return No;

}

public Integer getTrueAge(){

Scanner scanner = new Scanner(System.in);

Integer age;

try {

age = scanner.nextInt();

}catch (InputMismatchException e){

System.out.println(“请正确输入年龄”);

age = getTrueAge();

}

return age;

}

public Integer getTrueScore(){

Scanner scanner = new Scanner(System.in);

Integer ans;

try {

ans = scanner.nextInt();

}catch (InputMismatchException e){

System.out.println(“请正确输入分数”);

ans = getTrueScore();

}

return ans;

}

public String getTrueName(){

Scanner scanner = new Scanner(System.in);

String name;

try {

name = scanner.next();

}catch (InputMismatchException e){

System.out.println(“请正确输入学号”);

name = getTrueName();

}

return name;

}

public char getTrueSex(){

Scanner scanner = new Scanner(System.in);

String sex;

try {

sex = scanner.next();

}catch (InputMismatchException e){

System.out.println(“请正确输入性别”);

sex = String.valueOf(getTrueSex());

}

return sex.charAt(0);

}

public char getWord(){

Scanner scanner = new Scanner(System.in);

String word;

try {

word = scanner.next();

}catch (InputMismatchException e){

System.out.println(“请输入Y/N”);

word = String.valueOf(getWord());

}

return word.charAt(0);

}

/**

  • 一次性输入多个学生信息

*/

public void inputManyStudents(){

Integer studentNo,age,score;

char sex,continueWord;

String name;

while(true) {

System.out.println(“请输入 学生姓名”);

name = getTrueName();

System.out.println(“请输入 学生学号”);

studentNo = getTrueStudentNo();

System.out.println(“请输入 学生年龄”);

age = getTrueAge();

System.out.println(“请输入 学生性别”);

sex = getTrueSex();

System.out.println(“请输入 学生成绩”);

score = getTrueScore();

StudentNode student = new StudentNode(name, studentNo, age, sex, score, null);

addStudent(student);

System.out.println(“是否继续录入学生信息?(Y/N)”);

continueWord = getWord();

if (continueWord == ‘N’) {

System.out.println(“录入结束”);

break;

}

}

}

}

package com.课程实践;

import java.util.Scanner;

public class StudentManagementSystemMain {

public static void main(String[] args) {

Scanner scanner = new Scanner(System.in);

String name;

Integer studentNo,age,score,ans = 0;

StudentList students = new StudentList();

StudentNode student;

char sex;

System.out.println(“=欢迎使用计算机1911学生信息管理系统=”);

while(true){

System.out.println(“请选择您要使用的功能:”);

System.out.println(“1.录入多个学生信息”);

System.out.println(“2.插入学生信息”);

System.out.println(“3.修改学生姓名”);

System.out.println(“4.修改学生成绩”);

System.out.println(“5.删除学生信息”);

System.out.println(“6.查看某个学生信息”);

System.out.println(“7.查看所有学生信息”);

System.out.println(“0.退出学生系统”);

System.out.println();

System.out.println();

ans = students.getAns();

switch(ans){

case 1:

students.inputManyStudents();

break;

case 2:

System.out.println(“请输入 学生姓名”);

name = students.getTrueName();

System.out.println(“请输入 学生学号”);

studentNo = students.getTrueStudentNo();

System.out.println(“请输入 学生年龄”);

age = students.getTrueAge();

System.out.println(“请输入 学生性别”);

sex = students.getTrueSex();

System.out.println(“请输入 学生成绩”);

score = students.getTrueScore();

student = new StudentNode(name,studentNo,age,sex,score,null);

students.addStudent(student);

break;

case 3:

System.out.println(“请输入要修改的学生的学号,以及修改后的姓名”);

System.out.println();

studentNo = students.getTrueStudentNo();

name = students.getTrueName();

students.modifyStudent(studentNo,name);

break;

case 4:

System.out.println(“请输入要修改的学生的学号,以及修改后的成绩”);

System.out.println();

studentNo = students.getTrueStudentNo();

score = students.getTrueScore();

students.modifyStudent(studentNo,score);

break;

case 5:

System.out.println(“请输入要删除的学生的学号”);

System.out.println();

studentNo = students.getTrueStudentNo();

students.deleteStudent(studentNo);

break;

case 6:

System.out.println(“请输入要查看信息的学生的学号”);

System.out.println();

studentNo = students.getTrueStudentNo();

students.findStudent(studentNo);

break;

case 7:

System.out.println(“接下来是所有学生的信息(以成绩降序排列)”);

System.out.println();

students.showAllStudents();

break;

case 0:

System.out.println(“欢迎下次使用本系统”);

System.out.println(“再见”);

return;

}

}

}

}

5
(1)、建立二叉树实现中序遍历

(含递归和非递归算法实现)。要求:二叉树中结点的值存放于一个一维数组T[n]中,T[0]开始顺序读出各结点的值,建立该二叉树的二叉链表表示。 或能够从键盘上输入树的各个结点值,建立二叉树的二叉链表存储表示,输出中序遍历结果。(难度系数为2)

public class Tree {

private class Node{

Integer data;

Integer left;

Integer right;

public Node(Integer data) {

this.data = data;

this.left = -1;

this.right = -1;

}

}

Node[] nodes;

int length;

int root;

public Tree() {

this.nodes = new Node[100];

this.length = 0;

this.root = -1;

}

public void insert(int t){

root = insert(root,t);

}

private int insert(int k,int t){

if (k == -1){

k = length;

nodes[k] = new Node(t);

length++;

return k;

}else{

if (t <= nodes[k].data){

nodes[k].left = insert(nodes[k].left,t);

}else{

nodes[k].right = insert(nodes[k].right,t);

}

}

return k;

}

/**

  • 中序遍历(递归)

*/

public void midOrderRecursion(){

midOrderRecursion(root);

}

public void midOrderRecursion(int k){

if (k == -1) return;

midOrderRecursion(nodes[k].left);

System.out.println(nodes[k].data);

midOrderRecursion(nodes[k].right);

}

/**

  • 中序遍历(非递归)

*/

public void midOrder(){

Stack stack = new Stack<>();

int p = root;

while(p != -1 || !stack.empty()){

while(p != -1){

stack.push§;

p = nodes[p].left;

}

if (!stack.empty()){

p = stack.pop();

System.out.println(nodes[p].data);

p = nodes[p].right;

}

}

}

public static void main(String[] args) {

Tree tree = new Tree();

System.out.println(“请输入节点个数”);

Scanner scanner = new Scanner(System.in);

int n = scanner.nextInt();

System.out.println(“请输入节点的值”);

for (int i = 0; i < n; i++) {

tree.insert(scanner.nextInt());

}

System.out.println(“中序遍历(递归):”);

tree.midOrderRecursion();

System.out.println(“中序遍历(非递归)”);

tree.midOrder();

}

}

在这里插入图片描述

(2)、快速排序。(3)

package com.课程实践.Fifth;

import java.util.Random;

public class QuickSort2 {

public static void main(String[] args) {

int[] array1 = randomArray(10);

int[] array2 = randomArray(10);

quickSort(array1);

System.out.println(“快速排序后:”);

for (int i = 0; i < array1.length; i++) {

System.out.print(array1[i] +" ");

}

BubbleSort(array2);

System.out.println();

System.out.println(“冒泡排序后”);

for (int i = 0; i < array1.length; i++) {

System.out.print(array2[i] +" ");

}

}

public static int[] randomArray(int maxn){

Random random = new Random();

int[] a = new int[maxn];

for (int i = 0; i < a.length; i++) {

a[i] = random.nextInt(100);

}

return a;

}

public static void quickSort(int[] a){

int l = 0,r = a.length-1;

quickSort(l,r,a);

}

public static void quickSort(int l,int r,int[] a){

if (l >= r) return;

int mid = (l + r) / 2;

int i = l -1,j = r + 1;

while(i < j){

do{

i++;

}while(a[i] < a[mid]);

do{

j–;

}while(a[j] > a[mid]);

if (i < j) {

int temp = a[i];

a[i] = a[j];

a[j] = temp;

}

}

quickSort(l,j,a);

quickSort(j+1,r,a);

}

public static void BubbleSort(int[] a){

for(int i = a.length - 1;i > 0 ;i–){

for (int j = 0; j < i ; j++) {

if (a[j] > a[j+1]){

int temp = a[j];

a[j] = a[j+1];

a[j+1] = temp;

}

}

}

}

}

在这里插入图片描述

(3)、堆排序(3)

任务:编程实现线性表基础上的堆排序,并输出排序结果数据可通过随机函数随机生成。(难度系数为3)

package com.课程实践.Fifth;

public class Heap3 <T extends Comparable>{

private T[] items;

private int length;

public Heap3(int capacity) {

this.length = 0;

items = (T[])new Comparable[capacity + 1];

}

/**

  • 比较两个节点的大小

  • @param i

  • @param j

  • @return

*/

private boolean less(int i,int j){

return items[i].compareTo(items[j]) < 0;

}

private void swap(int i,int j){

T temp = items[i];

items[i] = items[j];

items[j] = temp;

}

public void insert(T t){

items[++length] = t;

swim(length);

}

// 上浮算法

private void swim(int k){

while( k > 1){

if (less(k/2,k)) swap(k,k/2);

k /= 2;

}

}

public T deleteMax(){

T max = items[1];

swap(1,length);

items[length] = null;

length–;

sink(1);

return max;

}

private void sink(int k){

while(k*2 <= length){

int max;

if(k*2+1 <= length){

if (less(k2,k2+1)) max = k*2+1;

else max = k*2;

}else{

max = k*2;

}

if (less(k,max)) swap(k,max);

else return;

}

}

}

package com.课程实践.Fifth;

import java.util.Arrays;

import java.util.Random;

public class HeapSort3 {

/**

  • 对source数组中的数据从小到大排列

  • @param source

*/

public static void sort(Comparable[] source) {

Comparable[] heap = new Comparable[source.length + 1];

createHeap(source, heap);

int N = heap.length - 1;

while (N != 1) {

wrap(heap, 1, N);

N–;

sink(heap, 1, N);

}

System.arraycopy(heap, 1, source, 0, source.length);

}

private static void createHeap(Comparable[] source, Comparable[] heap) {

System.arraycopy(source, 0, heap, 1, source.length);

// 对堆中元素做下沉处理

for (int i = (heap.length - 1) / 2; i > 0; i–) {

sink(heap, i, heap.length - 1);

}

}

/**

  • 判断heap堆中索引i处的元素是否小于索引j处的元素

  • @param heap

  • @param i

  • @param j

  • @return

*/

private static boolean less(Comparable[] heap, int i, int j) {

return heap[i].compareTo(heap[j]) < 0;

}

/**

  • 交换heap堆中i索引和j索引处的值

  • @param heap

  • @param i

  • @param j

*/

private static void wrap(Comparable[] heap, int i, int j) {

Comparable temp = heap[i];

heap[i] = heap[j];

heap[j] = temp;

}

/**

  • 在heap堆中,对target处元素做下沉,范围是0~range

  • @param heap

  • @param target

  • @param range

*/

private static void sink(Comparable[] heap, int target, int range) {

while (2 * target <= range) {

int max;

if (2 * target + 1 <= range) {

if (less(heap, 2 * target, 2 * target + 1)) max = 2 * target + 1;

else max = 2 * target;

} else {

max = 2 * target;

}

if (less(heap, target, max)) wrap(heap, max, target);

target = max;

}

}

public static Integer[] randomArray(int N) {

Random random = new Random();

Integer[] array = new Integer[N];

for(int i = 0;i < N;i++){

array[i] = random.nextInt(100);

}

return array;

}

public static void main(String[] args) {

Integer[] array = randomArray(10);

sort(array);

System.out.println(Arrays.toString(array));

}

}

在这里插入图片描述

(4)、直接插入排序(2)

任务:编程序实现线性表基础上的排序,并输出排序结果。数据可通过随机函数随机生成,也可通过键盘直接输入。(难度系数为2)

package com.课程实践.Fifth;

import java.util.Arrays;

import java.util.Random;

import java.util.Scanner;

public class InsertionSort4 {

public static void sort(Comparable[] a){

for (int i = 1; i < a.length; i++) {

for (int j = i; j > 0 ; j–) {

if (great(a,j-1,j)) wrap(a,j-1,j);

}

}

}

private static void wrap(Comparable[] a,int i,int j){

Comparable temp = a[i];

a[i] = a[j];

a[j] = temp;

}

private static boolean great(Comparable[] a,int i,int j){

return a[i].compareTo(a[j]) > 0;

}

public static void main(String[] args) {

System.out.println(“请选择排序数组”);

System.out.println(“1.自己输入”);

System.out.println(“2.随机数生成(十个数)”);

Scanner scanner = new Scanner(System.in);

int ans = scanner.nextInt();

Integer[] array = new Integer[10];

if (ans == 1){

System.out.println(“请输入十个数字”);

for (int i = 0; i < 10; i++) {

array[i] = scanner.nextInt();

}

}else{

Random random = new Random();

for (int i = 0; i < 10; i++) {

array[i] = random.nextInt(100);

}

}

sort(array);

System.out.println(Arrays.toString(array));

}

}

在这里插入图片描述

(5)、建立二叉树实现后序遍历(含递归和非递归算法实现)。

要求:二叉树中结点的值存放于一个一维数组T[n]中,T[0]开始顺序读出各结点的值,建立该二叉树的二叉链表表示。 或能够从键盘上输入树的各个结点值,建立二叉树的二叉链表存储表示,输出后序遍历结果。(难度系数为3)

package com.课程实践.Fifth;

import java.util.Scanner;

import java.util.Stack;

public class Tree {

private class Node{

Integer data;

Integer left;

Integer right;

public Node(Integer data) {

this.data = data;

this.left = -1;

this.right = -1;

}

}

Node[] nodes;

int length;

int root;

public Tree() {

this.nodes = new Node[100];

this.length = 0;

this.root = -1;

}

public void insert(int t){

root = insert(root,t);

}

private int insert(int k,int t){

if (k == -1){

k = length;

nodes[k] = new Node(t);

length++;

return k;

}else{

if (t <= nodes[k].data){

nodes[k].left = insert(nodes[k].left,t);

}else{

nodes[k].right = insert(nodes[k].right,t);

}

}

return k;

}

/**

  • 后续遍历(递归)

*/

public void afterOrderRecursion(){

afterOrderRecursion(root);

}

public void afterOrderRecursion(int k){

if (k == -1) return;

afterOrderRecursion(nodes[k].left);

afterOrderRecursion(nodes[k].right);

System.out.println(nodes[k].data);

}

public static void main(String[] args) {

Tree tree = new Tree();

System.out.println(“请输入节点个数”);

Scanner scanner = new Scanner(System.in);

int n = scanner.nextInt();

System.out.println(“请输入节点的值”);

for (int i = 0; i < n; i++) {

tree.insert(scanner.nextInt());

}

System.out.println(“后续遍历(递归):”);

tree.afterOrderRecursion();

}

}

在这里插入图片描述

(6)建立二叉树实现先序遍历(含递归和非递归算法实现)。

要求:二叉树中结点的值存放于一个一维数组T[n]中,T[0]开始顺序读出各结点的值,建立该二叉树的二叉链表表示。 或能够从键盘上输入树的各个结点值,建立二叉树的二叉链表存储表示,输出先序遍历结果。(难度系数为3)

package com.课程实践.Fifth;

import java.util.Scanner;

import java.util.Stack;

public class Tree {

private class Node{

Integer data;

Integer left;

Integer right;

public Node(Integer data) {

this.data = data;

this.left = -1;

this.right = -1;

}

}

Node[] nodes;

int length;

int root;

public Tree() {

this.nodes = new Node[100];

this.length = 0;

this.root = -1;

}

public void insert(int t){

root = insert(root,t);

}

private int insert(int k,int t){

if (k == -1){

k = length;

nodes[k] = new Node(t);

length++;

return k;

}else{

if (t <= nodes[k].data){

nodes[k].left = insert(nodes[k].left,t);

}else{

nodes[k].right = insert(nodes[k].right,t);

}

}

return k;

}

/**

  • 先序遍历(递归)

*/

public void preOrderRecursion(){

preOrderRecursion(root);

}

public void preOrderRecursion(int k){

if (k == -1) return;

System.out.println(nodes[k].data);

preOrderRecursion(nodes[k].left);

preOrderRecursion(nodes[k].right);

}

/**

  • 先序遍历(非递归)

*/

public void preOrder(){

Stack stack = new Stack();

int p = this.root;

while(p != -1 || !stack.empty()){

while (p != -1){

System.out.println(nodes[p].data);

stack.push§;

p = nodes[p].left;

}

if (!stack.empty()){

p = stack.pop();

p = nodes[p].right;

}

}

}

public static void main(String[] args) {

Tree tree = new Tree();

System.out.println(“请输入节点个数”);

Scanner scanner = new Scanner(System.in);

int n = scanner.nextInt();

System.out.println(“请输入节点的值”);

for (int i = 0; i < n; i++) {

tree.insert(scanner.nextInt());

}

System.out.println(“前序遍历(递归):”);

tree.preOrderRecursion();

System.out.println(“前序遍历(非递归)”);

tree.preOrder();

}

}

在这里插入图片描述

连通网络的最小生成树

要求:通过输入图的顶点和边的信息,建立连通网络的邻接表或邻接矩阵存储结构,求出其最小生成树。 (难度系数为3)

package com.课程实践.Fifth;

import java.util.Scanner;

public class Prim {

final static int N = 510;

final static int INT = Integer.MAX_VALUE;

static int n,m;

static int g[][] = new int[N][N];

static int dist[] = new int[N];

static boolean st[] = new boolean[N];

public static int prim(){

for (int i = 0; i < dist.length; i++) dist[i] = INT;

int ans = 0;

for (int i = 0;i < n;i++){

int t = -1;

for(int j = 1;j <= n;j++){

if (!st[j] && (t == -1 || dist[t] > dist[j])) t = j;

}

if (i != 0 && dist[t] == INT) return INT;

if (i != 0) ans += dist[t];

for (int j = 1; j <= n; j++) {

dist[j] = Integer.min(dist[j],g[t][j]);

}

st[t] = true;

}

return ans;

}

public static void main(String[] args) {

Scanner scanner = new Scanner(System.in);

n = scanner.nextInt();

m = scanner.nextInt();

for (int i = 0;i < g.length;i++){

for(int j = 0;j < g[0].length;j++){

g[i][j] = INT;

}

}

while (m > 0){

int a,b,c;

a = scanner.nextInt();

b = scanner.nextInt();

c = scanner.nextInt();

g[a][b] = g[b][a] = Integer.min(c,g[a][b]);

m–;

}

int t = prim();

if (t == INT) System.out.println(“不能构成树”);

else System.out.printf(“最小生成树的值” + t);

}

}

(11)、单链表的逆置(2)

要求:逆置后的单链表是一个新的单链表,但表中的结点不是新生成的,而是从原链表中得到。(难度系数为2)

package com.课程实践.Fifth;

public class LinkedList{

// 内部节点类

private class Node{

T item;

Node next;

public Node(T item, Node next) {

this.item = item;

this.next = next;

}

}

Node head;

int N;

public LinkedList() {

this.head = null;

this.N = 0;

}

public LinkedList reverseLinkedList(){

Node oldNode = this.head;

LinkedList newList = new LinkedList();

while(oldNode != null){

Node node = oldNode;

oldNode = oldNode.next;

if (newList.head == null) {

newList.head = node;

newList.head.next = null;

}

else {

node.next = newList.head;

newList.head = node;

}

}

Node current = newList.head;

return newList;

}

public void insert(T t){

Node node = head;

Node newNode = new Node(t,null);

if (head == null) {

head = newNode;

this.N++;

return;

}

while(node.next != null){

node = node.next;

}

node.next = newNode;

this.N–;

}

public void display(){

Node node = this.head;

while(node != null){

System.out.println(node.item);

node = node.next;

}

}

public static void main(String[] args) {

LinkedList oddList = new LinkedList<>();

oddList.insert(1);

oddList.insert(2);

oddList.insert(3);

oddList.insert(4);

oddList.insert(5);

System.out.println(“逆转前:”);

oddList.display();

System.out.println(“就地逆转后:”);

LinkedList newList = oddList.reverseLinkedList();

newList.display();

}

}

在这里插入图片描述

(14)、建立二叉树,实现层次遍历。

package com.课程实践.Fifth;

import java.util.Scanner;

import java.util.Stack;

public class Tree {

private class Node{

Integer data;

Integer left;

Integer right;

public Node(Integer data) {

this.data = data;

this.left = -1;

this.right = -1;

}

}

Node[] nodes;

int length;

int root;

public Tree() {

this.nodes = new Node[100];

this.length = 0;

this.root = -1;

}

public void insert(int t){

root = insert(root,t);

}

private int insert(int k,int t){

if (k == -1){

k = length;

nodes[k] = new Node(t);

length++;

return k;

}else{

if (t <= nodes[k].data){

nodes[k].left = insert(nodes[k].left,t);

}else{

nodes[k].right = insert(nodes[k].right,t);

}

}

return k;

}

public void layerOrder(){

for (int i = 0; i < length; i++) {

System.out.println(nodes[i].data);

}

}

public static void main(String[] args) {

Tree tree = new Tree();

System.out.println(“请输入节点个数”);

Scanner scanner = new Scanner(System.in);

int n = scanner.nextInt();

System.out.println(“请输入节点的值”);

for (int i = 0; i < n; i++) {

tree.insert(scanner.nextInt());

}

System.out.println(“层序遍历”);

tree.layerOrder();

}

要求:二叉树中结点的值存放于一个一维数组T[n]中,T[0]开始顺序读出各结点的值,建立该二叉树的二叉链表表示。 或能够从键盘上输入树的各个结点值,建立二叉树的二叉链存储表示,输出层次遍历结果。(难度系数为2)

在这里插入图片描述

(13)、循环队列(2)

package com.课程实践.Fifth;

public class CycleQueue {

T[] items;

int front,rear;

public CycleQueue(int maxSize){

items = (T[])new Object[maxSize];

front = rear = 0;

}

public boolean isEmpty(){

return front == rear;

}

public void enqueue(T t) throws Exception {

if ((rear+1)%items.length == front) throw new Exception(“队列已满”);

else items[rear] = t;
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)

img
线程、数据库、算法、JVM、分布式、微服务、框架、Spring相关知识

一线互联网P7面试集锦+各种大厂面试集锦

学习笔记以及面试真题解析

《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!
,t);

}

private int insert(int k,int t){

if (k == -1){

k = length;

nodes[k] = new Node(t);

length++;

return k;

}else{

if (t <= nodes[k].data){

nodes[k].left = insert(nodes[k].left,t);

}else{

nodes[k].right = insert(nodes[k].right,t);

}

}

return k;

}

public void layerOrder(){

for (int i = 0; i < length; i++) {

System.out.println(nodes[i].data);

}

}

public static void main(String[] args) {

Tree tree = new Tree();

System.out.println(“请输入节点个数”);

Scanner scanner = new Scanner(System.in);

int n = scanner.nextInt();

System.out.println(“请输入节点的值”);

for (int i = 0; i < n; i++) {

tree.insert(scanner.nextInt());

}

System.out.println(“层序遍历”);

tree.layerOrder();

}

要求:二叉树中结点的值存放于一个一维数组T[n]中,T[0]开始顺序读出各结点的值,建立该二叉树的二叉链表表示。 或能够从键盘上输入树的各个结点值,建立二叉树的二叉链存储表示,输出层次遍历结果。(难度系数为2)

在这里插入图片描述

(13)、循环队列(2)

package com.课程实践.Fifth;

public class CycleQueue {

T[] items;

int front,rear;

public CycleQueue(int maxSize){

items = (T[])new Object[maxSize];

front = rear = 0;

}

public boolean isEmpty(){

return front == rear;

}

public void enqueue(T t) throws Exception {

if ((rear+1)%items.length == front) throw new Exception(“队列已满”);

else items[rear] = t;
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。[外链图片转存中…(img-MqM5aeyk-1713714652266)]

[外链图片转存中…(img-7cS9argJ-1713714652266)]

[外链图片转存中…(img-FAKfw9Ch-1713714652267)]

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)

img
线程、数据库、算法、JVM、分布式、微服务、框架、Spring相关知识

[外链图片转存中…(img-TvOqRgFq-1713714652267)]

一线互联网P7面试集锦+各种大厂面试集锦

[外链图片转存中…(img-fJt7WZf9-1713714652267)]

学习笔记以及面试真题解析

[外链图片转存中…(img-64q68gJ3-1713714652267)]

《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!

  • 18
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值