这里是线性表的实现代码如下:
需要注意的是、输入中文的时候记得改编码方式 GBK
import java.util.Scanner;
public class Sequence_list1 {
static Node[] ListNode = new Node[100]; // 初始化 链表的长度、、
static int len; // 定义当前列表的长度、、
static Scanner input = new Scanner(System.in);
static class Node {
String stuNum;
String name;
int grade;
// Node next;
public Node() {
}
public Node(String stuNum, String name, int grade) {
this.stuNum = stuNum;
this.name = name;
this.grade = grade;
}
}
public static void main(String[] args) {
Init();
int n;
while (true) {
Init1();
n = input.nextInt();
if (n == 8) {
break;
}
execute(n);
}
}
private static void Init1() {
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("8、退出系统、、、");
}
private static void execute(int n) {
switch (n) {
case 1:
System.out.println("输入需要添加的学生个数、、、");
System.out.flush();
int a = input.nextInt();
add(a);
System.out.println("添加成功、、、");
break;
case 2:
display();
break;
case 3:
System.out.println("输入查找的学生的姓名:");
String s = input.next();
Node tmp = findName(s);
if (tmp == null) {
System.out.println("当前表中无该学生的信息!");
} else {
System.out.println("该学生的学号为:" + tmp.stuNum + " 姓名:" + tmp.name + " 成绩:" + tmp.grade);
}
break;
case 4:
System.out.println("输入查找学生的位置:");
n = input.nextInt();
Node temp = findIndex(n);
if (temp == null) {
System.out.println("输入位置不合法!");
} else {
System.out.println("学号:" + temp.stuNum + " 姓名:" + temp.name + " 成绩:" + temp.grade);
}
break;
case 5:
System.out.println("输入插入的位置:");
n = input.nextInt();
System.out.println("请分别输入学生的学号、姓名、以及成绩、、、");
String stuNum = input.next();
String sName = input.next();
int grade = input.nextInt();
insert(n, new Node(stuNum, sName, grade));
break;
case 6:
System.out.println("输出需要删除的学生的位置:");
n = input.nextInt();
Node aa = findIndex(n);
delete(n);
System.out.println("成功删除学生:" + aa.name);
break;
case 7:
System.out.print("这个表中存储的学生数为:");
System.out.println(getLength());
break;
default:
break;
}
}
private static void add(int n) {
String sName;
String stuNum;
int grade;
int start = len;
for (int i = start; i < n; i++) {
System.out.println("请分别输入学生的学号、姓名、以及成绩、、、");
stuNum = input.next();
sName = input.next();
grade = input.nextInt();
// System.out.println("stuNum:" + stuNum + " sName:" + sName + " grade:" + grade);
ListNode[i].stuNum = stuNum;
ListNode[i].name = sName;
ListNode[i].grade = grade;
len++;
}
}
private static void Init() {
for (int i = 0; i < 100; i++) {
ListNode[i] = new Node();
}
}
private static int getLength() {
return len;
}
private static Node findIndex(int index) {
if (index < 0 || index > len) {
return null;
}
return ListNode[index];
}
private static Node findName(String name) {
for (int i = 0; i < len; i++) {
if (ListNode[i].name.equals(name)) {
return ListNode[i];
}
}
return null;
}
private static void display() {
if (len == 0) {
System.out.println("当前表为空、、、");
} else {
for (int i = 0; i < len; i++) {
System.out.println("当前表中:第" + (i + 1) + "个学生、 学号:" + ListNode[i].stuNum + " 姓名:" + ListNode[i].name + " 成绩:" + ListNode[i].grade);
}
}
}
private static boolean insert(int index, Node node) {
if (len < 100) {
for (int i = len; i > index; i--) {
ListNode[i] = ListNode[i - 1];
}
ListNode[index] = node;
len++;
return true;
}
return false;
}
private static boolean delete(int value) {
if (value < 0 || value > len) {
return false;
}
for (int i = value; i < len - 1; i++) {
ListNode[i] = ListNode[i + 1];
}
len--;
return true;
}
}
链表的实现:输入中文一样要改成GBK的编码方式
import java.util.Scanner;
public class Linked_list {
static Scanner input = new Scanner(System.in);
static int len;
static Node head = null;
static class Node {
String stuName;
String name;
int grade;
Node next;
public Node() {
}
public Node(String stuName, String name, int grade) {
this.stuName = stuName;
this.name = name;
this.grade = grade;
}
public Node(String stuName, String name, int grade, Node next) {
this.stuName = stuName;
this.name = name;
this.grade = grade;
this.next = next;
}
}
public static void main(String[] args) {
int n;
while (true) {
Init();
n = input.nextInt();
if (n == 8) {
break;
}
execute(n);
}
}
private static void Init() {
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("8、退出系统、、、");
}
public static void execute(int n) {
switch (n) {
case 1:
System.out.println("输入需要添加学生的个数、");
int nn = input.nextInt();
for (int i = 0; i < nn; i++) { // 添加 nn 和学生哈、、、
add();
}
break;
case 2:
display();
break;
case 3:
System.out.print("输入需要查找学生的姓名:");
String s = input.next();
Node node = FindName(s);
if (node == null) {
System.out.println("输入的学生信息不存在、或者表为空、、");
} else {
System.out.println("该学生、学号为:" + node.stuName + " 姓名:" + node.name + " 成绩:" + node.grade);
}
break;
case 4:
System.out.print("输入查找的位置:");
int n1 = input.nextInt();
Node node1 = FindIndex(n1);
if (node1 == null) {
System.out.println("没有查找到、可能原因是、位置不符合要求、");
} else {
System.out.println("该学生、学号为:" + node1.stuName + " 姓名:" + node1.name + " 成绩:" + node1.grade);
}
break;
case 5:
System.out.println("输入学生的信息:");
String sNum, Name;
int grade;
sNum = input.next();
Name = input.next();
grade = input.nextInt();
Node node2 = new Node(sNum, Name, grade);
System.out.println("输入需要插入的位置:");
int n2 = input.nextInt();
if (InsertIndex(node2, n2)) {
System.out.println("插入成功!");
} else {
System.out.println("未知原因失败了、、");
}
break;
case 6:
System.out.println("输入想删除的位置的");
int n3 = input.nextInt();
Node node3 = deleteIndex(n3);
if (node3 == null) {
System.out.println("未知原因失败了、、");
} else {
System.out.println("删除成功!");
System.out.println("所删除的学生、学号:" + node3.name + " 姓名:" + node3.stuName + " 成绩:" + node3.grade);
}
break;
case 7:
System.out.println(getLength());
break;
default:
break;
}
}
public static void add() {
System.out.println("请输入学生的学号、姓名、以及成绩:?");
String sNum, Name;
int grade;
sNum = input.next();
Name = input.next();
grade = input.nextInt();
Node node = new Node(sNum, Name, grade); // 临时结点存储、、
if(head == null){
head = node;
return;
}
Node tmpNode = head;
while (tmpNode.next != null) { // 这个是从尾巴处添加、、
tmpNode = tmpNode.next;
}
tmpNode.next = node;
}
public static void display() {
if (head == null) { // 这个链表是空的、、
System.out.println("当前的链表为空、、、");
return;
}
Node tmpNode = head;
while (tmpNode != null) {
System.out.println("学号:" + tmpNode.stuName + " 姓名:" + tmpNode.name + " 成绩:" + tmpNode.grade);
tmpNode = tmpNode.next;
}
}
public static Node FindName(String name) {
if (head == null) { //这链表就是空的、、、
return null;
}
Node tmpNode = head; // 这个指向 头结点、、
while (tmpNode.next != null || tmpNode.name.endsWith(name)) { // 存在后序结点、 当前位置是不是需要查找的这个位置、、
if (tmpNode.name.endsWith(name)) {
// System.out.println("找到拉!!!");
// System.out.println("学号:" + tmpNode.stuName + " 姓名:" + tmpNode.name + " 成绩:" + tmpNode.grade);
return tmpNode;
}
tmpNode = tmpNode.next; // 指向下一个结点、、
}
return null;
}
public static Node FindIndex(int index) { // 按给的位置查找元素、、
Node tmpNode = head;
int tmpNum = 0;
while (tmpNode.next != null || tmpNum == index) {
if (tmpNum == index) {
return tmpNode;
}
tmpNode = tmpNode.next;
tmpNum++;
}
return null; // 找遍 整个链表了也没有找到、、
}
public static boolean InsertIndex(Node node, int n) { // 插入到指定的位置、、
int len = 0;
Node tmpNode = head; // 存头结点、 (头结点不能改变、、)
while (tmpNode.next != null || (len + 1) == n || len == n) { // len是 插入第一个的情况、 不然len + 1 就会事先判断出来、(并进行处理)
if(len == n){
// Node tmp = node;
node.next = head;
head = node;
return true;
}
if ((len + 1) == n) { // 下面一个结点就是了、、
Node tmp = tmpNode; // 保存当前结点、、
tmpNode = tmp.next; // 这个指向需要插入的结点、、
tmp.next = node; // 插入、
node.next = tmpNode; // 续接起来、、
return true;
}
tmpNode = tmpNode.next;
len++;
}
return false;
}
public static Node deleteIndex(int index) {
int len = 0;
Node tmpNode = head; // 存头结点、 (头结点不能改变、、)
while (tmpNode.next != null || (len + 1) == index || len == index) {
if(len == index){
Node tmp = head; // 存头结点、、
head = head.next; //当前头结点指向下一个、、
return tmp; // 返回之前的头结点、、
}
if ((len + 1) == index) { // 需要删除的就是下一个结点、、
if (tmpNode.next == null) { // // 下一个结点本来是空的、、
return null;
}
Node tmp = tmpNode; // 保存当前结点(下一个结点为需要删除的结点、、)
tmpNode = tmpNode.next; // 指向下一个结点、、
tmp.next = tmpNode.next; // 接替下一个结点的指向、、
tmpNode.next = null; // 删除的结点指向为 null
return tmpNode;
}
tmpNode = tmpNode.next;
len++;
}
return null;
}
public static int getLength() {
int len = 0;
Node tmpNode = head;
while (tmpNode != null) {
tmpNode = tmpNode.next;
len++;
}
return len;
}
}