penjelasan lengkap deque pada python


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.
Nah, namun penggunaan class tersebut masih kurang efektif dan kurang enak untuk digunakan.. jadi, terdapat class tambahan yang bisa digunakan untuk mebuatnya semakin nyaman dan lebih mudah dipahami... class tersebut bernama ordered list dan un ordered list. Perbedaan dari kedua list tersebut hanya terdapat pada pengurutan datanya. Jadi, ordered list ini datanya akan selalu di urut mulai dari yang besar menuju yang kecil. Jadi ini diperuntukkan bagi item yang menggunakan angka. dan untuk unordered list list atau data yang dimasukkan kedalam list, tidak akan diurut.. nah untuk penggunaan dalam rangka mempermudah ini, saya akan menggunakan unordered list karena, list ini bisa digunakan untuk menambahkan tipe data apa saja. Seperti integer dan string. Jadi akan memudah kan kalian dalam menggunakan class ini nantinya.. nah class dari unordered list ini memiliki 5 buah metode untuk memberikan kalian kemudahan dalam menggunakan linked list.. nah 5 buah metode dapat Anda lihat di bawah ini ya teman – teman...
  • 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
nah itu dia teman – teman pengertian dan fungsi - fungsi yang ada di dalam linked list ini.. untuk lebih memahami mengenai materi yang satu ini, terus simak pembahasan saya di postingan kali ini ya...

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 fungsi

nah 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.
Previous
Next Post »
Thanks for your comment