Dalam ilmu komputer, larik (bahasa Inggris: array) 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

sunting

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 .[3]

Indeks

sunting

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

sunting

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:

A = [10, 20, 30, 40, 50]

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

sunting

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:

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

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

sunting

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

sunting

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 ().
  • 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 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 ().
  • 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

sunting

Pascal

sunting

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

Contoh:

program ContohLarik;

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

begin
  arr[1] := 5;
  writeln(arr[1]);
end.

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

sunting

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:

#include <stdio.h>

int main(void) {
    int arr[10];

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

    return 0;
}

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:

#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;
}

C++

sunting

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:

#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;
}

Java

sunting

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:

public class ContohLarik {
    public static void main(String[] args) {
        int[] arr = new int[10];

        arr[0] = 5;
        System.out.println(arr[0]);
    }
}

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

sunting

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:

const data = [10, "Halo Dunia", true];

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

PHP

sunting

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:

<?php
$status_http = array(
    200 => "OK",
    404 => "Not Found",
    500 => "Internal Server Error"
);

echo $status_http[404];
?>

Python

sunting

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:

angka = [10, 20, 30]

angka.append(40)
print(angka[0])
print(len(angka))

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

sunting

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
Mengubah nilai unsur berdasarkan indeks
Mencari nilai tanpa pengurutan (Linear search)
Menyisipkan unsur di akhir larik dinamis teramortisasi
Menyisipkan unsur di tengah
Menghapus unsur di tengah

Kata "teramortisasi" (*amortized*) pada penyisipan di akhir larik dinamis merujuk pada fakta bahwa sebagian besar penyisipan berlangsung dalam waktu . 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 . Apabila digabungkan dan dirata-ratakan seiring berjalannya program, biayanya tetap konstan.

Penggunaan

sunting

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

sunting

Referensi

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

Pranala luar

sunting

📚 Artikel Terkait di Wikipedia

Teori pelabelan

177–85. doi:10.2307/2948372. JSTOR 2948372. PMID 6073201. Slater, D. (1971). Vector. 8 (7): 28–29. ; Sumner, C. (1994). The Sociology of Deviance: an Obituary

Transpos

2021. Pemeliharaan CS1: Status URL (link) "What is the best symbol for vector/matrix transpose?". Stack Exchange. Diakses tanggal 4 Feb 2021. Pemeliharaan

Barli

Jedlinski, H. (1981). "Rice Root Aphid, Rhopalosiphum rufiabdominalis, a Vector of Barley Yellow Dwarf Virus in Illinois, and the Disease Complex". Plant

Jason Segel

berjudul "Wonky Eyed Girl". Tahun 2010, ia mengisi suara musuh bebuyutan Gru, Vector, di film animasi CGI Universal, Despicable Me, dan tampil sebagai Horatio

Rank (aljabar linear)

adalah dimensi dari ruang kolom matriks tersebut, sedangkan peringkat baris (row rank) dari matriks A {\displaystyle \mathbf {A} } adalah dimensi dari ruang

Kuaternion

History of Vector Analysis: The Evolution of the Idea of a Vectorial System, University of Notre Dame Press. Surveys the major and minor vector systems of

Northrop BT

pada tahun 1935. Hal ini didukung oleh 700 hp (520 kW; 710 PS) mesin double row berpendingin udara radial Pratt dan Whitney XR-1535-66. Bowers, Peter M.

Mahershala Ali

Roxanne Roxanne Cross 2018 Green Book Don Shirley Spider-Man: Into the Spider-Verse Aaron Davis / The Prowler Pengisi suara 2019 Alita: Battle Angel Vector