Mvapdg – assalamualaikum wr. wb.
Jumpa lagi nih teman – teman ... pada kesempatan kali ini saya akan mencoba untuk menjelaskan tentang salah satu materi di dalam salah satu mata kuliah saya... materi yang akan saya bahas kali ini, adalah linked list.. yang merupakan bagian dari materi mata kuliah struktur data.. yang sudah saya dapatkan di semester 2 yang lalu... nah.. jadi saya bermaksud untuk berbagi ilmu bagi kalian yang membutuhkannya... sebenarnya, saya sudah memposting materi – materi dari mata kuliah yang sama... yaitu Stack, Queue dan deque. Nah jika kalian tertarik untuk membacanya, kalian bisa langsung klik pada tulisan materi yang ingin kalian baca..
Oke kita balik lagi ke pembahasan utama kita pada postingan saya kali ini... saya akan membahas deque ini dalam hal pengertiannya, kemudian simulasi serta code dari classnya ,... oke tanpa lama – lama lagi, yuk kita mulai pembahasannya...
Pengertian dan penjabaran mengenai Deque.
untuk pengolah data yang satu ini bisa saya katakan cukup sulit untuk dipahami. Karena saya pun membutuhkan pemikiran dan pemahaman yang ekstra untuk memahami konsep dari pengolah data yang satu ini. nah linked list sendiri merupakan sebuah data yang saling berkaitan satu sama lain. Sehingga dapat kita analaogikan sebagai tali yang memiliki sebuah data. Atau untuk lebih jelasnya kalian bisa melihat gambar dibawah ini ya teman – teman...nah seperti deque, stack dan yang lainnya, linked list juga memiliki beberapa fungsi untuk mewujudkan setiap fitur – fiturnya... nah terhitung hanya ada 4 metode saja di dalam class Node.. class node inilah yang akan berisi nilai didalam setiap linked list. Nah 4 metode tersebut dapat kaian lihat di bawah ini ya teman – teman...
- getData() digunakan untuk mendapatkan atau mengetahui sebuah nilai yang terdapat didalam setiap node.
- getNext() metode yang satu ini digunakan untuk mengetahui nilai yang berada di depannya.
- setData() ini digunakan untuk mengganti nilai yang terkandung di dalam sebuah list.
- setNext() merupakan metode yang digunakan untuk mengatur atau mendeklarasikan data yang ada di depannya.
- unOrderedList() membuat suatu list baru yang kosong. Tidak memerlukan parameter dan mengembalikan suatu list kosong.
- add(item) menambahkan suatu item baru ke dalam list. Diperlukan item yang akan ditambahkan dan tidak mengembalikan apapun. Anggapan: item tersebut belum ada dalam list.
- remove(item) menghapus item dari dalam list. Diperlukan item dan akan mengubah list. Anggapan: item tersebut tersedia di dalam list.
- search(item) mencari item di dalam list. Perlu item dan mengembalikan suatu nilai boolean.
- isEmpty() menguji untuk melihat apakah list dalam keadaan kosong (empty). Tidak memerlukan parameter dan mengembalikan suatu nilai boolean.
- size() mengembalikan jumlah item di dalam list. Tidak memerlukan parametyer dan mengembalikan suatu integer
simulasi dari Deque yang menggunakan unOrderedList.
Nah untuk lebih memahami dari deque ini alangkah lebih baiknya jika kalian menyimak simulasi yang akan saya berikan untuk kalian... simulasi yang akan saya berikan ini akan saya sajikan dalam bentuk tabel.. agar lebih terstruktur dan mudah untuk kalian pahami nantinya...
Oya.. sisini akan saya misalkan huruf ‘u’ adalah variabel yang sudah menampung class unOrderedList.
yuk langsung saja kita lihat simulasi nya pada tabel dibawah ini...
Nama
fungsi
|
Isi
linked list
|
Nilai
kembali
|
u.isEmpty()
|
True
|
|
u.add(‘saya’)
|
Saya > None
|
|
u.add(1)
|
Saya > 1 > None
|
|
u.add(True)
|
Saya > 1 > True > None
|
|
u.remove(‘Saya’)
|
1 > True > None
|
|
u.isEmpty()
|
1 > True > None
|
False
|
u.size()
|
1 > True > None
|
2
|
Contoh code program linked list.
Nah setelah kita mengetahui simulasi dari class unorderlist ini, maka sekarang waktunya kalian untuk mengetahui code dari class yang satu ini... seperti apakah code programnya? Yuk langsung saja kita lihat dibawah ini..class Node: def __init__(self,initdata): self.data = initdata self.next = None def getData(self): return self.data def getNext(self): return self.next def setData(self,newdata): self.data = newdata def setNext(self,newnext): self.next = newnext
Nah itu dia class sederhana dari class node yang merupakan simpul yang berisi data nantnya..namun, seperti ynag sudah sayaa katakan diatas, penggunaan class in cukup susah.. sehingga memerlukan class yang baru.. untuk mempermudah penggunaan nya.. nah sebelum saya memberikan code class unOrderList, saya akan membuktikan kekurangan class node apabila kita hanya menggunakannya saja... jadi lihat seperti di bawah ini ya teman – teman ..
n = Node(2)
n.next = Node(3)
n2 = node(1)
n2.next(n)
nah itu dia contoh penggunaan dari class node apabila kita menggunakannya secara manual.. kita harus mengisi kelanjutannya secara manual.. nah untuk mengisinya secara otomatis, di perlukanlah class tambahan yaitu unOrderList. Code programnya seperti berikut ini...
class Node: def __init__(self,initdata): self.data = initdata self.next = None def getData(self): return self.data def getNext(self): return self.next def setData(self,newdata): self.data = newdata def setNext(self,newnext): self.next = newnext class UnorderedList: def __init__(self): self.head = None def isEmpty(self): return self.head == None def add(self,item): temp = Node(item) temp.setNext(self.head) self.head = temp def size(self): current = self.head count = 0 while current != None: count = count + 1 current = current.getNext() return count def search(self,item): current = self.head found = False while current != None and not found: if current.getData() == item: found = True else: current = current.getNext() return found def remove(self,item): current = self.head previous = None found = False while not found: if current.getData() == item: found = True else: previous = current current = current.getNext() if previous == None: self.head = current.getNext() else: previous.setNext(current.getNext())
nah itu dia code program dari unOrderList ini... cukup panjang yaa... tapi dengan class tersebut, kita hanya perlu memanggil fungsi add untuk menambahkan... tanpa memperhatikan yang lainnya... maka secara otomatis akan bertambah.. tanpa susah - susah untuk mengatur mana data selanjutnya.. untuk lebih jelasnya kalian bisa melihat pada tabel simulasi yang sudah saya berikan sebelumnya...
Penjelasan code program contoh linked list.
nah untuk lebih memahami code dari class diatas, berikut ini saya akan mencoba untuk menjealaskannya..class Node: //class ini dapat kita analogikan sebagai simpul atau tempat dimana data atau elemen disimpan.
class Node: //class ini dapat kita
analogikan sebagai simpul atau tempat dimana data atau elemen disimpan.
def
__init__(self,initdata): //metode ini merupakan metode yang
otomatis akan dipanggil pertama dan secara otomatis ketika kita memanggil class
‘Node’. Dan saat kita memanggil class ‘Node’ kita harus memberikan parameter
yang akan dijadikan isi atau data elemen yang ada didalamnya.
self.data = initdata //ini merupakan pendeklarasian variabel
‘data’ yang akan kita isiskan data dari Node ini sendiri. Dan di dapat kan dari
parameter yang nanti akan dimasukkan oleh user.
self.next = None //untuk mendeklarasikan varriabel next
yang kita beri nila ‘None’ untuk pertama kalinya.
def
getData(self): //metode ini digunakan untuk mendapatkan
memperoleh isi data.
return self.data //nah ini merupakan isi dari metode
getData. Yang merupkan perintah untuk mengembalikan nilai yang ada dalam
variabel data.
def
getNext(self): //metode ini digunakan untuk mendapatkan
nilai next atau data yang terkait selanjutnya.
return self.next //merupakan isi dari metode getNext dan
merupakan perintah untuk mengembalikan nilai yang tertampung di dalam variabel
next.
def
setData(self,newdata)://metode ini digunakan untuk mengubah nilai
yang ada dalam variabel ‘data’
self.data = newdata //ini merupakan isi dari metode setData
yang merupakan perintah untuk mengubah nilai yang ada di dalam variabel ‘data’.
def
setNext(self,newnext): //metode ini digunakan untuk mengubah
nilai yang ada di dalam variabel next.
self.next = newnext //nah ini merupakan isi dari metode
setNext yang merupakan perintah untuk mengubah nilai dai ‘next’.
class UnorderedList:
//pembuatan class dengan nama UnordeledList dan tidak memerlukan parameter.
def
__init__(self): //merupakan metode yang otomatis
dijalankan ketika membuat class UnorderedList.
self.head = None //merupakan isi dari metode __init__ yang
berfungsi untuk mendeklarasikan variabel ‘head’.
def
isEmpty(self): //metode yang digunakan untuk mengecek
list dalam keadaan kosong atau tidak.
return self.head == None //merupakan isi dari metode isEmpty dan
merupakan perintah untuk mengembalikan hasil pengecekan kekosongan dari list.
Dengan cara membandingkan variabel ‘head’ dengan ‘None’. Jika benar akan
mengembalikan nilai True dan jika salah akan mengembalikan nilai False.
def
add(self,item): //merupakan metode yang digunakan untuk
menambah item kedalam list. Memerlukan parameter yang merupakan data yang akan
di masukkan ke dalam list.
temp = Node(item) //merupakan
isi dari metode ‘add’ dan merupakan perintah untuk mendeklarasikan variabel
‘temp’ yang berisi class ‘Node’.
temp.setNext(self.head) //merupakan isi dari metode
‘add’ dan merupakan perintah untuk memanggil metode yang ada didalam class node
yaitu ‘setNext’. Class ‘node’ tersebut sudah ditampung sebelumnya di variabel
‘tempt’.
self.head = temp //merupakan
isi dari metode ‘add’ dan merupakan perintah untuk merupbah nilai variabel
‘head’ menjadi nilai yang ada pada variabel ‘tempt’.
def
size(self): //metode ini diguankan untuk mengetaui ukuran atau
jumlah data di dalam list.
current = self.head //merupakan isi dari metode ‘size’ dan
merupakan perintah untuk mendeklarasikan variabel ‘current’ yang di beri nilai
sama seperti nilai dalam variabel ‘head’.
count = 0 //merupakan
isi dari metode ‘size’ dan merupakan perintah untuk mendeklarasikan variabel
‘count’ yang di beri nilai 0. Dan digunakan untuk menampung jumlah data atau
elemen yang akan hitung nantinya.
while current != None: //merupakan
isi dari metode ‘size’ dan merupakan perintah perulangan dengan kondisi
variabel ‘current’ tidak bernilai None.
count =
count + 1 //merupakan isi dari metode ‘size’ dan dan bagian
dari perulangan yang digunakan untuk perintah penambahan nilai di dalam
variabel ‘count’ sebanyak 1.
current = current.getNext() //merupakan
isi dari metode ‘size’ dan merupakan perintah untuk mendeklarasikan variabel
‘current’ yang di beri nilai sama seperti nilai yang berada pada kelanjutannya.
return count //digunakan
untuk mengembalikan hasil perhitungan.
def search(self,item): //metode yang digunakan
untuk mencari keberadaan item yang kita
masukkan dalam parameter.
current = self.head //merupakan
isi dari metode ‘search’ dan merupakan perintah untuk mendeklarasikan variabel
‘current’ yang di beri nilai sama seperti nilai dalam variabel ‘head’.
found = False //merupakan
isi dari metode ‘size’ dan merupakan perintah untuk mendeklarasikan variabel
‘found’ yang di beri nilai sama seperti nilai dalam variabel ‘head’.
while current != None and not found:
//merupakan isi dari metode ‘search’ dan merupakan
perintah perulangan dengan kondisi variabel ‘current’ tidak bernilai None dan
found bernilai False dan dikasi not untuk kebalikannya. Perulangan ini
digunakan untuk mencari itemnya.
if
current.getData() == item:
//membandingkan setiap data yang ada di dalam list.
found = True
//perintah untuk digunakan untuk
mengubah nilai di dalam variabel ‘Found’ menjadi ‘True’ jika ada kesamaan item dan data di dalam
list.
else:
//code atau perintah di dalam ‘else’ ini akan dijalankan ketika kondisi di
dalam if di atas tidak terpenuhi.
current = current.getNext() //digunakan untuk mengubah
nilai ‘current’ menjadi data terkait selanjutnya.
return found //digunakan
untuk mengembalikan hasil pencarian. ‘True’ jika ada data yang cocok dan
‘False’ jika tidak ada yang cocok.
def remove(self,item): //metode
yang digunakan untuk menghapus elemen didalam list.
current = self.head //merupakan
isi dari metode ‘remove’ dan merupakan perintah untuk mendeklarasikan variabel
‘current’ yang di beri nilai sama seperti nilai dalam variabel ‘head’.
previous = None //merupakan
isi dari metode ‘remove’ dan merupakan perintah untuk mendeklarasikan variabel
‘previous’ yang di beri nilai ‘None’.
found = False ////merupakan
isi dari metode ‘remove’ dan merupakan perintah untuk mendeklarasikan variabel
‘found’ yang di beri nilai ‘False’.
while not found: //merupakan
isi dari metode ‘remove’ dan merupakan perintah perulangan dengan kondisi
variabel found bernilai False dan dikasi not untuk kebalikannya. Perulangan ini
digunakan untuk mencari item yang akan dihapus nantinya.
if current.getData() == item: //membandingkan setiap data
yang ada di dalam list
found = True //perintah
untuk digunakan untuk mengubah nilai di
dalam variabel ‘Found’ menjadi ‘True’
jika ada kesamaan item dan data di dalam list.
else: //code
atau perintah di dalam ‘else’ ini akan dijalankan ketika kondisi di dalam if di
atas tidak terpenuhi.
previous = current //digunakan
untuk mengubah nilai ‘current’ menjadi data terkait selanjutnya.
current = current.getNext() //digunakan untuk mengubah nilai ‘current’
menjadi data terkait selanjutnya.
if
previous == None: //untuk menanyakan apakah nilai dari
variabel previous bernilai ‘None’ atau tidak.
self.head = current.getNext() //diguankan
untuk mengubah nilai didalam variabel ‘head’ menjadi nilai yang ada pada
‘current.getNext()’.
else: //code atau perintah di dalam ‘else’ ini
akan dijalankan ketika kondisi di dalam if di atas tidak terpenuhi.
previous.setNext(current.getNext())
//mengubah nilai variabel ‘next’ yang ada di dalam class ‘Node’ yang ditampung
didalam variabel ‘previous’ dengan cara memanggil fungsinah itu dia penjelasannya... oya.. perlu di ingat dan ditekan kan lagi.. dalam variabel yang ada di dalam class, harus menggunakan kata “self.” Sebelum nama variabelnya.. contohnya seperti variabel diata.. yaitu “self.data”. ini di gunakan agar variabel ‘data’ bisa di akses oleh metode lainnnya. Bisa kita lihat pada class Node diatas, dengan menggunakan kata ‘self.’ Maka variabel ‘data’ dapa kita panggil di metode getData dan setData.
Nah itu dia teman – teman pembahasan saya mengenai linked list ini... apabila ada yang kurang jelas dan ada yang ingin di tanyakan, kalian bisa berkomentar dibawah ini ya.. kurang lebihnya saya mohon maaf dan mohon di maklumi ya... oya jangan lupa dibagikan ketemen – teman sosial media kalian yaa... biar mereka juga bisa menambah ilmu... dan terima kasih sudah membaca postingan saya kali ini...
wassalamualaikum wr. wb.
ConversionConversion EmoticonEmoticon