Itu tidak sulit.
Dengan daftar tertaut ganda, saat Anda memasukkan, Anda akan mengalokasikan memori, dan kemudian Anda akan menghubungkan dengan kepala atau simpul sebelumnya, dan dengan ekor atau simpul berikutnya. Ketika Anda menghapus, Anda akan memutuskan tautan dari yang persis sama, dan kemudian membebaskan memori. Semua operasi ini simetris.
Ini mengasumsikan bahwa dalam kedua kasus Anda memiliki simpul untuk memasukkan / menghapus. (Dan dalam hal penyisipan, bahwa Anda juga memiliki simpul untuk disisipkan sebelumnya, jadi dengan cara, penyisipan dapat dianggap sebagai sedikit lebih rumit.) Jika Anda mencoba untuk menghapus tidak memiliki simpul untuk dihapus, tetapi payload dari node, maka tentu saja Anda harus terlebih dahulu mencari daftar payload, tapi itu bukan kekurangan penghapusan, bukan?
Dengan pohon seimbang, hal yang sama berlaku: pohon umumnya perlu menyeimbangkan segera setelah penyisipan dan juga segera setelah penghapusan. Merupakan ide bagus untuk mencoba dan hanya memiliki satu rutin penyeimbang, dan menerapkannya setelah setiap operasi, terlepas dari apakah itu penyisipan atau penghapusan. Jika Anda mencoba menerapkan penyisipan yang selalu membuat pohon seimbang, dan juga penghapusan yang selalu membuat pohon seimbang, tanpa keduanya memiliki rutinitas penyeimbang yang sama, Anda tidak perlu mempersulit hidup Anda.
Singkatnya, tidak ada alasan mengapa seseorang harus lebih keras daripada yang lain, dan jika Anda menemukan itu, maka sebenarnya mungkin Anda adalah korban dari kecenderungan (yang sangat manusiawi) untuk menemukan bahwa lebih alami untuk berpikir. konstruktif daripada subtraktif, artinya Anda mungkin menerapkan penghapusan dengan cara yang lebih rumit daripada yang seharusnya. Tapi itu masalah manusia. Dari sudut pandang matematika, tidak ada masalah.
pop
,extract-min
?