Nama : Sofyan Adrianto
NIM : 2301869121
Jurusan : TI dan Statistika
Hari ini saya belajar:
Perintah malloc digunakan untuk memesan memori.
Dalam single linked list terdapat sebuah perjanjian yaitu head(selalu
pegang paling depan) yang merupakan awal dari linked list(paling depan),biasanya
tidak boleh berpindah,jika berpindah bisa terjadi salah coding dan setiap node
tidak memiliki tali penghubung. Ada juga yang namanya current(biasa disingkat
curr) ini bisa berpindah2 posisinya. Tail selalu pegang paling belakang. Nama
tidak memengaruhi asalkan fungsinya sama seperti yang diatas.
Pemesanan memori atau yang biasa kita kenal malloc,bisa dilakukan
sekali saja,jika kita menggunakan fungsi malloc yang sama berulang kali,maka
memori yang dipesan bertambah banyak. Kesimpulannya jadi kurang efisien jika
memesan memori berulang kali. Jadi yang harus kita lakukan adalah memesan
memori (menggunakan malloc) dapat dilakukan sekali saja.
Setelah kita pesan memori, di dalam memori terdapat sebuah tempat
untuk menaruh value. Value ini dapat kita isi dengan nilai seperti
10,20,30,dst.
Value tersebut dapat di print out ,berikut contoh coding singkatny
Curr= (struct data*)malloc(sizeof(struct data));
Curr->value = 10;
Printf(“%d\n”,Curr->value);
Harusnya angka 10 ter-print.
Ketika kita hanya memesan memori 1 kali,disaat kita memasukkan nilai value yang baru = 20,maka
nilai seblumnya,yaitu 10 akan terganti dengan 20.
Jika kita memesan memori berkali2,ketika kita ingin mengakses data
pertama,it dtidak dapt dilakukan karna tidak ada jalan untuk kembali,karena
memori itu sudah ditingglkan tapi memori itu masih ada dan gaakan pernah bisa
dipakai. Intinya kita harus berhati2 dlm menggunakan malloc.
Prinsip sederhana linked list adalah bagaimana caranya supaya list
yang sudah ditinggalkan tadi bisa diakses dan terhubung satu sama lain.
Jika kita ingin datanya menyatukan sebuah gerbong,dengan gerbong
yang lain,maka kita harus tau dulu bahwa di dalam gerbong terdapat value. Dan kita
dapat menggunakan next,untuk menyimpan alamat sebelah saya.dan alamat
sebelahnya sebelah saya, dst. Karena next tugasnya menyimpan alamat di
sebelahnya makanya next itu diberi pointer.
Kita dapat membua fungsi,misalnya namanya push atau insert atau
apapun. Yang fungsinya untuk insert data. Misal kita membuat :
Push(10); maka gerbong pertama akan diisi nilai 10.
Dalam struct data ad 2 variabel yang bisa dikasih nilai yaitu,value
dan next. Dimana value hrus diisi dengan integer,dan next harus diisi dengan
alamat.
Untuk mengecek apakah list tersebut berhasil disambungkan kita
bisa mengetahuinya melalui hasil dri print out nya.
Biasanya di data struct,bukan syntax yang error,tapi logicnya.
Kalau baru di push 1x, lalu kita next. Maka pas di run maka akan
error. Kenapa dia bisa error? Karena disaat kita push 1x,maka head memang sudah
ana valuenya. Namun ketika kita ketik head->next. Maka next nya kan null yaa,null
kan tidak punya value. Tapi dri null itu kita mau akses valuenya, itu yang
menyebabkan error.
Yang bisa kita print yaitu cth:
head->value,head->next,curr->value,dll.
Buat hapus memori kita menggunakan syntax seperti free(curr). Kelebihannya
linked list bisa mengemat memori,klo array gabisa dibuang.
Fungsi pop,berfungsi untuk menghapus dapat dilakukan dengan free.
Namun perlu diingat bahwa free bukan berarti dibuang, bila data yang di free
ingin digunakan sewaktu2 masih bisa.
Head sama tail Cuma bakal jadi satu kalo datanya sisa 1.
Double linked list, sama kayak single linked list. Tapi dia bisa
mundur,ga Cuma searah. Tugas kita kalo ingin membuat double linked list adalah
memastikan bahwa coding kita membuat setiap gerbong saling berkaitan(2arah) shg
bisa maju dan mundur. Linked list bisa pnya 8 tangan,bisa ngecek 8 arah.
Circular linked list tail->next = head,head->prev=tail. Jadi
muter gitu.
Tambahan dari bacaan di internet.
Stack
Stack atau tumpukan dapat diartikan
sebagai suatu kumpulan data yang seolah-olah terlihat seperti ada data yang
diletakkan di atas data yang lain. Kaidah utama dalam konsep stack adalah LIFO yang merupakan singkatan
dari Last In First Out, artinya adalah data yang
terakhir kali dimasukkan atau disimpan, maka data tersebut adalah yang pertama
kali akan diakses atau dikeluarkan.
Operasi-operasi dasar
dalam stack ada 2 yaitu operasi push dan pop:
- Operasi push, berfungsi untuk memasukkan sebuah nilai
atau data ke dalam stack. Sebelum
sebuah nilai atau data dimasukkan ke dalamstack, prosedur
ini terlebih dahulu akan menaikkan posisi top satu level ke atas.
Queue
pengertian queue dalam struktur data
Queue atau antrian merupakan struktur
data linear dimana penambahan komponen dilakukan disatu
ujung, sementara pengurangan dilakukan diujung lain. Kaidah utama dalam
konsep queue adalah FIFO yang merupakan singkatan
dari First In First Out, artinya adalah data yang
pertama kali dimasukkan atau disimpan, maka data tersebut adalah yang pertama
kali akan diakses atau dikeluarkan.
Algoritma Stack
a. Operasi Push
Operasi push digunakan untuk menambahkan sebuah elemen
baru ke atas tumpukan. Operasi ini dapat dilakukan jika tumpukan tidak
penuh. Algoritma operasi push pada stack adalah sebagai berikut:
- Menentukan kondisi tumpukan,
apakah tumpukan dalam keadaan kosong atau tidak.
- Jika kosong maka mendeklarasikan
data baru yang akan dimasukkan ke dalam tumpukan.
- Memasukkan nilai data yang baru.
- Melakukan perulangan untuk
memasukkan data hingga batas penuh tumpukan.
- Jika tumpukan sudah penuh maka
selesai.
b. Operasi Pop
Operasi pop digunakan untuk menghapus elemen teratas dari
tumpukan. Algoritma operasi pop pada stack adalah sebagai berikut:
- Melakukan pengecekan
kondisi antrian, ada isi data atau tidak.
- Jika terdapat data pada
antrian, maka lakukan penghapusan data dengan cara memindahkan head (elemen teratas tumpukan) ke
elemen dibawahnya.
- Kemudian menghapus elemen teratas
tumpukan.
- Jika tidak terdapat data pada
tumpukan maka selesai.
Perbedaan stack dan queue
- Stack merupakan tumpukan
sedangkan queue merupakan antrian.
- Stack bersifat LIFO (Last in first out) yang
artinya data yang terakhir masuk adalah data yang pertama keluar
sedangkan queue bersifat FIFO
( First in first out) yaitu data yang pertama masuk
akan pertama kali keluar.
- Perbedaan antara stack dan queue terdapat
pada aturan penambahan dan penghapusan elemen. Pada stack, operasi penambahan dan penghapusan elemen
dilakukan di satu ujung. Elemen yang terakhir kali dimasukkan akan berada
paling dekat dengan ujung atau dianggap paling atas sehingga pada operasi
penghapusan, elemen teratas akan dihapus paling awal (LIFO). Pada queue, operasi tersebut dilakukan di tempat yang
berbeda. Penambahan elemen selalu dilakukan melalui salah satu ujung
menempati posisi di belakang elemen-elemen yang sudah masuk sebelumnya
atau menjadi elemen paling belakang. Sedangkan penghapusan elemen
dilakukan di ujung yang berbeda, yaitu pada posisi elemen yang masuk
paling awal atau elemen terdepan (FIFO).
- Operasi pop, berfungsi untuk mengeluarkan atau
menghapus nilai terakhir (yang berada pada posisi paling atas) dari stack, dengan cara menurunkan nilai top satu level ke
bawah. [5] Berikut ilustrasi
kerja pada operasi pop: