Dua tumpukan dapat diimplementasikan secara efisien menggunakan satu larik berukuran tetap: tumpukan # 1 mulai dari ujung kiri dan tumbuh ke kanan, dan tumpukan # 2 mulai dari ujung kanan dan tumbuh ke kiri. Apakah sama mungkin untuk tiga tumpukan?
Lebih khusus lagi, apakah mungkin untuk mengimplementasikan tiga tumpukan dengan ketentuan sebagai berikut:
- Anda memiliki array ukuran tetap yang dapat menampung objek N.
- Selama jumlah dari tiga ukuran stack adalah <N, push () seharusnya tidak gagal.
- Operasi push () dan pop () harus menghabiskan waktu O (1).
- Selain array, Anda hanya dapat menggunakan O (1) ruang tambahan.
Berikut adalah contoh solusi yang tidak memenuhi persyaratan ini:
- Membagi array menjadi 3 bagian tetap dan menggunakan setiap bagian untuk tumpukan (melanggar 2).
- Mirip dengan di atas tetapi dengan batas bergerak di antara tumpukan (melanggar 3).
- Implementasi sederhana berdasarkan daftar tertaut (melanggar 4).
Saya akan menerima algoritma non-sepele atau bukti ketidakmungkinan bahkan jika mereka tidak memenuhi semua kondisi (1) - (4) persis, misalnya, sebuah algoritma di mana push / pop mengambil O (1) waktu diamortisasi, atau di mana memori tambahan lebih kecil dari O (N), misalnya O (log N). Atau bukti ketidakmungkinan yang menunjukkan bahwa misalnya, mengakses kurang dari 5 elemen array per push / pop tidak mungkin.