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.
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()
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
B. Ilustrasi
-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
Posting Komentar