Pembelajaran struktur data: menggunakan JavaScript untuk melaksanakan operasi senarai terpaut (contoh terperinci)

WBOY
Lepaskan: 2021-12-24 18:04:26
ke hadapan
2938 orang telah melayarinya

Artikel ini membawa anda pengetahuan yang berkaitan tentang cara menggunakan JavaScript untuk melaksanakan senarai terpaut dalam pembelajaran struktur data saya harap ia akan membantu anda.

Pembelajaran struktur data: menggunakan JavaScript untuk melaksanakan operasi senarai terpaut (contoh terperinci)

Senarai terpaut mempunyai ciri-ciri berikut:

  • boleh mengembangkan ruang secara dinamik (dalam js, perkara yang sama adalah benar untuk tatasusunan , tetapi panjang tatasusunan dalam sesetengah bahasa adalah tetap dan tidak boleh ditambah secara dinamik, seperti bahasa c)

  • memerlukan nod kepala

  • memerlukan Tahu alamat nod seterusnya

Setiap nod dalam senarai terpaut boleh dianggap sebagai objek ini mempunyai dua atribut, satu ialah nilai nod, dan satu ialah alamat nod seterusnya bagi nod (jika ia adalah senarai berganda, atribut alamat nod sebelumnya juga mesti ditambah)

Untuk melaksanakan operasi menambah nod:

1 Tambah nod pada nod ekor

 //在尾节点处添加节点
        function append(element){
        let node = new node(element);
        let current;
        if(head == null){
            current = node
        }else{
            while(current.next){
                current = current.next;
            }
            current.next = node
        }
            length++;
        }
Salin selepas log masuk

Analisis kod:

  • Takrifkan nod berdasarkan elemen masuk Nod, elemen ini digunakan sebagai nilai nod ini
  • Takrifkan pembolehubah untuk mewakili nod semasa
  • Tentukan sama ada ia mengandungi nod kepala Jika tiada nod kepala, ini bermakna tiada nilai dalam senarai terpaut, dan nilai yang diluluskan dalam ini berfungsi sebagai nod kepala jika tidak, melintasi senarai terpaut, cari nod terakhir, dan tetapkan atribut seterusnya kepada nod baharu
  • Panjang senarai terpaut 1

2 Dalam Tambah nod pada sebarang kedudukan

Analisis :

Tetapkan atribut seterusnya nod sebelumnya pada kedudukan ini kepada nod ini dan simpan nod seterusnya asalnya

function insert(position,element){
        let node = new Node(element);
        let current = head;
        let previous;//当前节点的前一个节点,在position处添加节点,就是在previos和current之间添加
        if(position = 0){
          node.next = head;
          head = node;
        }else{
          for(let i = 0;i< position;i++){
            pervious = current;
            current = current.next;
          }

          pervious.next = node;
          node.next = current;
        }
        length++;
        return true;
      }
Salin selepas log masuk

Analisis kod. :

  • Periksa sama ada kedudukan di luar sempadan, jika tidak, buat nod
  • Tentukan satu Pembolehubah mewakili nod semasa, yang dimulakan ke nod kepala, menunjukkan bahawa traversal bermula dari nod kepala; pembolehubah mewakili nod sebelumnya nod semasa, yang digunakan untuk memudahkan mencari nod sebelumnya apabila memasukkan nod
  • untuk menentukan sama ada untuk menambah sebelum nod kepala , jika ya , tetapkan nod kepala kepada atribut nod seterusnya, dan tukar nod kepala kepada nod ini jika tidak, lintasi nod pada kedudukan ini dan masukkan nod di hadapan nod pada kedudukan ini
  • Panjangnya; daripada senarai terpaut 1

Laksanakan operasi pemadaman nod

Analisis: Operasi bagi memadamkan nod ialah meletakkan nod sasaran di hadapan Penunjuk nod itu menghala ke nod selepas nod sasaran

1 Padamkan nod yang ditentukan

function removed(element){
    
      let node = new Node(element);
      let pervious;
      let nextNode;
      let current = head;

    if(head != null){
      while (current != node){
        pervious = current;
        current = current.next;
        nextNode = current.next;
      }  

      pervious.next = nextNode;
      length--;
      return true;
    }else{
      return false;
    }    
    }
Salin selepas log masuk

2 . Padamkan nod pada kedudukan yang ditentukan

function removedAt(position){
        let current = head;
        let pervious;
        let nextNode;
        let i = 0;

        while(i < position){
          pervious = current;
          current = current.next;
          nextNode = current.next;
        }

        pervious.next = nextNode;
        length--;
        return true;
      }
Salin selepas log masuk

Laksanakan operasi nod pertanyaan

Analisis: Nod pertanyaan adalah serupa dengan pemadaman nod yang sepadan atau kedudukan yang sepadan, dan kemudian lakukan operasi

1.Soal nod kedudukan tertentu

function searchElement(element){
      //输入元素,找到该元素后返回该元素的位置
      if(head != null){
        let node = new Node(element);
        let current;
        let index = 0;
        if(head == node){
          return 0;
        }else{
          current = head;
          while(current != node){
            current = current.next;
            index++;
          }
          return index;
        }
      }else{
        return -1;
      }
    }
Salin selepas log masuk

2 nod ialah

function searchPosition(position){
        let i = 0;
        let current = head;
        while(i< position){
          current = current.next;
          i++;
        }
        return current;
    }
Salin selepas log masuk

Ringkasan idea

Terdapat banyak operasi pada senarai terpaut Untuk senarai terpaut yang lebih kompleks, terdapat senarai terpaut berganda (menambah nod sebelumnya semasa memulakan nod) dan senarai terpaut bulat (nod seterusnya nod ekor ialah nod kepala operasi senarai terpaut ini juga boleh dilaksanakan menggunakan js, jadi saya tidak akan menerangkan butiran di sini. Kesimpulannya, teras senarai terpaut ialah

  • Nod dalam senarai terpaut boleh dianggap sebagai objek dengan dua nilai atribut, satu nilai nod dan satu lagi penunjuk
  • Penambahan dan pemadaman senarai terpaut adalah perubahan Apabila penunjuk menunjuk ke
  • carian senarai terpaut, fokus adalah semasa = semasa.seterusnya

[Berkaitan cadangan: tutorial pembelajaran javascript]

Atas ialah kandungan terperinci Pembelajaran struktur data: menggunakan JavaScript untuk melaksanakan operasi senarai terpaut (contoh terperinci). Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
sumber:csdn.net
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan