Linked List Pada Python

Link List dan Double Link List Pada Python


1. Link List
    A. Definisi
         merupakan sebuah tempat yang disediakan pada satu area memori tertentu untuk menyimpan data yang dikenal dengan sebutan node atau simpul. Setiap node memiliki pointer yang menunjuk ke simpul berikutnya sehingga terbentuk satu untaian, dengan demikian hanya diperlukan sebuah variabel pointer. Susunan berupa untaian semacam ini disebut Single Linked List. Biasanya Linked List pada node terakhir akan menunjuk ke NULL, dimana  NULL memilik nilai khusus yang artinya tidak menunjuk ke mana-mana.
Pembuatan Single Linked List dapat menggunakan 2 metode:
– LIFO (Last In First Out), aplikasinya : Stack (Tumpukan)
– FIFO (First In First Out), aplikasinya : Queue (Antrean)

B. Ilustrasi
C. Source Code
 -Algoritma : 1. Single Link list yang bertipikal list terurut menggunakan OrderedList
                      2. Saat menambah data dalam list akan otomatis diurutkan dari data yang terkecil ke  data yang terbesar.

Code Program :
#------------------------------------------------------------------------------#
#Ach. Choirul umam
#160411100075
#------------------------------------------------------------------------------#
import os

# Membuat class untuk node
class Node(object):

    def __init__(self, data=None, next_node=None):
        self.data = data
        self.next_node = next_node
  
    # Mengambil data dari node
    def get_data(self):
        return self.data
  
    # Mengambil node berikutnya
    def get_next(self):
        return self.next_node
  
    # Menentukan node berikutnya
    def set_next(self, new_next):
        self.next_node = new_next
      
# Membuat class untuk linked list
class LinkedList(object):
    def __init__(self, head=None):
        self.head = head
  
    # Menambah node baru
    def insert(self, data):
        # Inisialisasi node baru
        new_node = Node(data)
        # Menunjuk node berikutnya dari node baru ke node yang ditunjuk oleh HEAD
        new_node.set_next(self.head)
        # HEAD menunjuk ke node baru
        self.head = new_node

    # Menghitung panjang list
    def size(self):
        # Membuat pointer baru menunjuk ke node yang ditunjuk oleh HEAD
        current = self.head
        count = 0
        # Perulangan untuk menghitung node
        while current:
            count += 1
            current = current.get_next()
        return count

    # Mencari sebuah data pada list
    def search(self, data):
        # Membuat pointer baru menunjuk ke node yang ditunjuk oleh HEAD
        current = self.head
        found = False
        # Perulangan mencari node yang dicari
        while current and found is False:
            if current.get_data() == data:
                found = True
            else:
                current = current.get_next()
              
        return found

    # Menghapus node
    def delete(self, data):
        current = self.head
        previous = None
        found = False
        while current and found is False:
            if current.get_data() == data:
                found = True
            else:
                previous = current
                current = current.get_next()
        if current is None:
            raise ValueError("Data not in list")
        if previous is None:
            self.head = current.get_next()
        else:
            previous.set_next(current.get_next())

    # Menampilkan isi dari list
    def showData(self):
        os.system('clear')
        print ("Tampilkan list data:")
        print ("Node -> Next Node")
        current_node = self.head
        while current_node is not None:
            print (current_node.data),
            print ("   ->"),
            print (current_node.next_node.data) if hasattr(current_node.next_node, "data") else None
          
            current_node = current_node.next_node

    # Main menu aplikasi
    def mainmenu(self):
        pilih = "y"
        while (pilih == "y"):
            os.system("clear")
            print("===============================")
            print("|  Menu aplikasi linked list  |")
            print("===============================")
            print("1. Insert data")
            print("2. Delete data")
            print("3. Cari data")
            print("4. Panjang dari linked list")
            print("5. Tampil data")
            print("===============================")
            pilihan=str(input(("Silakan masukan pilihan anda: ")))
            if(pilihan=="1"):
                os.system("clear")
                obj = str(input("Masukan data yang ingin anda tambahkan: "))
                self.insert(obj)
            elif(pilihan=="2"):
                os.system("clear")
                obj = str(input("Masukan data yang ingin anda dihapus: "))
                self.delete(obj)
                x = input("")
            elif(pilihan=="3"):
                os.system("clear")
                obj = str(input("Masukan data yang ingin anda dicari: "))
                status = self.search(obj)
                if status == True:
                    print("Data ditemukan pada list")
                else:                 
                    print("Data tidak ditemukan")
                    print("Terima kasih")
                    break
                x = input("")
            elif(pilihan=="4"):
                os.system("clear")
                print("Panjang dari queue adalah: "+str(self.size()))
                x = input("")
            elif(pilihan=="5"):
                os.system("clear")
                self.showData()
                x = input("")
            else:
                pilih="n"

if __name__ == "__main__":
    # execute only if run as a script
    l = LinkedList()
    l.mainmenu()

2. Double Link List
 A. Definisi
Doube Linked List sama seperti Single 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 double 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 Double Linked List.

B. Ilustrasi

Sorce Code :

#DOUBLE LINKED LIST
#Ach. Choirul umam
#160411100075
#=======================================================================

import os

# 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()





Komentar

Postingan populer dari blog ini

STRUKTUR DATA - INFIX, PREFIX, POSTFIX EXPRESSIONS Python

STRUKTUR DATA - Hashing Python

STRUKTUR DATA Sorting - Merged Sort, Shell Sort Python