Daftar tertaut dapat digunakan saat Anda menginginkan penyisipan dan penghapusan elemen yang murah dan ketika tidak masalah bahwa elemen tersebut tidak bersebelahan dalam memori.
Ini sangat abstrak dan saya ingin penjelasan konkret mengapa daftar tertaut harus digunakan daripada array. Saya tidak terlalu berpengalaman dengan pemrograman, jadi saya tidak punya banyak (jika ada) pengalaman di dunia nyata.
data-structures
linked-list
sayap kanan
sumber
sumber
Jawaban:
Berikut adalah sesuatu yang merupakan bagian dari contoh dan analogi. Anda memiliki beberapa tugas yang harus dilakukan, sehingga Anda mengambil selembar kertas dan menulis:
Maka Anda ingat bahwa Anda juga perlu membeli perangko. Karena letak geografis kota Anda, Anda perlu melakukannya setelah bank. Anda dapat menyalin seluruh daftar Anda ke selembar kertas baru:
atau Anda dapat mencoret-coret yang Anda miliki:
Ketika Anda memikirkan tugas lain, Anda dapat menuliskannya di bagian bawah daftar, tetapi dengan panah yang mengingatkan diri sendiri bagaimana cara melakukannya. Ini adalah daftar yang ditautkan. Lebih cepat dan lebih mudah daripada menyalin seluruh daftar setiap kali Anda menambahkan sesuatu.
Kemudian ponsel Anda berdering saat Anda berada di bank "hei, saya dapatkan perangkonya, jangan ambil lagi". Anda cukup mencoret STAMPS dari daftar, Anda tidak menulis ulang yang baru tanpa STAMPS di dalamnya.
Sekarang Anda benar-benar dapat menerapkan daftar tugas dalam kode (mungkin aplikasi yang mengatur tugas berdasarkan geografi Anda) dan ada kemungkinan Anda akan menggunakan daftar tautan untuk itu dalam kode. Anda ingin menambah dan menghapus banyak item, memesan barang, tetapi Anda tidak ingin menyalin kembali seluruh daftar setelah setiap penyisipan atau penghapusan.
sumber
sumber
"Tumpukan panggilan" dalam bahasa C diimplementasikan sebagai daftar tertaut dalam API biner x86 (dan sebagian besar lainnya).
Yaitu, pemanggilan prosedur C-language mengikuti disiplin pertama, terakhir keluar. Hasil dari mengeksekusi (mungkin rekursif) panggilan fungsi akan disebut sebagai "tumpukan panggilan", atau kadang-kadang bahkan hanya "tumpukan".
The
CALL
instruksi x86 berakhir implmenting linked list dengan menggunakan "panggilan stack". SebuahCALL
instruksi mendorong isi% EIP register, alamat instruksi setelah ituCALL
ke memori stack. Prolog yang dipanggil berfungsi mendorong konten dari register% EBP, alamat terendah variabel lokal dalam fungsi panggilan, ke memori stack. Kemudian prolog fungsi yang dipanggil menetapkan% EBP ke basis tumpukan fungsi saat ini.Itu berarti bahwa% EBP adalah penunjuk ke lokasi memori yang menyimpan alamat dari nilai% EBP fungsi panggilan. Itu tidak lebih dari daftar tertaut, diimplementasikan sebagian dalam perangkat keras melalui
CALL
.Sejauh ini bagus, x86 CPU menerapkan panggilan fungsi, khususnya panggilan fungsi di mana fungsi memiliki salinan argumennya sendiri, dan variabel lokal ke fungsi tersebut. Setiap panggilan fungsi mendorong beberapa informasi pada "tumpukan panggilan" yang memungkinkan CPU mengambil tempat yang sebelumnya tidak digunakan dalam fungsi panggilan, tanpa gangguan dari fungsi yang dipanggil atau fungsi panggilan.
sumber
Daftar tertaut dapat digunakan untuk mengimplementasikan antrian pesan.
Antrian pesan adalah struktur tempat kami menyimpan informasi tentang acara untuk diproses nanti. Misalnya, ketika pengguna menekan tombol atau menggerakkan mouse, ini adalah suatu peristiwa. Suatu aplikasi mungkin sibuk pada saat peristiwa itu terjadi, sehingga tidak dapat diharapkan untuk memproses peristiwa itu pada saat yang tepat ketika itu terjadi. Jadi, acara tersebut ditempatkan dalam antrian pesan, (informasi tentang tombol mana yang ditekan, atau di mana mouse telah dipindahkan,) dan ketika aplikasi memiliki waktu luang, ia memeriksa antrian pesannya, mengambil peristiwa dari itu, dan memprosesnya mereka. (Ini terjadi dalam jangka waktu milidetik, sehingga tidak terlihat.)
Dari skenario penggunaan yang baru saja saya jelaskan, seharusnya jelas bahwa kita tidak pernah peduli untuk memiliki akses acak ke acara yang disimpan dalam antrian pesan; kami hanya peduli untuk dapat menyimpan pesan di dalamnya, dan mengambilnya. Jadi, masuk akal untuk menggunakan daftar tertaut, yang memberikan waktu penyisipan / penghapusan yang optimal.
(Tolong jangan mendukung untuk menunjukkan bahwa antrian pesan kemungkinan, atau lebih mungkin, atau hampir sama mungkin, diimplementasikan menggunakan daftar array melingkar; itu adalah detail teknis, dan memiliki batasan: Anda hanya dapat menyimpan sejumlah pesan di dalamnya.)
sumber