algoritmo java - lista vinculada isoladamente

Maneira lista ligada
forma ligada lista é uma lista linear, um nó é realmente (nó) consistindo de uma cadeia tem um número variável de nodos. Os dados armazenados na memória que é descontínuo, dispersa os seus dados armazenados na memória, cada nó só sabe que ele só posição de armazenamento do nó seguinte. De N nodos (nó) compostas de lista ligada individualmente, em que cada de dados de nó do nó e a gravação existente próximo nó. Apenas um nó principal (Head) externamente exposta, listamos todas as operações são realizadas diretamente ou indiretamente através de seu nó principal.

A diferença entre a lista e a matriz

Ele apresenta uma série de

  • Na matriz de memória é uma área contígua.
  • Matriz precisa reservar espaço, antes de usar o tamanho da memória primeira aplicação de contabilidade, a memória pode ser um desperdício de espaço.
  • Inserir e ineficiências de dados de dados de exclusão, quando você insere dados, dados de localização para estar por trás deste movimento para trás na memória. Quando você dados de exclusão, os dados por trás dos dados deve seguir em frente.
  • a eficiência de leitura aleatória alta. Porque a matriz é contínua, sabemos o endereço de memória de cada dados podem ser encontrados para tratar os dados diretamente.
  • Para redefinir a definição de uma matriz de matrizes não há espaço suficiente.

Lista de recursos

  • Pode ser em qualquer lugar na memória, ele não requer contínua.
  • Cada dados são armazenados endereço de memória dos próximos dados para encontrar o próximo dados através deste endereço.
  • Aumento de dados e os dados de exclusão facilmente. Só precisa mudar o endereço aponta para a linha, você não precisa mover os dados.
  • Encontrar dados de baixa eficiência, porque eles não têm acesso aleatório, acesso a dados para um local deve começar a acessar os dados dos primeiros e segundos dados para localizar o endereço dos próximos dados armazenados nos primeiros dados para diante.
  • Não especificar um tamanho para fácil expansão. Sem definir o tamanho da lista, ser adicionados ou eliminados dados.

Selecione uma lista ligada e uma série de

Multi-consulta com uma variedade de mais do que o aumento de excluir uma lista ligada.

implementação Java dos códigos de cadeia única são os seguintes:


class node{        //节点
    int  data; //数据
    node next; //用来指向下一个地址  模仿指针
    public node(){}
    public node(int  data){
        this.data = data;
    }
}

public class aa {

    public static void main(String[] args) {

         node head = null;  //创建头节点
         node  t = null;  //创建头节点
         node n1 = new node(2); //创建其它节点并输入数据
        //创建第一个节点时 next置空
         n1.next = null;
         node n2 = new node(4);
         node n3 = new node(6);
        List<node> list = new ArrayList();
        list.add(n1);
        list.add(n2);
        list.add(n3);
        int i ;
        /*
        //给链表中添加数据   尾插法
        for( i = 0; i<list.size();i++){
            if(head == null){
                head= list.get(0);
            }else{
                list.get(i-1).next = list.get(i); //如果不是头节点则将上一个节点的next指向此节点地址
            }
            head = list.get(0);  //将头节点指向第一个节点
        }
*/

        //给链表中添加数据   头插法
        for( i = 0; i<list.size();i++){
            if(head == null){
                head = list.get(0); //把第一个节点赋值给头节点
            }else{
                list.get(i).next = list.get(i-1);  //如果不是头节点则将此节点的next指向上一个节点地址
            }
            head = list.get(i);   //把此节点的地址赋值给头节点
        }

        t = head; //从链表头部开始遍历
        System.out.print("原始的数据:");
        while (t!=null){   //如果头节点的next值不为空则输出头节点指向的地址数据
            System.out.print(t.data);
            t = t.next;   //指向下一个节点
        }

        //增加节点
        node n4 = new node(5);
        t = head;
        while (t!=null){   //如果头节点的next值不为空则输出头节点指向的地址数据
            if(t.data<n4.data){  //如果第一个节点小于添加的节点,则把第一个节点添加到该节点的next
                n4.next = t;
                head = n4; //另该节点为开始节点
            }
            if(t == null || t.next.data < n4.data) {  //如果该节点的下一个节点的值小于待插入数据时插入数据
               n4.next = t.next;  //把该节点的指向的下一个节点赋值给添加节点指向的下一个节点
               t.next = n4;  //把添加节点设置为该节点指向的节点
                break;
            }
            t = t.next; //指向下一个节点
        }
        System.out.println();
        System.out.print("添加数据5:");
        t = head;
        while (t!=null){   //如果头节点的next值不为空则输出头节点指向的地址数据
            System.out.print(t.data);
            t = t.next;   //指向下一个节点
        }

        //删除节点n4节点也就是值为4的节点
        t = head;
        while (t!=null){   //如果头节点的next值不为空则输出头节点指向的地址数据
            if(t.next.data == 5) {  //如果下一个节点的值等于待删除数据时删除
               t.next = t.next.next;  //删除数据
               break;
            }
            head = head.next; //指向下一个节点
        }
        System.out.println();
        System.out.print("删除数据5:");
        t = head;
        while (t!=null){   //如果头节点的next值不为空则输出头节点指向的地址数据
            System.out.print(t.data);
            t = t.next;   //指向下一个节点
        }

    }
}

Os resultados mostrados abaixo:
Aqui Insert Picture Descrição

Publicado 34 artigos originais · ganhou elogios 11 · vista 8989

Acho que você gosta

Origin blog.csdn.net/qq_37909141/article/details/102817532
Recomendado
Clasificación