Minggu, 01 Juli 2018

Doubly Linked List


Doubly Linked List 
Doubly Linked List sama seperti Singly link list merupakan sebuah tempat yang disediakan pada satu area memori tertentu untuk menyimpan data yang dikenal dengan sebutan node atau simpul. Akan tetapi, setiap node pada doubly linked list selain memiliki pointer yang menunjuk ke simpul berikutnya sehingga terbentuk satu untaian, juga memiliki pointer yang menunjuk ke simpul sebelumnya. Susunan berupa untaian model ini disebut Doubly Linked List. 



Kode Programnya:
# Class Node
class Node(object):
    # Inisialisasi node
    def __init__(self, data, prev, next):
        self.data = data
        self.prev = prev
        self.next = next

# Class untuk linked list
class DoubleList(object):

    head = None
    tail = None        
    # Menambah node
    def menuTambah(self):
        os.system('clear')
        temp = int(input('Masukkan data baru = '))
        new_node = Node(temp, None, None)
        # Memeriksa apakah list kosong
        if self.head is None:
            # Menunjuk HEAD dan TAIL ke node baru
            self.head = self.tail = new_node
        # Ketika list tidak kosong
        else:
            new_node.prev = self.tail
            new_node.next = None
            self.tail.next = new_node
            self.tail = new_node
   
    # Menghapus node
    def menuHapus(self):
        os.system('clear')
        temp = int(input('Masukkan data yang akan dihapus = '))
        # Membuat pointer yang menunjuk ke node pertama
        current_node = self.head
       
        # Melakukan perulangan saat list tidak kosong
        while current_node is not None:
            # Memeriksa data pada node yang ditunjuk pointer merupakan node yang akan dihapus
            if current_node.data == temp:
                #jika node yang dicari berada pada elemen terakhir
                if current_node.next is None:
                    current_node.prev.next = None
                # jika node yang dicari berada bukan pada elemen pertama
                elif current_node.prev is not None:
                    current_node.prev.next = current_node.next
                    current_node.next.prev = current_node.prev
                # Jika node yang dicari berada pada elemen pertama
                else:
                    self.head = current_node.next #memindahkan head ke elemen berikutnya
                    current_node.next.prev = None #menunjuk head prev menjadi none

            # Memindahkan pointer menunjuk ke node berikutnya
            current_node = current_node.next
           
    # Menampilkan isi dari list    
    def menuTampil(self):
        os.system('clear')
        print ("Tampilkan list data:")
       
        # Membuat pointer yang menunjuk ke node pertama
        current_node = self.head
        # Perulangan menampilkan data beserta data sebelum dan sesudahnya
        while current_node is not None:
            print (current_node.prev.data) if hasattr(current_node.prev, "data") else None,
            print (current_node.data),
            print (current_node.next.data) if hasattr(current_node.next, "data") else None
            # Menunjuk ke node berikutnya
            current_node = current_node.next
           
    # Menampilkan menu program     
    def menuUmum(self):
        pilih = "y"
        while ((pilih == "y") or (pilih == "Y")):
            os.system('clear')
            print('Pilih menu yang anda inginkan')
            print('==============================')
            print('1 : Tambah data ke linked list')
            print('2 : Hapus data di linked list')
            print('3 : Tampilkan data di linked list')
            print('4 : Keluar Program')
            pilihan = str(input("Masukkan Menu yang anda pilih = "))
            if(pilihan == "1"):
                self.menuTambah()
            elif(pilihan == "2"):
                self.menuHapus()
            elif(pilihan == "3"):
                self.menuTampil()
                x = input("")
            else :
                pilih ="n"
               
if __name__ == "__main__":
    # execute only if run as a script
    d = DoubleList()
    d.menuUmum()

Tidak ada komentar:

Posting Komentar