• 静态链表


    No Picture say Plane!

    用数组描述的链表称为静态链表,表现形式为结构体数组,包括数据域data和游标curr。

    基础理解

    第一幅插入元素图解分析

    第二幅图删除元素图解分析

     code

    public class Element {
        public int data;
        public int cur;
    
        public Element(int data,int cur){
            this.data = data;
            this.cur = cur;
        }
    }
    结点
    public class StaticLinkList {
        //静态链表的最大长度
        private int MAX_SIZE = 10;
        //链表的长度
        private int size = 0;
        //静态链表头结点下标
        private int head;
    
        Element[] element;
    
        public void initStaticLinkList(){
            element = new Element[MAX_SIZE];
            //数组下标为零的元素 当前节点为1
            for(int i = 0;i < MAX_SIZE - 1;i++){
                element[i] = new Element(0,i+1);
            }
    
            //最后一个数组元素的下标为0,表示指向当前的节点
            element[MAX_SIZE - 1] = new Element(0,0);
        }
    
        //插入数据
        public void add(int data){
            if(size == 0){
                head = element[0].cur;
    
                //当前结点的游标赋值给头结点
                element[0].cur = element[size+1].cur;
                element[size+1].data = data;
                element[size+1].cur = element[MAX_SIZE - 1].cur;
    
                element[MAX_SIZE - 1].cur = head;
                size ++;
            }
            else{
                //存放头结点的游标
                head = element[0].cur;
    
                /*最重要的感觉莫过于这段逻辑
                * 找静态链表的最后一个节点的数组下标,赋值其头结点的游标*/
                int i = 1,temp;
                while (i < MAX_SIZE){
                    temp = element[i].cur;
                    if(temp == 0)
                        break;
                    i++;
                }
                element[i].cur = head;
    
                //当前结点的游标赋值给头结点
                element[0].cur = element[size+1].cur;
    
                element[size+1].data=data;
                element[size+1].cur=0; //最后一个插入节点的游标永远为0
    
                size ++;
            }
        }
    
        public String get(int i){
            //第一个元素指向备用元素的下标
            return "数组的下标:" + i + " 元素的值:" + element[i].data + "  指向的备用元素的下标:" + element[i].cur;
        }
    
        //index是数组的下标  从1开始
        public void delete(int index){
            index = index + 1;
            if(size == 1){
                //存放头结点的游标
                head = element[0].cur;
                //获取第一个元素的下标
                int i = 0;
                while (element[i].cur != 0){
                    i ++;
                }
                //第一个结点对应的下一个结点 赋值给尾结点的游标
                int k = element[i].cur;
                element[MAX_SIZE-1].cur=k;
                element[i].data=0;
                element[i].cur=head;
                element[0].cur=i;
    
                size --;
            }else if(size < MAX_SIZE -1 && size > 0)
            {
                //存放头结点的游标
                head = element[0].cur;
                //获取第一个元素的下标
                int i = 0;
                while (index != element[i].cur){
                    i ++;
                }
                //第一个结点对应的下一个结点 赋值给尾结点的游标
                int k = element[i].cur;
                element[MAX_SIZE-1].cur=k;
                element[i].data=0;
                element[i].cur=head;
                element[0].cur=i;
    
                size --;
            }
        }
    }
    插入和删除
    public class Demo {
        public static void main(String[] args){
            StaticLinkList slk = new StaticLinkList();
            slk.initStaticLinkList();
            slk.add(5);
            slk.add(80);
            slk.add(33);
            slk.add(47);
            slk.add(11);
            for(int i=0;i<10;i++){
                System.out.println(slk.get(i));
            }
            System.out.println("---------------删除操作--------------------");
            slk.delete(1);
            for(int i=0;i<10;i++){
                System.out.println(slk.get(i));
            }
            System.out.println("---------------删除第二个元素操作--------------------");
            slk.delete(2);
            for(int i=0;i<10;i++){
                System.out.println(slk.get(i));
            }
            System.out.println("---------------删除第三个元素操作--------------------");
            slk.delete(3);
            for(int i=0;i<10;i++){
                System.out.println(slk.get(i));
            }
            System.out.println("---------------删除第四个元素操作--------------------");
            slk.delete(4);
            for(int i=0;i<10;i++){
                System.out.println(slk.get(i));
            }
            System.out.println("---------------删除第五个元素操作--------------------");
            slk.delete(5);
            for(int i=0;i<10;i++){
                System.out.println(slk.get(i));
            }
            System.out.println("---------------再次插入元素--------------------");
            slk.add(5);
            slk.add(80);
            slk.add(33);
            slk.add(47);
            slk.add(11);
            for(int i=0;i<10;i++){
                System.out.println(slk.get(i));
            }
        }
    }
    测试类
    数组的下标:0 元素的值:0  指向的备用元素的下标:6
    数组的下标:1 元素的值:5  指向的备用元素的下标:2
    数组的下标:2 元素的值:80  指向的备用元素的下标:3
    数组的下标:3 元素的值:33  指向的备用元素的下标:4
    数组的下标:4 元素的值:47  指向的备用元素的下标:5
    数组的下标:5 元素的值:11  指向的备用元素的下标:0
    数组的下标:6 元素的值:0  指向的备用元素的下标:7
    数组的下标:7 元素的值:0  指向的备用元素的下标:8
    数组的下标:8 元素的值:0  指向的备用元素的下标:9
    数组的下标:9 元素的值:0  指向的备用元素的下标:1
    ---------------删除操作--------------------
    数组的下标:0 元素的值:0  指向的备用元素的下标:1
    数组的下标:1 元素的值:0  指向的备用元素的下标:6
    数组的下标:2 元素的值:80  指向的备用元素的下标:3
    数组的下标:3 元素的值:33  指向的备用元素的下标:4
    数组的下标:4 元素的值:47  指向的备用元素的下标:5
    数组的下标:5 元素的值:11  指向的备用元素的下标:0
    数组的下标:6 元素的值:0  指向的备用元素的下标:7
    数组的下标:7 元素的值:0  指向的备用元素的下标:8
    数组的下标:8 元素的值:0  指向的备用元素的下标:9
    数组的下标:9 元素的值:0  指向的备用元素的下标:2
    ---------------删除第二个元素操作--------------------
    数组的下标:0 元素的值:0  指向的备用元素的下标:2
    数组的下标:1 元素的值:0  指向的备用元素的下标:6
    数组的下标:2 元素的值:0  指向的备用元素的下标:1
    数组的下标:3 元素的值:33  指向的备用元素的下标:4
    数组的下标:4 元素的值:47  指向的备用元素的下标:5
    数组的下标:5 元素的值:11  指向的备用元素的下标:0
    数组的下标:6 元素的值:0  指向的备用元素的下标:7
    数组的下标:7 元素的值:0  指向的备用元素的下标:8
    数组的下标:8 元素的值:0  指向的备用元素的下标:9
    数组的下标:9 元素的值:0  指向的备用元素的下标:3
    ---------------删除第三个元素操作--------------------
    数组的下标:0 元素的值:0  指向的备用元素的下标:3
    数组的下标:1 元素的值:0  指向的备用元素的下标:6
    数组的下标:2 元素的值:0  指向的备用元素的下标:1
    数组的下标:3 元素的值:0  指向的备用元素的下标:2
    数组的下标:4 元素的值:47  指向的备用元素的下标:5
    数组的下标:5 元素的值:11  指向的备用元素的下标:0
    数组的下标:6 元素的值:0  指向的备用元素的下标:7
    数组的下标:7 元素的值:0  指向的备用元素的下标:8
    数组的下标:8 元素的值:0  指向的备用元素的下标:9
    数组的下标:9 元素的值:0  指向的备用元素的下标:4
    ---------------删除第四个元素操作--------------------
    数组的下标:0 元素的值:0  指向的备用元素的下标:4
    数组的下标:1 元素的值:0  指向的备用元素的下标:6
    数组的下标:2 元素的值:0  指向的备用元素的下标:1
    数组的下标:3 元素的值:0  指向的备用元素的下标:2
    数组的下标:4 元素的值:0  指向的备用元素的下标:3
    数组的下标:5 元素的值:11  指向的备用元素的下标:0
    数组的下标:6 元素的值:0  指向的备用元素的下标:7
    数组的下标:7 元素的值:0  指向的备用元素的下标:8
    数组的下标:8 元素的值:0  指向的备用元素的下标:9
    数组的下标:9 元素的值:0  指向的备用元素的下标:5
    ---------------删除第五个元素操作--------------------
    数组的下标:0 元素的值:0  指向的备用元素的下标:5
    数组的下标:1 元素的值:0  指向的备用元素的下标:6
    数组的下标:2 元素的值:0  指向的备用元素的下标:1
    数组的下标:3 元素的值:0  指向的备用元素的下标:2
    数组的下标:4 元素的值:0  指向的备用元素的下标:3
    数组的下标:5 元素的值:0  指向的备用元素的下标:4
    数组的下标:6 元素的值:0  指向的备用元素的下标:7
    数组的下标:7 元素的值:0  指向的备用元素的下标:8
    数组的下标:8 元素的值:0  指向的备用元素的下标:9
    数组的下标:9 元素的值:0  指向的备用元素的下标:0
    ---------------再次插入元素--------------------
    数组的下标:0 元素的值:0  指向的备用元素的下标:4
    数组的下标:1 元素的值:5  指向的备用元素的下标:6
    数组的下标:2 元素的值:80  指向的备用元素的下标:1
    数组的下标:3 元素的值:33  指向的备用元素的下标:2
    数组的下标:4 元素的值:47  指向的备用元素的下标:3
    数组的下标:5 元素的值:11  指向的备用元素的下标:0
    数组的下标:6 元素的值:0  指向的备用元素的下标:7
    数组的下标:7 元素的值:0  指向的备用元素的下标:8
    数组的下标:8 元素的值:0  指向的备用元素的下标:9
    数组的下标:9 元素的值:0  指向的备用元素的下标:5
    View Code

    耗费无数闹细胞,感觉这样容易理解

  • 相关阅读:
    ajax获取后台数据,显示到input输入框里面
    js的比较运算符含义和示例和逻辑运算符
    Vue的 on +bind+if +for
    Vue入门例子
    Spring-AOP
    fatal: remote origin already exists git出现这个
    springmvc-文件上传下载
    springmvc-ajax
    查询Id最大的基础上+1
    bootstrap select去掉右边小三角
  • 原文地址:https://www.cnblogs.com/mutong1228/p/10747489.html
Copyright © 2020-2023  润新知