Stack Generik
Termasuk bagian Pemrograman Berorientasi Objek dalam perjalanan C di Coddy. Pelajaran 60 dari 61.
Tantangan
MudahStack adalah struktur data dasar yang mengikuti prinsip Last-In-First-Out (LIFO): elemen terakhir yang ditambahkan adalah elemen pertama yang dihapus. Bayangkan tumpukan piring: kamu menambahkan piring di bagian atas dan mengambil piring dari bagian atas.
Mari kita buat Generic Stack: struktur data serbaguna yang dapat menyimpan tipe data apa pun menggunakan pointer void*. Stack-mu akan mengikuti prinsip Last-In-First-Out, lengkap dengan semua operasi penting.
Kamu akan mengatur kodemu dalam tiga file:
stack.h: Definisikan structStackdengan tiga anggota: arrayvoid**untuk item,intuntuk indeks teratas (slot kosong berikutnya), danintuntuk kapasitas. Deklarasikan prototipe fungsi untuk membuat stack (menerima kapasitas), menambahkan item, mengambil item, melihat item teratas, memeriksa apakah stack kosong, dan membebaskan stack.stack.c: Implementasikan stack generikmu:create_stack: mengalokasikan Stack di heap, mengalokasikan array items dengan kapasitas yang diberikan, menginisialisasi top menjadi 0, lalu mengembalikan pointerpush: menambahkan item ke bagian atas jika masih ada ruang (saat top kurang dari capacity)pop: menghapus dan mengembalikan item teratas, atau mengembalikanNULLjika stack kosongpeek: mengembalikan item teratas tanpa menghapusnya, atauNULLjika kosongis_empty: mengembalikan 1 jika stack tidak memiliki item, dan 0 jika tidakfree_stack: membebaskan array items terlebih dahulu, lalu struct Stack itu sendiri
main.c: Baca jumlah operasi yang akan dilakukan. Lalu, untuk setiap operasi, baca perintah:pushdiikuti nilai integer,pop, ataupeek. Buat stack dengan kapasitas 10. Untukpush, alokasikan integer di heap dan tambahkan pointer-nya. Untukpop, ambil item, cetak nilainya, lalu bebaskan integer tersebut. Untukpeek, cetak nilainya tanpa menghapusnya. Jikapopataupeekdipanggil pada stack kosong, cetakempty. Setelah semua operasi, bebaskan item yang tersisa dan stack.
Programmu akan menerima:
- Jumlah operasi
- Setiap operasi pada baris terpisah (
push X,pop, ataupeek)
Contoh output saat inputnya adalah 5, lalu push 10, push 20, peek, pop, pop:
20
20
10Contoh output saat inputnya adalah 3, lalu pop, push 42, peek:
empty
42Contoh output saat inputnya adalah 4, lalu push 5, push 15, pop, pop:
15
5Ingat bahwa stack-mu menyimpan pointer void*: pemanggil bertanggung jawab untuk mengalokasikan dan membebaskan data sebenarnya. Saat mengambil item, ubah tipe void* yang dikembalikan menjadi int* agar kamu dapat mengakses nilainya. Gunakan strcmp dari <string.h> untuk membandingkan string perintah.
Coba sendiri
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "stack.h"
int main() {
int n;
scanf("%d", &n);
// TODO: Buat stack dengan kapasitas 10
// TODO: Proses setiap operasi
for (int i = 0; i < n; i++) {
char command[10];
scanf("%s", command);
if (strcmp(command, "push") == 0) {
int value;
scanf("%d", &value);
// TODO: Alokasikan sebuah integer di heap, lalu push pointer-nya ke stack
}
else if (strcmp(command, "pop") == 0) {
// TODO: Ambil item dari stack
// - Jika bukan NULL, cetak nilainya dan bebaskan memori integer tersebut
// - Jika NULL (stack kosong), cetak "empty"
}
else if (strcmp(command, "peek") == 0) {
// TODO: Lihat item teratas di stack
// - Jika bukan NULL, cetak nilainya (jangan hapus atau bebaskan memorinya)
// - Jika NULL (stack kosong), cetak "empty"
}
}
// TODO: Bebaskan memori semua item yang tersisa di stack
// TODO: Bebaskan memori stack itu sendiri
return 0;
}
Semua pelajaran di Pemrograman Berorientasi Objek
1Dasar-Dasar Pemrograman Modular
file headerProteksi includefile sumberFungsi StatisRingkasan: Kalkulator Modular4Enkapsulasi
Konsep Opaque PointerMendefinisikan Opaque StructGetter dan SetterValidasi pada SetterUlasan: Kotak Rahasia2Object dan method
Struct sebagai objectPointer 'self'Konsistensi constPointer vs nilaiMethod pembantuRangkuman: Pengelola Point5Proyek: Akun Bank Sederhana
Penyiapan ProyekImplementasi Akun3Siklus Hidup object
Pola KonstruktorPola DestruktorInisialisasi StackSalinan MendalamRangkuman: Pembungkus string6Pewarisan melalui Komposisi
Penyematan StructAturan Anggota PertamaMengakses Anggota ParentUpcastingRekap: Hierarki Bentuk9Proyek: Penggambar Bentuk
Ringkasan ProyekImplementasi LingkaranImplementasi Persegi PanjangPenggunaan PolimorfismeWadah BentukLatihan sendiri: Compiler C online