Lompat ke isi

Larik: Perbedaan antara revisi

Ensiklopedia Pengetahuan Universitas Islam Sultan Agung
Maintenance script (bicara | kontrib)
Impor teks terkontrol dari Wikipedia bahasa Indonesia; revisi 29547955; atribusi sumber disertakan.
 
Maintenance script (bicara | kontrib)
Presentation V4: sitasi, referensi, Math, Wikimedia Commons, dan atribusi
 
Baris 1: Baris 1:
Dalam [[ilmu komputer]], '''larik''' () adalah [[struktur data]] atau [[tipe data]] majemuk yang menyimpan sekumpulan unsur dan memungkinkan setiap unsur diakses melalui [[indeks]] atau subskrip. Dalam banyak [[bahasa pemrograman]], unsur-unsur larik memiliki tipe data yang sama dan disimpan pada lokasi [[memori komputer|memori]] yang berurutan. Namun, dalam beberapa [[bahasa pemrograman tingkat tinggi|bahasa tingkat tinggi]], istilah larik juga dapat merujuk pada struktur berindeks yang lebih lentur, seperti [[larik dinamis]], [[larik asosiatif]], atau struktur mirip daftar.
Dalam [[ilmu komputer]], '''larik''' () adalah [[struktur data]] atau [[tipe data]] majemuk yang menyimpan sekumpulan unsur dan memungkinkan setiap unsur diakses melalui [[indeks]] atau subskrip. Dalam banyak [[bahasa pemrograman]], unsur-unsur larik memiliki tipe data yang sama dan disimpan pada lokasi [[memori komputer|memori]] yang berurutan. Namun, dalam beberapa [[bahasa pemrograman tingkat tinggi|bahasa tingkat tinggi]], istilah larik juga dapat merujuk pada struktur berindeks yang lebih lentur, seperti [[larik dinamis]], [[larik asosiatif]], atau struktur mirip daftar.<ref name="NIST-array">Paul E. Black. [[https://xlinux.nist.gov/dads/HTML/array.html](https://xlinux.nist.gov/dads/HTML/array.html) array]. ''Dictionary of Algorithms and Data Structures''. National Institute of Standards and Technology.</ref><ref name="NIST-CSRC-array">[[https://csrc.nist.gov/glossary/term/array](https://csrc.nist.gov/glossary/term/array) Array]. ''Computer Security Resource Center Glossary''. National Institute of Standards and Technology.</ref>


Larik biasanya digunakan untuk menyimpan data yang jumlahnya lebih dari satu tetapi masih berada dalam satu kelompok logis, misalnya daftar nilai, kumpulan nama, [[piksel]] gambar, [[matriks (matematika)|matriks]], tabel, atau deretan karakter. Setiap unsur larik dapat diakses langsung dengan menyebutkan indeksnya. Pada banyak bahasa pemrograman modern, indeks larik dimulai dari 0 (''zero-based indexing''), tetapi ada pula bahasa yang mengizinkan indeks dimulai dari 1 atau dari rentang lain yang ditentukan oleh [[pemrogram]].
Larik biasanya digunakan untuk menyimpan data yang jumlahnya lebih dari satu tetapi masih berada dalam satu kelompok logis, misalnya daftar nilai, kumpulan nama, [[piksel]] gambar, [[matriks (matematika)|matriks]], tabel, atau deretan karakter. Setiap unsur larik dapat diakses langsung dengan menyebutkan indeksnya. Pada banyak bahasa pemrograman modern, indeks larik dimulai dari 0 (''zero-based indexing''), tetapi ada pula bahasa yang mengizinkan indeks dimulai dari 1 atau dari rentang lain yang ditentukan oleh [[pemrogram]].
Baris 15: Baris 15:
* dalam implementasi tingkat rendah, unsur-unsurnya sering disimpan pada blok memori yang berdampingan secara fisik.
* dalam implementasi tingkat rendah, unsur-unsurnya sering disimpan pada blok memori yang berdampingan secara fisik.


Pada larik yang disimpan secara kontigu, alamat suatu unsur dapat dihitung secara matematis dari alamat awal larik, ukuran setiap unsur (dalam [[bita]]), dan indeks unsur tersebut. Karena itu, pengaksesan unsur larik berdasarkan indeks biasanya dapat dilakukan dalam [[notasi Big O|waktu konstan]], yaitu <math>O(1)</math>.
Pada larik yang disimpan secara kontigu, alamat suatu unsur dapat dihitung secara matematis dari alamat awal larik, ukuran setiap unsur (dalam [[bita]]), dan indeks unsur tersebut. Karena itu, pengaksesan unsur larik berdasarkan indeks biasanya dapat dilakukan dalam [[notasi Big O|waktu konstan]], yaitu <math>O(1)</math>.<ref name="CLRS">Thomas H. Cormen. ''Introduction to Algorithms''. MIT Press. 2009. ISBN 978-0-262-03384-8.</ref>


== Indeks ==
== Indeks ==
Baris 29: Baris 29:
Contoh larik satu dimensi:
Contoh larik satu dimensi:


<syntaxhighlight lang="text">
A = [10, 20, 30, 40, 50]
</syntaxhighlight>


Pada contoh tersebut, jika indeks dimulai dari 0, maka:
Pada contoh tersebut, jika indeks dimulai dari 0, maka:
Baris 43: Baris 46:
Contoh larik dua dimensi:
Contoh larik dua dimensi:


<syntaxhighlight lang="text">
M = [
  [1, 2, 3],
  [4, 5, 6],
  [7, 8, 9]
]
</syntaxhighlight>


Jika indeks dimulai dari 0, maka <code>M[0][0]</code> bernilai 1, <code>M[1][2]</code> bernilai 6, dan <code>M[2][2]</code> bernilai 9.
Jika indeks dimulai dari 0, maka <code>M[0][0]</code> bernilai 1, <code>M[1][2]</code> bernilai 6, dan <code>M[2][2]</code> bernilai 9.


Dalam penyimpanan memori (yang pada dasarnya bersifat satu dimensi atau linear), larik multidimensi dapat disusun dengan urutan baris-utama (''row-major order'') atau kolom-utama (''column-major order'').
Dalam penyimpanan memori (yang pada dasarnya bersifat satu dimensi atau linear), larik multidimensi dapat disusun dengan urutan baris-utama (''row-major order'') atau kolom-utama (''column-major order'').  
* Pada '''urutan baris-utama''' (digunakan oleh C/C++), unsur-unsur dalam satu baris disimpan berdekatan terlebih dahulu.
* Pada '''urutan baris-utama''' (digunakan oleh C/C++), unsur-unsur dalam satu baris disimpan berdekatan terlebih dahulu.  
* Pada '''urutan kolom-utama''' (digunakan oleh [[Fortran]] dan [[MATLAB]]), unsur-unsur dalam satu kolom disimpan berdekatan terlebih dahulu.
* Pada '''urutan kolom-utama''' (digunakan oleh [[Fortran]] dan [[MATLAB]]), unsur-unsur dalam satu kolom disimpan berdekatan terlebih dahulu.  


Perbedaan ini sangat penting untuk dipahami karena iterasi yang tidak sesuai dengan susunan memori dapat menurunkan performa program secara drastis, terutama pada komputasi numerik besar.
Perbedaan ini sangat penting untuk dipahami karena iterasi yang tidak sesuai dengan susunan memori dapat menurunkan performa program secara drastis, terutama pada komputasi numerik besar.
Baris 57: Baris 67:
'''Larik statis''' adalah larik yang ukurannya ditentukan ketika dideklarasikan dan tidak dapat berubah selama masa hidupnya. Larik seperti ini umum ditemukan dalam bahasa tingkat rendah karena [[Kompilator|kompiler]] dapat memesan memori secara langsung di dalam [[tumpukan (struktur data)|tumpukan]] (''stack'').
'''Larik statis''' adalah larik yang ukurannya ditentukan ketika dideklarasikan dan tidak dapat berubah selama masa hidupnya. Larik seperti ini umum ditemukan dalam bahasa tingkat rendah karena [[Kompilator|kompiler]] dapat memesan memori secara langsung di dalam [[tumpukan (struktur data)|tumpukan]] (''stack'').


'''Larik dinamis''' adalah larik yang ukurannya dapat ditentukan atau diubah saat program berjalan. Dalam beberapa bahasa, larik dinamis dapat diubah ukurannya secara otomatis oleh bahasa atau [[pustaka standar]]. Dalam bahasa yang lebih manual seperti C, pemrogram perlu melakukan [[alokasi memori dinamis]] secara manual menggunakan fungsi pustaka seperti <code>malloc</code>, <code>calloc</code>, <code>realloc</code>, dan <code>free</code>.
'''Larik dinamis''' adalah larik yang ukurannya dapat ditentukan atau diubah saat program berjalan. Dalam beberapa bahasa, larik dinamis dapat diubah ukurannya secara otomatis oleh bahasa atau [[pustaka standar]]. Dalam bahasa yang lebih manual seperti C, pemrogram perlu melakukan [[alokasi memori dinamis]] secara manual menggunakan fungsi pustaka seperti <code>malloc</code>, <code>calloc</code>, <code>realloc</code>, dan <code>free</code>.<ref name="C-array">[[https://en.cppreference.com/w/c/language/array](https://en.cppreference.com/w/c/language/array) Array declaration]. ''cppreference.com''.</ref><ref name="C-malloc">[[https://en.cppreference.com/w/c/memory/malloc](https://en.cppreference.com/w/c/memory/malloc) malloc]. ''cppreference.com''.</ref><ref name="C-free">[[https://en.cppreference.com/w/c/memory/free](https://en.cppreference.com/w/c/memory/free) free]. ''cppreference.com''.</ref>


Istilah larik dinamis perlu dibedakan dari larik biasa yang dialokasikan secara dinamis tetapi panjangnya tetap setelah dibuat. Sebagai contoh, larik bawaan pada Java dibuat secara dinamis sebagai [[objek (ilmu komputer)|objek]], tetapi panjang lariknya tetap eksak setelah objek larik tersebut pertama kali diinisialisasi.
Istilah larik dinamis perlu dibedakan dari larik biasa yang dialokasikan secara dinamis tetapi panjangnya tetap setelah dibuat. Sebagai contoh, larik bawaan pada Java dibuat secara dinamis sebagai [[objek (ilmu komputer)|objek]], tetapi panjang lariknya tetap eksak setelah objek larik tersebut pertama kali diinisialisasi.<ref name="JLS-array">[[https://docs.oracle.com/javase/specs/jls/se7/html/jls-10.html](https://docs.oracle.com/javase/specs/jls/se7/html/jls-10.html) Chapter 10. Arrays]. ''The Java Language Specification''. Oracle.</ref>


== Perbandingan dengan struktur data lain ==
== Perbandingan dengan struktur data lain ==
Baris 75: Baris 85:


== Larik dalam beberapa bahasa pemrograman ==
== Larik dalam beberapa bahasa pemrograman ==
=== Pascal ===
=== Pascal ===
Dalam Pascal, larik dapat didefinisikan dengan indeks awal dan indeks akhir. Pemrogram dapat menentukan rentang indeks sesuai kebutuhan secara eksplisit.
Dalam Pascal, larik dapat didefinisikan dengan indeks awal dan indeks akhir. Pemrogram dapat menentukan rentang indeks sesuai kebutuhan secara eksplisit.


Contoh:
Contoh:
<syntaxhighlight lang="pascal">
program ContohLarik;
var
  arr: array[1..10] of integer;


begin
  arr[1] := 5;
  writeln(arr[1]);
end.
</syntaxhighlight>


Pada contoh tersebut, larik <code>arr</code> memiliki indeks dari 1 sampai 10. Unsur pertama diakses dengan <code>arr[1]</code>, bukan <code>arr[0]</code>. Beberapa implementasi Pascal modern, seperti [[Free Pascal]], juga mendukung larik dinamis yang dapat diubah ukurannya menggunakan prosedur <code>SetLength</code>.
Pada contoh tersebut, larik <code>arr</code> memiliki indeks dari 1 sampai 10. Unsur pertama diakses dengan <code>arr[1]</code>, bukan <code>arr[0]</code>. Beberapa implementasi Pascal modern, seperti [[Free Pascal]], juga mendukung larik dinamis yang dapat diubah ukurannya menggunakan prosedur <code>SetLength</code>.<ref name="FreePascal-array">[[https://downloads.freepascal.org/fpc/docs-pdf/ref.pdf](https://downloads.freepascal.org/fpc/docs-pdf/ref.pdf) Free Pascal Reference Guide]. Free Pascal.</ref>


=== C ===
=== C ===
Dalam bahasa C, larik memiliki unsur bertipe sama dan disandikan secara ketat pada memori yang kontigu. Jika sebuah larik memiliki 10 unsur, indeks batasannya murni secara numerik adalah 0 sampai 9.
Dalam bahasa C, larik memiliki unsur bertipe sama dan disandikan secara ketat pada memori yang kontigu. Jika sebuah larik memiliki 10 unsur, indeks batasannya murni secara numerik adalah 0 sampai 9.<ref name="C-array" />


Contoh larik statis:
Contoh larik statis:
<syntaxhighlight lang="c">
#include <stdio.h>
int main(void) {
    int arr[10];
    arr[0] = 5;
    printf("%d\n", arr[0]);


    return 0;
}
</syntaxhighlight>


C juga memungkinkan alokasi larik secara dinamis. Pada pendekatan ini, pemrogram memesan memori di [[heap (struktur data)|heap]] dan wajib membebaskannya kembali menggunakan <code>free</code> agar tidak memicu [[kebocoran memori]] (''memory leak'').
C juga memungkinkan alokasi larik secara dinamis. Pada pendekatan ini, pemrogram memesan memori di [[heap (struktur data)|heap]] dan wajib membebaskannya kembali menggunakan <code>free</code> agar tidak memicu [[kebocoran memori]] (''memory leak'').


Contoh alokasi dinamis:
Contoh alokasi dinamis:
<syntaxhighlight lang="c">
#include <stdio.h>
#include <stdlib.h>
int main(void) {
    int *arr = malloc(10 * sizeof *arr);
    if (arr == NULL) {
        return 1;
    }
    arr[0] = 5;
    printf("%d\n", arr[0]);


    free(arr);
    return 0;
}
</syntaxhighlight>


=== C++ ===
=== C++ ===
Baris 101: Baris 148:


Contoh <code>std::vector</code>:
Contoh <code>std::vector</code>:
<syntaxhighlight lang="cpp">
#include <iostream>
#include <vector>
int main() {
    std::vector<int> angka = {10, 20, 30};
    angka.push_back(40); // Menambah elemen ke akhir vektor
    std::cout << angka[3] << '\n';


    return 0;
}
</syntaxhighlight>


=== Java ===
=== Java ===
Dalam Java, larik tergolong sebagai objek (''first-class object''). Larik dibuat secara dinamis dan dirujuk oleh variabel objek. Karena terisolasi, Java menyediakan perlindungan bawaan terhadap akses indeks di luar batas.
Dalam Java, larik tergolong sebagai objek (''first-class object''). Larik dibuat secara dinamis dan dirujuk oleh variabel objek. Karena terisolasi, Java menyediakan perlindungan bawaan terhadap akses indeks di luar batas.<ref name="JLS-array" />


Contoh:
Contoh:
<syntaxhighlight lang="java">
public class ContohLarik {
    public static void main(String[] args) {
        int[] arr = new int[10];


        arr[0] = 5;
        System.out.println(arr[0]);
    }
}
</syntaxhighlight>


Pada Java, memori yang tak lagi digunakan akan ditangani langsung oleh subsistem [[pengumpulan sampah (ilmu komputer)|pengumpulan sampah]] (''garbage collector''). Untuk larik yang mampu bertumbuh ukurannya, Java menyediakan antarmuka tipe kelas bernama <code>ArrayList</code>.
Pada Java, memori yang tak lagi digunakan akan ditangani langsung oleh subsistem [[pengumpulan sampah (ilmu komputer)|pengumpulan sampah]] (''garbage collector''). Untuk larik yang mampu bertumbuh ukurannya, Java menyediakan antarmuka tipe kelas bernama <code>ArrayList</code>.


=== JavaScript ===
=== JavaScript ===
Dalam JavaScript, larik dibangun menggunakan objek bawaan <code>Array</code>. Berbeda dengan bahasa pengetikan statis, larik dalam JavaScript bebas berubah ukuran kapan saja dan bisa memuat tipe data yang heterogen secara bersamaan.
Dalam JavaScript, larik dibangun menggunakan objek bawaan <code>Array</code>. Berbeda dengan bahasa pengetikan statis, larik dalam JavaScript bebas berubah ukuran kapan saja dan bisa memuat tipe data yang heterogen secara bersamaan.<ref name="MDN-JS-array">[[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array) Array]. ''MDN Web Docs''. Mozilla.</ref>


Contoh:
Contoh:
<syntaxhighlight lang="javascript">
const data = [10, "Halo Dunia", true];


data.push(40);
console.log(data[1]); // Mencetak teks
console.log(data.length);
</syntaxhighlight>


=== PHP ===
=== PHP ===
Dalam [[PHP]], larik dibangun di atas konsep peta terurut (''ordered map''). Karena dirancang khusus, tipe larik PHP dapat bertindak multifungsi sebagai larik berindeks klasik, larik asosiatif (dengan kunci *string*), hingga implementasi pohon atau tumpukan tingkat tinggi.
Dalam [[PHP]], larik dibangun di atas konsep peta terurut (''ordered map''). Karena dirancang khusus, tipe larik PHP dapat bertindak multifungsi sebagai larik berindeks klasik, larik asosiatif (dengan kunci *string*), hingga implementasi pohon atau tumpukan tingkat tinggi.<ref name="PHP-array">[[https://www.php.net/manual/en/language.types.array.php](https://www.php.net/manual/en/language.types.array.php) Arrays]. ''PHP Manual''. The PHP Group.</ref>


Contoh larik asosiatif:
Contoh larik asosiatif:
<syntaxhighlight lang="php">
<?php
$status_http = array(
    200 => "OK",
    404 => "Not Found",
    500 => "Internal Server Error"
);


echo $status_http[404];
?>
</syntaxhighlight>


=== Python ===
=== Python ===
Dalam Python, struktur bawaan yang paling identik untuk menyimpan deret nilai adalah objek <code>list</code>. Walaupun digunakan sebagaimana larik, di balik layar, <code>list</code> beroperasi sebagai larik dinamis rujukkan (menyimpan rujukan alamat menuju nilai, bukan nilainya secara langsung) dan mendukung penyimpanan tipe data yang beragam.
Dalam Python, struktur bawaan yang paling identik untuk menyimpan deret nilai adalah objek <code>list</code>. Walaupun digunakan sebagaimana larik, di balik layar, <code>list</code> beroperasi sebagai larik dinamis rujukkan (menyimpan rujukan alamat menuju nilai, bukan nilainya secara langsung) dan mendukung penyimpanan tipe data yang beragam.<ref name="Python-list">[[https://docs.python.org/3/tutorial/datastructures.html](https://docs.python.org/3/tutorial/datastructures.html) Data Structures]. ''Python 3 Documentation''. Python Software Foundation.</ref>


Contoh:
Contoh:
<syntaxhighlight lang="python">
angka = [10, 20, 30]


angka.append(40)
print(angka[0])
print(len(angka))
</syntaxhighlight>


Untuk operasi matematis berat yang membutuhkan larik kontigu (seperti di bahasa C), Python memiliki pustaka modular standar <code>array</code> dan pustaka eksternal pihak ketiga yang menjadi andalan industri yakni [[NumPy]].
Untuk operasi matematis berat yang membutuhkan larik kontigu (seperti di bahasa C), Python memiliki pustaka modular standar <code>array</code> dan pustaka eksternal pihak ketiga yang menjadi andalan industri yakni [[NumPy]].
Baris 134: Baris 224:
Kompleksitas [[Algoritma|algoritme]] pada larik bergantung pada karakteristik dan jenisnya (statis vs dinamis). Pada larik biasa, perhitungan posisinya langsung diterjemahkan menjadi lompatan alamat tunggal.
Kompleksitas [[Algoritma|algoritme]] pada larik bergantung pada karakteristik dan jenisnya (statis vs dinamis). Pada larik biasa, perhitungan posisinya langsung diterjemahkan menjadi lompatan alamat tunggal.


{| class="wikitable"
|-
! Operasi !! Kompleksitas waktu
|-
| Mengakses unsur berdasarkan indeks || <math>O(1)</math>
|-
| Mengubah nilai unsur berdasarkan indeks || <math>O(1)</math>
|-
| Mencari nilai tanpa pengurutan (''Linear search'') || <math>O(n)</math>
|-
| Menyisipkan unsur di akhir larik dinamis || <math>O(1)</math> teramortisasi
|-
| Menyisipkan unsur di tengah || <math>O(n)</math>
|-
| Menghapus unsur di tengah || <math>O(n)</math>
|}


Kata "teramortisasi" (*amortized*) pada penyisipan di akhir larik dinamis merujuk pada fakta bahwa sebagian besar penyisipan berlangsung dalam waktu <math>O(1)</math>. Namun, sesekali ketika daya tampung (*capacity*) internal larik penuh, sistem harus mengalokasikan bongkahan memori baru yang lebih besar dan menyalin seluruh unsur lama, yang membutuhkan waktu <math>O(n)</math>. Apabila digabungkan dan dirata-ratakan seiring berjalannya program, biayanya tetap konstan.
Kata "teramortisasi" (*amortized*) pada penyisipan di akhir larik dinamis merujuk pada fakta bahwa sebagian besar penyisipan berlangsung dalam waktu <math>O(1)</math>. Namun, sesekali ketika daya tampung (*capacity*) internal larik penuh, sistem harus mengalokasikan bongkahan memori baru yang lebih besar dan menyalin seluruh unsur lama, yang membutuhkan waktu <math>O(n)</math>. Apabila digabungkan dan dirata-ratakan seiring berjalannya program, biayanya tetap konstan.
Baris 159: Baris 265:
* [[Alokasi memori dinamis]]
* [[Alokasi memori dinamis]]
* [[Pengumpulan sampah (ilmu komputer)]]
* [[Pengumpulan sampah (ilmu komputer)]]
== Referensi ==


== Pranala luar ==
== Pranala luar ==
Baris 169: Baris 272:
*  [[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array) Dokumentasi Array di MDN Web Docs]
*  [[https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array) Dokumentasi Array di MDN Web Docs]
*  [[https://docs.python.org/3/tutorial/datastructures.html](https://docs.python.org/3/tutorial/datastructures.html) Struktur data dalam dokumentasi Python]
*  [[https://docs.python.org/3/tutorial/datastructures.html](https://docs.python.org/3/tutorial/datastructures.html) Struktur data dalam dokumentasi Python]


[[Kategori:Struktur data]]
[[Kategori:Struktur data]]
[[Kategori:Tipe data]]
[[Kategori:Tipe data]]
[[Kategori:Pemrograman]]
[[Kategori:Pemrograman]]
== Referensi ==
<references />


== Sumber dan atribusi ==
== Sumber dan atribusi ==


Artikel ini diadaptasi dalam mode teks dari
Konten artikel ini diadaptasi dari [https://id.wikipedia.org/w/index.php?title=Larik&oldid=29547955 Wikipedia bahasa Indonesia], revisi 29547955 (2026-08-10T01:18:37Z), yang tersedia berdasarkan lisensi Creative Commons Atribusi-BerbagiSerupa (CC BY-SA). Mohon gunakan konten ini secara bijak serta sesuai dengan ketentuan lisensi yang berlaku.
[https://id.wikipedia.org/w/index.php?title=Larik&oldid=29547955 Wikipedia bahasa Indonesia],
 
revisi 29547955 (2026-08-10T01:18:37Z).
<!-- WIKI_UNISSULA_PRESENTATION_V4 -->
Gambar, media, infobox, templat navigasi, dan kategori sumber
tidak diimpor ke Wiki Unissula.
Atribusi dan lisensi mengikuti ketentuan Creative Commons
Atribusi-BerbagiSerupa (CC BY-SA) pada sumber Wikipedia.

Revisi terkini sejak 23 Agustus 2026 03.05

Dalam ilmu komputer, larik () adalah struktur data atau tipe data majemuk yang menyimpan sekumpulan unsur dan memungkinkan setiap unsur diakses melalui indeks atau subskrip. Dalam banyak bahasa pemrograman, unsur-unsur larik memiliki tipe data yang sama dan disimpan pada lokasi memori yang berurutan. Namun, dalam beberapa bahasa tingkat tinggi, istilah larik juga dapat merujuk pada struktur berindeks yang lebih lentur, seperti larik dinamis, larik asosiatif, atau struktur mirip daftar.[1][2]

Larik biasanya digunakan untuk menyimpan data yang jumlahnya lebih dari satu tetapi masih berada dalam satu kelompok logis, misalnya daftar nilai, kumpulan nama, piksel gambar, matriks, tabel, atau deretan karakter. Setiap unsur larik dapat diakses langsung dengan menyebutkan indeksnya. Pada banyak bahasa pemrograman modern, indeks larik dimulai dari 0 (zero-based indexing), tetapi ada pula bahasa yang mengizinkan indeks dimulai dari 1 atau dari rentang lain yang ditentukan oleh pemrogram.

Konsep dasar

Secara konseptual, larik dapat dipandang sebagai kumpulan unsur yang tersusun menurut urutan tertentu. Jika sebuah larik bernama A memiliki beberapa unsur, maka unsur pertama, kedua, dan seterusnya dapat dirujuk dengan notasi indeks, misalnya A[0], A[1], atau A[i]. Indeks tersebut menunjukkan posisi unsur di dalam larik.

Sebuah larik biasanya memiliki beberapa ciri:

  • memiliki nama atau rujukan;
  • memiliki sejumlah unsur;
  • setiap unsur dapat diakses secara acak (akses acak) melalui indeks;
  • unsur-unsurnya tersusun dalam urutan tertentu;
  • dalam banyak implementasi, unsur-unsurnya memiliki tipe yang sama;
  • dalam implementasi tingkat rendah, unsur-unsurnya sering disimpan pada blok memori yang berdampingan secara fisik.

Pada larik yang disimpan secara kontigu, alamat suatu unsur dapat dihitung secara matematis dari alamat awal larik, ukuran setiap unsur (dalam bita), dan indeks unsur tersebut. Karena itu, pengaksesan unsur larik berdasarkan indeks biasanya dapat dilakukan dalam waktu konstan, yaitu O(1).[3]

Indeks

Indeks adalah bilangan bulat atau nilai yang digunakan untuk mengakses unsur tertentu dalam larik. Dalam bahasa seperti C, C++, Java, JavaScript, dan Python, indeks larik atau struktur sejenis larik umumnya dimulai dari 0. Dengan demikian, unsur pertama berada pada indeks 0 dan unsur terakhir berada pada indeks n - 1, dengan n sebagai panjang larik.

Dalam bahasa lain, indeks dapat dimulai dari 1 atau ditentukan secara eksplisit. Pascal, misalnya, memungkinkan pemrogram menentukan rentang indeks kustom, seperti array[1..10] of integer atau bahkan indeks bernilai negatif.

Kesalahan umum dalam penggunaan larik adalah mengakses indeks di luar batas (out-of-bounds). Jika larik memiliki 10 unsur dengan indeks 0 sampai 9, maka akses ke indeks 10 berada di luar batas. Pada beberapa bahasa modern, kesalahan ini menghasilkan galat (exception) saat program berjalan. Pada bahasa seperti C, akses di luar batas dapat membaca data acak di memori atau menimbulkan perilaku tak terdefinisi (undefined behavior), yang dapat berujung pada kerentanan keamanan.

Larik satu dimensi

Larik satu dimensi adalah larik yang hanya menggunakan satu indeks untuk mengakses unsurnya. Larik ini dapat dipandang sebagai barisan data sederhana.

Contoh larik satu dimensi:

<syntaxhighlight lang="text"> A = [10, 20, 30, 40, 50] </syntaxhighlight>

Pada contoh tersebut, jika indeks dimulai dari 0, maka:

  • A[0] bernilai 10;
  • A[1] bernilai 20;
  • A[4] bernilai 50.

Larik satu dimensi banyak digunakan untuk menyimpan daftar nilai, daftar nama, hasil pengukuran, deretan karakter, dan struktur data linear lainnya. Dalam bahasa C, untaian teks (string) direpresentasikan secara bawaan sebagai larik karakter yang diakhiri dengan karakter null (\0).

Larik multidimensi

Larik multidimensi adalah larik yang menggunakan lebih dari satu indeks. Bentuk yang paling umum adalah larik dua dimensi, yang sering digunakan untuk merepresentasikan tabel, papan permainan, citra digital, atau matriks.

Contoh larik dua dimensi:

<syntaxhighlight lang="text"> M = [

 [1, 2, 3],
 [4, 5, 6],
 [7, 8, 9]

] </syntaxhighlight>

Jika indeks dimulai dari 0, maka M[0][0] bernilai 1, M[1][2] bernilai 6, dan M[2][2] bernilai 9.

Dalam penyimpanan memori (yang pada dasarnya bersifat satu dimensi atau linear), larik multidimensi dapat disusun dengan urutan baris-utama (row-major order) atau kolom-utama (column-major order).

  • Pada urutan baris-utama (digunakan oleh C/C++), unsur-unsur dalam satu baris disimpan berdekatan terlebih dahulu.
  • Pada urutan kolom-utama (digunakan oleh Fortran dan MATLAB), unsur-unsur dalam satu kolom disimpan berdekatan terlebih dahulu.

Perbedaan ini sangat penting untuk dipahami karena iterasi yang tidak sesuai dengan susunan memori dapat menurunkan performa program secara drastis, terutama pada komputasi numerik besar.

Larik statis dan larik dinamis

Berdasarkan perubahan ukurannya, larik dapat dibedakan menjadi larik statis dan larik dinamis.

Larik statis adalah larik yang ukurannya ditentukan ketika dideklarasikan dan tidak dapat berubah selama masa hidupnya. Larik seperti ini umum ditemukan dalam bahasa tingkat rendah karena kompiler dapat memesan memori secara langsung di dalam tumpukan (stack).

Larik dinamis adalah larik yang ukurannya dapat ditentukan atau diubah saat program berjalan. Dalam beberapa bahasa, larik dinamis dapat diubah ukurannya secara otomatis oleh bahasa atau pustaka standar. Dalam bahasa yang lebih manual seperti C, pemrogram perlu melakukan alokasi memori dinamis secara manual menggunakan fungsi pustaka seperti malloc, calloc, realloc, dan free.[4][5][6]

Istilah larik dinamis perlu dibedakan dari larik biasa yang dialokasikan secara dinamis tetapi panjangnya tetap setelah dibuat. Sebagai contoh, larik bawaan pada Java dibuat secara dinamis sebagai objek, tetapi panjang lariknya tetap eksak setelah objek larik tersebut pertama kali diinisialisasi.[7]

Perbandingan dengan struktur data lain

Larik memiliki karakteristik kinerja yang unik dibandingkan struktur data koleksi lainnya seperti senarai berantai, tumpukan, antrean, dan tabel hash.

Kelebihan larik:

  • Pengaksesan seketika: Pengaksesan unsur berdasarkan indeks memakan waktu sangat cepat (O(1)).
  • Lokalitas rujukan (Cache locality): Karena disimpan secara kontigu, unit pemroses sentral (CPU) dapat memuat blok larik ke dalam tembolok (cache) dengan sangat efisien. Hal ini membuat perulangan pada larik jauh lebih cepat di dunia nyata dibandingkan senarai berantai, meskipun keduanya secara teoretis berpotensi memiliki kompleksitas O(n) saat diiterasi.
  • Efisien ruang: Representasi memori sederhana, tidak memerlukan memori tambahan untuk menyimpan penunjuk (pointer) rujukan antarsimpul seperti pada senarai berantai.

Kekurangan larik:

  • Ukuran kaku: Ukuran larik statis sulit diubah setelah dibuat. Memperbesar larik biasanya menuntut pembuatan larik baru dan penyalinan data secara keseluruhan.
  • Penyisipan yang mahal: Menyisipkan atau menghapus unsur di tengah-tengah larik mewajibkan program untuk menggeser unsur-unsur lainnya, sehingga memiliki kompleksitas waktu yang buruk (O(n)).
  • Limbah memori: Pada pemesanan blok memori yang besar tetapi tidak terpakai sepenuhnya, memori tersebut menjadi terbuang dan tidak dapat dipakai oleh proses lain.

Larik dalam beberapa bahasa pemrograman

Pascal

Dalam Pascal, larik dapat didefinisikan dengan indeks awal dan indeks akhir. Pemrogram dapat menentukan rentang indeks sesuai kebutuhan secara eksplisit.

Contoh: <syntaxhighlight lang="pascal"> program ContohLarik;

var

 arr: array[1..10] of integer;

begin

 arr[1] := 5;
 writeln(arr[1]);

end. </syntaxhighlight>

Pada contoh tersebut, larik arr memiliki indeks dari 1 sampai 10. Unsur pertama diakses dengan arr[1], bukan arr[0]. Beberapa implementasi Pascal modern, seperti Free Pascal, juga mendukung larik dinamis yang dapat diubah ukurannya menggunakan prosedur SetLength.[8]

C

Dalam bahasa C, larik memiliki unsur bertipe sama dan disandikan secara ketat pada memori yang kontigu. Jika sebuah larik memiliki 10 unsur, indeks batasannya murni secara numerik adalah 0 sampai 9.[4]

Contoh larik statis: <syntaxhighlight lang="c">

  1. include <stdio.h>

int main(void) {

   int arr[10];
   arr[0] = 5;
   printf("%d\n", arr[0]);
   return 0;

} </syntaxhighlight>

C juga memungkinkan alokasi larik secara dinamis. Pada pendekatan ini, pemrogram memesan memori di heap dan wajib membebaskannya kembali menggunakan free agar tidak memicu kebocoran memori (memory leak).

Contoh alokasi dinamis: <syntaxhighlight lang="c">

  1. include <stdio.h>
  2. include <stdlib.h>

int main(void) {

   int *arr = malloc(10 * sizeof *arr);
   if (arr == NULL) {
       return 1;
   }
   arr[0] = 5;
   printf("%d\n", arr[0]);
   free(arr);
   return 0;

} </syntaxhighlight>

C++

Dalam C++, larik gaya C tetap dipertahankan, tetapi pustaka standar C++ modern (STL) menyediakan pembungkus yang jauh lebih aman dan lentur melalui std::array dan std::vector.

std::array digunakan untuk larik berukuran tetap, sementara std::vector merepresentasikan larik dinamis yang ukurannya ditangani otomatis oleh wadah tersebut.

Contoh std::vector: <syntaxhighlight lang="cpp">

  1. include <iostream>
  2. include <vector>

int main() {

   std::vector<int> angka = {10, 20, 30};
   angka.push_back(40); // Menambah elemen ke akhir vektor
   std::cout << angka[3] << '\n';
   return 0;

} </syntaxhighlight>

Java

Dalam Java, larik tergolong sebagai objek (first-class object). Larik dibuat secara dinamis dan dirujuk oleh variabel objek. Karena terisolasi, Java menyediakan perlindungan bawaan terhadap akses indeks di luar batas.[7]

Contoh: <syntaxhighlight lang="java"> public class ContohLarik {

   public static void main(String[] args) {
       int[] arr = new int[10];
       arr[0] = 5;
       System.out.println(arr[0]);
   }

} </syntaxhighlight>

Pada Java, memori yang tak lagi digunakan akan ditangani langsung oleh subsistem pengumpulan sampah (garbage collector). Untuk larik yang mampu bertumbuh ukurannya, Java menyediakan antarmuka tipe kelas bernama ArrayList.

JavaScript

Dalam JavaScript, larik dibangun menggunakan objek bawaan Array. Berbeda dengan bahasa pengetikan statis, larik dalam JavaScript bebas berubah ukuran kapan saja dan bisa memuat tipe data yang heterogen secara bersamaan.[9]

Contoh: <syntaxhighlight lang="javascript"> const data = [10, "Halo Dunia", true];

data.push(40); console.log(data[1]); // Mencetak teks console.log(data.length); </syntaxhighlight>

PHP

Dalam PHP, larik dibangun di atas konsep peta terurut (ordered map). Karena dirancang khusus, tipe larik PHP dapat bertindak multifungsi sebagai larik berindeks klasik, larik asosiatif (dengan kunci *string*), hingga implementasi pohon atau tumpukan tingkat tinggi.[10]

Contoh larik asosiatif: <syntaxhighlight lang="php"> <?php $status_http = array(

   200 => "OK",
   404 => "Not Found",
   500 => "Internal Server Error"

);

echo $status_http[404]; ?> </syntaxhighlight>

Python

Dalam Python, struktur bawaan yang paling identik untuk menyimpan deret nilai adalah objek list. Walaupun digunakan sebagaimana larik, di balik layar, list beroperasi sebagai larik dinamis rujukkan (menyimpan rujukan alamat menuju nilai, bukan nilainya secara langsung) dan mendukung penyimpanan tipe data yang beragam.[11]

Contoh: <syntaxhighlight lang="python"> angka = [10, 20, 30]

angka.append(40) print(angka[0]) print(len(angka)) </syntaxhighlight>

Untuk operasi matematis berat yang membutuhkan larik kontigu (seperti di bahasa C), Python memiliki pustaka modular standar array dan pustaka eksternal pihak ketiga yang menjadi andalan industri yakni NumPy.

Kompleksitas operasi

Kompleksitas algoritme pada larik bergantung pada karakteristik dan jenisnya (statis vs dinamis). Pada larik biasa, perhitungan posisinya langsung diterjemahkan menjadi lompatan alamat tunggal.

Operasi Kompleksitas waktu
Mengakses unsur berdasarkan indeks O(1)
Mengubah nilai unsur berdasarkan indeks O(1)
Mencari nilai tanpa pengurutan (Linear search) O(n)
Menyisipkan unsur di akhir larik dinamis O(1) teramortisasi
Menyisipkan unsur di tengah O(n)
Menghapus unsur di tengah O(n)

Kata "teramortisasi" (*amortized*) pada penyisipan di akhir larik dinamis merujuk pada fakta bahwa sebagian besar penyisipan berlangsung dalam waktu O(1). Namun, sesekali ketika daya tampung (*capacity*) internal larik penuh, sistem harus mengalokasikan bongkahan memori baru yang lebih besar dan menyalin seluruh unsur lama, yang membutuhkan waktu O(n). Apabila digabungkan dan dirata-ratakan seiring berjalannya program, biayanya tetap konstan.

Penggunaan

Struktur larik merupakan tulang punggung pengembangan perangkat lunak modern. Penggunaannya meliputi:

  • menyimpan deret berurutan seperti daftar kontak, katalog barang, atau riwayat log;
  • fondasi utama komputasi piksel spasial dalam pengolahan citra;
  • memori penyangga (buffer) dalam pengolahan sinyal dan pemutaran audio/video;
  • fondasi struktural pada implementasi matriks komputasi;
  • pilar penyangga dalam merancang antrean (*queue*), tumpukan (*stack*), atau tabel hash (*hash map*);
  • mendukung struktur pengurutan massal.

Lihat pula

Pranala luar

Referensi

  1. Paul E. Black. [[1](https://xlinux.nist.gov/dads/HTML/array.html) array]. Dictionary of Algorithms and Data Structures. National Institute of Standards and Technology.
  2. [[2](https://csrc.nist.gov/glossary/term/array) Array]. Computer Security Resource Center Glossary. National Institute of Standards and Technology.
  3. Thomas H. Cormen. Introduction to Algorithms. MIT Press. 2009. ISBN 978-0-262-03384-8.
  4. 4,0 4,1 [[3](https://en.cppreference.com/w/c/language/array) Array declaration]. cppreference.com.
  5. [[4](https://en.cppreference.com/w/c/memory/malloc) malloc]. cppreference.com.
  6. [[5](https://en.cppreference.com/w/c/memory/free) free]. cppreference.com.
  7. 7,0 7,1 [[6](https://docs.oracle.com/javase/specs/jls/se7/html/jls-10.html) Chapter 10. Arrays]. The Java Language Specification. Oracle.
  8. [[7](https://downloads.freepascal.org/fpc/docs-pdf/ref.pdf) Free Pascal Reference Guide]. Free Pascal.
  9. [[8](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array) Array]. MDN Web Docs. Mozilla.
  10. [[9](https://www.php.net/manual/en/language.types.array.php) Arrays]. PHP Manual. The PHP Group.
  11. [[10](https://docs.python.org/3/tutorial/datastructures.html) Data Structures]. Python 3 Documentation. Python Software Foundation.

Sumber dan atribusi

Konten artikel ini diadaptasi dari Wikipedia bahasa Indonesia, revisi 29547955 (2026-08-10T01:18:37Z), yang tersedia berdasarkan lisensi Creative Commons Atribusi-BerbagiSerupa (CC BY-SA). Mohon gunakan konten ini secara bijak serta sesuai dengan ketentuan lisensi yang berlaku.