Menu
CoddyTech

Ringkasan Koleksi Generik

Termasuk bagian Pemrograman Berorientasi Objek dalam perjalanan GO di Coddy. Pelajaran 72 dari 107.

challenge icon

Tantangan

Mudah

Mari buat struktur data Queue generik yang menunjukkan semua hal yang sudah kamu pelajari tentang generics di Go! Berbeda dengan stack (LIFO), queue mengikuti urutan First-In-First-Out (FIFO): item pertama yang ditambahkan adalah item pertama yang dihapus.

Kamu akan menyusun kodemu dalam dua file:

  • queue.go: Definisikan koleksi queue generikmu.

    Buat struct generik Queue[T any] yang menyimpan item secara internal. Queue-mu harus mendukung operasi berikut:

    • Enqueue(item T) - menambahkan item ke bagian belakang queue
    • Dequeue() (T, bool) - menghapus dan mengembalikan item dari bagian depan queue, beserta nilai boolean yang menunjukkan keberhasilan (kembalikan nilai nol dan false jika queue kosong)
    • Peek() (T, bool) - mengembalikan item di bagian depan tanpa menghapusnya (pola nilai kembalian sama seperti Dequeue)
    • Size() int - mengembalikan jumlah item dalam queue
    • IsEmpty() bool - mengembalikan true jika queue tidak memiliki item

    Buat juga fungsi konstruktor NewQueue[T any]() *Queue[T] yang mengembalikan pointer ke queue kosong yang sudah diinisialisasi.

  • main.go: Tunjukkan queue-mu dengan berbagai tipe berdasarkan input.

    Baca indikator tipe (int atau string), lalu baca serangkaian perintah untuk dijalankan pada queue. Setiap perintah berada pada baris tersendiri:

    • enqueue [value] - tambahkan nilai ke queue
    • dequeue - hapus dan cetak item di bagian depan (cetak empty jika queue kosong)
    • peek - cetak item di bagian depan tanpa menghapusnya (cetak empty jika queue kosong)
    • size - cetak ukuran saat ini

    Baca perintah sampai kamu menerima done.

Input berikut akan diberikan:

  • Baris 1: Indikator tipe (int atau string)
  • Baris berikutnya: Perintah sampai done

Contohnya, jika diberikan:

int
enqueue 10
enqueue 20
enqueue 30
peek
dequeue
size
dequeue
dequeue
dequeue
done

Output-mu seharusnya:

10
10
2
20
30
empty

Dan jika diberikan:

string
enqueue hello
enqueue world
size
peek
dequeue
peek
done

Output-mu seharusnya:

2
hello
hello
world

Queue-mu harus bekerja dengan cara yang sama untuk tipe integer dan string, menunjukkan cara satu implementasi generik menangani beberapa tipe konkret sambil tetap menjaga keamanan tipe secara penuh.

Coba sendiri

package main

import (
	"bufio"
	"fmt"
	"os"
	"strconv"
	"strings"
)

func main() {
	scanner := bufio.NewScanner(os.Stdin)
	
	// Baca penanda tipe
	scanner.Scan()
	typeIndicator := scanner.Text()
	
	if typeIndicator == "int" {
		// TODO: Buat queue bilangan bulat menggunakan NewQueue[int]()
		// Proses perintah untuk queue bilangan bulat
		
		for scanner.Scan() {
			line := scanner.Text()
			if line == "done" {
				break
			}
			
			parts := strings.SplitN(line, " ", 2)
			command := parts[0]
			
			// TODO: Tangani perintah: enqueue, dequeue, peek, size
			// Untuk enqueue, ubah nilai bilangan bulat dari parts[1]
			// Untuk dequeue/peek, cetak "empty" jika queue kosong
			_ = command
		}
	} else if typeIndicator == "string" {
		// TODO: Buat queue string menggunakan NewQueue[string]()
		// Proses perintah untuk queue string
		
		for scanner.Scan() {
			line := scanner.Text()
			if line == "done" {
				break
			}
			
			parts := strings.SplitN(line, " ", 2)
			command := parts[0]
			
			// TODO: Tangani perintah: enqueue, dequeue, peek, size
			// Untuk enqueue, gunakan nilai string dari parts[1]
			// Untuk dequeue/peek, cetak "empty" jika queue kosong
			_ = command
		}
	}
	
	// Ini ada untuk mencegah error akibat import yang tidak digunakan selama pengembangan
	_ = strconv.Atoi
	_ = fmt.Println
}

Semua pelajaran di Pemrograman Berorientasi Objek

Latihan sendiri: Compiler Go online