b2科目四模拟试题多少题驾考考爆了怎么补救
b2科目四模拟试题多少题 驾考考爆了怎么补救

Java实现链表(个人理解链表的小例子)

电脑杂谈  发布时间:2020-05-06 12:21:09  来源:网络整理

python实现链表_链表实现栈_实现链表

数组:数组的存储空间是连续的,需要事先申请空间确定大小,通过下标查找数据,所以查找速度快,但是增加和删除速度慢
链表:离散存储,不需要事先确定大小,通过头指针加遍历查找数据,查找数据慢,但是增加和删除速度快

[示例]

在教室里看一下存储空间,同学代表数据

【数组】

int []座位=新的int [5]意味着我从教室(内存空间)申请了第一排座位(数组),座位的标记顺序为1、2、3 ...实现链表,座位[1]意味着坐在第一位置的学生(数据)只能坐在第一行.

实现链表_python实现链表_链表实现栈

查找

无需查找数据. 座位已编号实现链表,老师可以根据座位号(下标)快速要求前几个学生回答问题

这有点麻烦. 第二位同学并不认真. 老师叫他出去. 这时,座位数应减少一. 然后,第三位同学应向左移动一个空格(int [1] = int [2]),依次向左移动一个空格,最后将int [4]腾出,因此最后一个座位应返回到教室(返回到内存),所以这比较麻烦(ps: 我遵循c语言在这里认为,只学习过Java的学生可能很难接受)需要移动座位,这很麻烦

链表实现栈_实现链表_python实现链表

【链接列表】

查找数据(每个学生只知道下一个进来的学生)

删除数据

python实现链表_实现链表_链表实现栈

这种数据结构太形而上. 我学习了很长时间的C语言版本,但我听不懂. 突然有一天,我的大脑开始学习. 估计是菩萨的祝福

现在使用Java代码实现

public class SingleLinkedList<T>{
    //记录链表长度
    private int size;
    //头节点,不存数据,方便实现增删代码的
    private Node head;
    /**
     * 成员内部类,节点类,相当于例子中的同学和座位号的集合题
     * 我觉得这个类不应该暴露给外部
     */
    private class Node{
        private Node next;
        private T t;
        Node(Node next,T t){
            this.next = next;
            this.t = t;
        }
        Node(T t){
            this(null,t);
        }
        Node(){
            Node next = null;
            t = null;
        }
    }
    //链表构造方法
    public SingleLinkedList(){
        //初始化头节点,不存数据,方便实现增删代码的
        this.head = new Node();
        this.size = 0;
    }
    
    /**
     * 此处省略了方法,单独拿出来给大家讲解
     * .........
     */
}

//获取长度
public int getSize(){
    return size;
}

 //添加节点
 public void add(T t){
     Node newNode = new Node(t);
     Node temp = this.head;
     while(temp.next != null){
         temp = temp.next;
     }
     temp.next = newNode;
     size++;
 }

链表实现栈_python实现链表_实现链表

//插入节点,先判断节点是否合法
public void insert(T t,int index){
    if(index <= 0 || index > this.size){
        throw new RuntimeException("index参数不合法");
    }
    Node newNode = new Node(t);
    Node temp = this.head;
    //要明白到底循环几次
    for (int i = 1; i < index; i++) {
        temp = temp.next;
    }
    //注意顺序
    newNode.next = temp.next;
    temp.next = newNode;
    size++;
}

//取节点数据
public T getValue(int index){
    if(index <= 0 || index > this.size){
        throw new RuntimeException("index参数不合法");
    }
    Node temp = this.head;
    //要明白到底循环几次
    for (int i = 0; i < index; i++) {
        temp = temp.next;
    }
    return temp.t;
}

//删除节点
public void delete(int index){
    if(index <= 0 || index > this.size){
        throw new RuntimeException("index参数不合法");
    }
    Node temp = this.head;
    //要明白到底循环几次
    for (int i = 1; i < index; i++) {
        temp = temp.next;
    }
    temp.next = temp.next.next;
    //java垃圾回收机制gc自动回收内存
    size--;
}

//遍历
public void showData(){
    Node temp = this.head;
    //要明白到底循环几次
    for (int i = 0; i < this.size; i++) {
        temp = temp.next;
        System.out.print("["+temp.t+"]-->");
    }
}

【摘要】

个人密码级别有限,仅供参考


本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-200555-1.html

    相关阅读
      发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

      热点图片
      拼命载入中...