Pada Sebuah Aplikasi Pengolah Dokumen, Biasanya Terdapat Fasilitas untuk Melakukan Undo dan Redo

Pada sebuah aplikasi pengolah dokumen, biasanya terdapat fasilitas untuk melakukan Undo dan Redo. Operasi Undo akan membatalkan langkah/tindakan terakhir yang kita lakukan saat mengedit dokumen (misal, jika kita menyadari ada kesalahan pada langkah terakhir kita), sedangkan Redo digunakan untuk mengulang kembali operasi yang baru saja dibatalkan dengan sebuah Undo. Proses Undo dan Redo ini dapat dilakukan sampai dengan operasi pertama setelah sebuah dokumen dibuka/disimpan.
 
Misalnya, terjadi rangkaian kejadian berikut:
a. Budi membuka dokumen A
b. Budi menambahkan judul pada dokumen A
c. Budi menulis sebuah paragraf pada dokumen A
d. Budi menambahkan sebuah tabel pada dokumen A
e. Budi menyisipkan sebuah gambar pada dokumen A

Apabila kemudian Budi menekan tombol Undo, operasi terakhir (yaitu penambahan gambar) akan dibatalkan sehingga gambar tersebut akan hilang dari dokumen. Jika kemudian Budi menekan tombol Undo sekali lagi, operasi terakhir sebelum itu (yaitu menambahkan tabel) juga akan dibatalkan sehingga tabel tersebut akan hilang dari dokumen. Jika kemudian Budi menekan tombol Redo, operasi Undo yang terakhir (yaitu yang menghilangkan tabel) akan dibatalkan sehingga tabel tersebut akan muncul kembali.

Jelas bahwa aplikasi perlu untuk menyimpan data-data berupa tindakan/operasi apa saja yang dilakukan oleh penggunanya dari awal sampai akhir, serta efeknya terhadap dokumen agar dapat memberikan fungsionalitas Undo dan Redo tersebut. Manakah di antara stack dan queue yang lebih tepat digunakan untuk menyimpan operasi-operasi tersebut?

Jawaban:
Yang lebih tepat digunakan untuk menyimpan operasi-operasi tersebut adalah stack.

Alasan utama menggunakan stack adalah karena sifat Last-In-First-Out (LIFO) dari stack sesuai dengan urutan operasi yang dilakukan pengguna pada dokumen. Ketika pengguna melakukan sebuah operasi seperti menambahkan judul, menulis paragraf, menambahkan tabel, atau menyisipkan gambar, operasi tersebut ditambahkan ke atas stack. Ketika tombol Undo ditekan, operasi terakhir (yang paling baru) akan dihapus dari stack dan dilakukan pemulihan terhadap dokumen sesuai dengan efek dari operasi tersebut. Misalnya, jika operasi terakhir adalah menyisipkan gambar, gambar akan dihapus dari dokumen. Ketika tombol Redo ditekan, operasi yang dihapus oleh Undo sebelumnya (jika ada) akan kembali ditambahkan ke stack, dan dokumen akan dikembalikan ke keadaan sebelumnya sebelum operasi tersebut dihapus.

Dalam kasus ini, pengguna hanya perlu mengakses dan memanipulasi operasi terakhir yang dilakukan, yang merupakan fitur yang ditawarkan oleh stack. Pengguna hanya perlu mengakses operasi terakhir saat melakukan Undo dan Redo, sementara operasi sebelumnya tidak perlu diakses atau dimanipulasi secara langsung. Dengan menggunakan stack, pengguna dapat dengan mudah membatalkan operasi terakhir dan mengulanginya kembali.

Dalam hal ini, queue tidak sesuai karena sifat First-In-First-Out (FIFO) dari queue tidak mempertimbangkan urutan yang sesuai dengan kebutuhan Undo dan Redo. Queue akan menyimpan operasi-operasi dalam urutan yang berbeda dari urutan operasi yang dilakukan pengguna pada dokumen. Ketika tombol Undo ditekan, operasi pertama yang dilakukan (misalnya membuka dokumen) akan dibatalkan, yang tidak sesuai dengan kebutuhan Undo yang seharusnya membatalkan operasi terakhir. Jadi, pengguna tidak akan mendapatkan efek Undo yang diinginkan jika menggunakan queue.

Dengan demikian, menggunakan stack sebagai struktur data yang tepat untuk menyimpan operasi-operasi Undo dan Redo pada aplikasi pengolah dokumen akan memungkinkan pengguna untuk dengan mudah membatalkan dan mengulangi operasi-operasi dengan urutan yang sesuai dan diharapkan.