链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。链表由一系列结点(链表中每一个元素称为结点)组成,结点可以在运行时动态生成。每个结点包括两个部分:一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域。链表的优点是插入和删除方便,复杂度低,缺点是在查询或得到一个节点时,必须从头节点一个一个遍历后查询或得到某个数据。
使用链表写代码,层次清晰,结构分明,避免了例如非集合逻辑写代码代码越界等形式的异常问题。
package edu.xalead;
public class LinkList {
private class Node1{
private int date ; // 节点数值部分
private Node1 next; // 节点指针部分
public int getDate() {
return date;
}
public void setDate(int date) {
this.date = date;
}
public Node1 getNext() {
return next;
}
public void setNext(Node1 next) {
this.next = next;
}
}
private Node1 head = null;
private int size =0;
public Integer get(int i) {
if(i==0) return head.getDate();
Node1 temp = head;
for(int t=0;t<i;t++){
temp = temp.getNext();
if(temp == null) return null; // 越界 返回值为null
}
return temp.getDate();
}
public void remove(int i) {
}
public void add(int d) {
Node1 n = new Node1();
n.setDate(d); // n指的是节点的索引
if(head==null)
head = n;
else {
Node1 temp = head;
for (int i = 0; i < size-1; i++) { // size-1=0时无意义 只有一个节点时不用循环
temp = temp.next;
}
temp.setNext(n);
}
size++;
}
}
class 集合概念 {
public static void main(String[] args) {
LinkList t = new LinkList();
t.add(12);
t.add(3534);
t.add(5645);
System.out.println(t.get(2));
System.out.println(t.get(4));
}
}
对于数组,我们常有取值、添加、删除等操作, 对于常用操作,我们经常把其包装成类(方法),在主函数通过调用进行具体分析具体操作。
package edu.xalead;
class ArrayList1 {
private int length = 20;
private int[] date = new int[this.length];
private int size = 0;
public Integer get(int i) {
if (i < 0 || i >= size) {
return null;
}
return date[i];
}
public void remove(int i) {
if (i < 0 || i >= size) {
return;
}
if (i == size - 1) size--;//12,232,343,5,6,0
for (int t = i; t < size - 1; t++) {
date[t] = date[t + 1];
}
size--;
}
public void add(int n) {
if (size < length) {
this.date[size] = n;
} else {
length *= 2;
int[] b = new int[length];
for (int i = 0; i < size; i++) {
b[i] = date[i];
}
date = b;
date[size] = n;
}
size++;
}
}
class 集合概念 {
public static void main(String[] args) {
ArrayList1 a = new ArrayList1();
a.add(12);
a.add(1243);
a.add(57567686);
a.add(435);
a.add(98);
a.add(45);
System.out.println(a.get(5));
a.remove(5);
System.out.println(a.get(5));
// Node1 head = new Node1();
// head.setDate(12);
// System.out.println(head.getDate());
// Node1 q = new Node1();
// q.setDate(23);
// head.setNext(q);
// q= new Node1();
// q.setDate(64);
// head.getNext().setNext(q);
// System.out.println(head.getDate());
// System.out.println(head.getNext().getDate());
// System.out.println(head.getNext().getNext().getDate());
// 添加
// int leng =2;
// int[] w = new int[leng];//数组长度为2
// int size = 0;
// w[size] = 12;
// size++;
// w[size] = 242;
// size++;
// if(size>=w.length){
// int[] b = new int[leng*=2];
// for(int i=0;i<w.length;i++){
// w[i] = b[i];
// }
// w =b;
// }
// w[size] = 1432;
LinkList t = new LinkList();
t.add(12);
t.add(3534);
t.add(5645);
System.out.println(t.get(2));
System.out.println(t.get(4));
}
}
/*class Node1{
private int date ; // 节点数值部分
private Node1 next; // 节点指针部分
public int getDate() {
return date;
}
public void setDate(int date) {
this.date = date;
}
public Node1 getNext() {
return next;
}
public void setNext(Node1 next) {
this.next = next;
}
}*/