Anda di halaman 1dari 14

1/7/2021 190411100157_AzharAsRahmatulloh_ProjectAkhirSDA_2A.

ipynb - Colaboratory

Nama : Azhar As Rahmatulloh

NIM : 190411100157

Kelas : Struktur Data 2A

PROJECT AKHIR STRUKTUR DATA

MODUL 2 - STACKS

Stacks adalah Sebuah metode dalam pemograman struktur data yang memiliki fungsi untuk
menyimpan atau mengumpulkan beberapa data di dalam suatu tumpukan

Stacks sendiri memiliki arti sebuah tumpukan yang terdiri dari pop , push , and peek

Algoritma nya ialah di dalam sebuah perpustakaan ada sebuah lemari yang berisikan 5 buah buku
mata pelajaran yaitu Matematika , Fisika , Kimia , IPS , Dan Penjas , dan buku di dalam satu
tumpukan secara vertikal dan dalam mengimplementasikan stacks ialah bagaimana mengambil
buku yang berada di tengah tengah tumpukan dengan cara memindahkan dengan ketentuan yang
ada

def stack():
s=[]
return (s)

def push(s,data):
(s.append(data))

def pop(s):
data=s.pop()
return (data)

def peek(s):
return (s[len(s)-1])
To undo cell deletion use Ctrl+M Z or the 'Undo' option in the 'Edit' menu
def isEmpty(s):
return (s==[])

def size(s):
return(len(s))

def cekkurung(infix):
data = stack()
kurung = {')':'(' ']':'[' '}':'{' }
https://colab.research.google.com/drive/14_k0DkhNMLZhkMXppBGcxVwVY0vRpv4J#scrollTo=0apq-4CZbTf-&printMode=true 1/14
1/7/2021 190411100157_AzharAsRahmatulloh_ProjectAkhirSDA_2A.ipynb - Colaboratory
kurung = { ) : ( , ] : [ , } : { ,}
for i in infix:
if i in kurung.values():
push(data,i)
elif i in kurung.keys():
if isEmpty(data):
print ('kelebihan kurung tutup')
return False
elif peek(data) != kurung[i]:
print ('kurung tidak cocok')
return False
else:
pop(data)
if isEmpty(data):
return True
else:
print ('Kelebihan kurung buka')
return False

def in2post(infix):
#digunakan untuk mengecek spasi
kurungstr = '()[]{}'
operatorstr = '+-*/'
spasi = ''
angka = '1234567890'
for i in infix:
if i in angka:
if spasi == '' or spasi[-1] in angka :
spasi += i
else:
spasi += ' '
spasi += i
elif i in kurungstr:
spasi += ' '
spasi += i
else:
spasi += ' '
spasi += i

operator = {'+':1,'-':1,'*':2,'/':2,'(':0,'[':0,'{':0}
kurung = {')':'(',']':'[','}':'{'}
data = stack()
To inf
undo=cell deletion use Ctrl+M Z or the 'Undo' option in the 'Edit' menu
spasi.split()
postfix = []
for i in inf:
if i.isdigit():
postfix.append(i)
elif i in kurung.keys():
while not (peek(data) is kurung[i]):
postfix.append(pop(data))
pop(data)
elif i in kurung.values():
https://colab.research.google.com/drive/14_k0DkhNMLZhkMXppBGcxVwVY0vRpv4J#scrollTo=0apq-4CZbTf-&printMode=true 2/14
1/7/2021 190411100157_AzharAsRahmatulloh_ProjectAkhirSDA_2A.ipynb - Colaboratory
push(data,i)
else:
if not isEmpty(data):
if operator[peek(data)] >= operator[i]:
postfix.append(pop(data))
push(data,i)
else:
push(data,i)
else:
push(data,i)
while not isEmpty(data):
postfix.append(pop(data))
return ' '.join(postfix)

def hitung(postfix):
data = stack()
post = postfix.split()
for i in post:
if i.isdigit():
push(data,int(i))
else:
ope2 = pop(data)
ope1 = pop(data)
hasil = operasi(i,ope1,ope2)
push(data,hasil)
return pop(data)

def operasi(op,ope1,ope2):
if op == '+':
return ope1 + ope2
elif op == '-':
return ope1 - ope2
elif op == '*':
return ope1 * ope2
else:
return ope1 / ope2

math = input("masukkan ekspresi infix = ")


if cekkurung(math):
postfix = in2post(math)
print("ekspresi postfix =", postfix)
To print("hasil =",hitung(postfix))
undo cell deletion use Ctrl+M Z or the 'Undo' option in the 'Edit' menu
else:
print("tidak bisa dioperasikan")

Contoh Code Stack Postfix Infix

MODUL 3 - QUEUE

https://colab.research.google.com/drive/14_k0DkhNMLZhkMXppBGcxVwVY0vRpv4J#scrollTo=0apq-4CZbTf-&printMode=true 3/14
1/7/2021 190411100157_AzharAsRahmatulloh_ProjectAkhirSDA_2A.ipynb - Colaboratory

Queue ialah salah satu metode pemograman yang berarti antrian , nah dalam sebuah program
fungsi queue sendiri ialah ketika ada sebuah kumpulan data yang memiliki antrian yang bisa
memasukan dan mengeluarkan sebuah data yang berada di dalam kumpulan data tersebut

Dan untuk metode pengambilan data hanya dapat di lakukan pada data yang berada di antrian
terdepan ,queue sendiri memiliki fungsi untuk memasukan data menghapus data dan mengubah
data

Algoritma dari Queue ialah ketika ada sebuah antrian mobil dalam sebuah parkiran dan ada sebuah
mobil yang ingin masuk ke dalam sebuah antiran parkiran tersebut dan untuk memasukan mobil ke
dalam antrian ialah dengan cara mengeluarkan sebuah mobil yang berada di paling terakhir dan
menambahkannya pada antiran terdepan

#QUEUE
def queue():
q=[]
return q
def enqueue(q,data):
q.insert(0,data)
return q
def dequeue(q):
data=q.pop()
return data
def isEmpty(q):
return (q==[])
def size(q):
return (len(q))

jumlah = int(input("Jumlah proses yang akan dijadwal di CPU: "))


proses = []
antrian = queue()

for i in range(jumlah):
data=[]
data.append(input("nama proses ke-"+str(i)+" : "))
data.append(int(input("waktu proses : ")))
To undo cell deletion use Ctrl+M Z or the 'Undo' option in the 'Edit' menu
proses.append(data)

print("List Antrian proses : ",proses)

waktu = int(input("Waktu proses CPU : "))


for j in proses:
enqueue(antrian,j)
print ("Antrian beserta waktu proses :",antrian)

https://colab.research.google.com/drive/14_k0DkhNMLZhkMXppBGcxVwVY0vRpv4J#scrollTo=0apq-4CZbTf-&printMode=true 4/14
1/7/2021 190411100157_AzharAsRahmatulloh_ProjectAkhirSDA_2A.ipynb - Colaboratory

ite=1
while not isEmpty(antrian):

print ("iterasi ke-"+str(ite)+" :")


inproses = dequeue(antrian)
inproses[1] -= waktu
if inproses[1] < 1:
print ("proses",inproses[0],"telah selesai diproses")
print("data proses yang tersisa :",antrian)
else:
print ("proses",inproses[0],"sedang diproses, dan sisa waktu proses",inproses[0],"=",inpr
enqueue(antrian,inproses)
print("data proses yang tersisa :",antrian)
ite += 1

CONTOH CODE QUEUE

MODUL 4 - SORTING

Sorting ialah sebuah metode pemograman struktur data yang memiliki arti yaitu mengurutkan
sebuah data

Sorting juga memiliki dua tipe yaitu metode sorting dengan secara ascending dan descending ,
ascending sendiri ialah sebuah metode pengurutan data dari yang terkecil hingga terbesar
sedangkan descending pengurutan dari yang terbesar hingga terkecil

Algoritma dari sorting sendiri ialah ketika ada susuan sebuah angka dalam data yang tidak
tersusun 1 2 3 4 5 6 melainkan 6 1 2 3 4 5 dan untuk sorting ini metodenya ialah dengan cara
apakah nilai n > 1 , > 2 , > 3 , > 4 , > 5 dan akan terus di swap hingga angka yang terbesar berada di
baris data yang terakhir

def ganjilgenap(mylist):
for i in range(len(mylist)):
if i % 2 == 0:
print("Genap-Ganjil :")
for j in
To undo cell deletion userange(0,len(mylist)-1,2):
Ctrl+M Z or the 'Undo' option in the 'Edit' menu
if mylist[j] > mylist[j+1]:
mylist[j], mylist[j+1] = mylist[j+1], mylist[j]
else:
print("Ganjil-Genap :")
for j in range(1,len(mylist)-1,2):
if mylist[j] > mylist[j+1]:
mylist[j], mylist[j+1] = mylist[j+1], mylist[j]

print(mylist)

https://colab.research.google.com/drive/14_k0DkhNMLZhkMXppBGcxVwVY0vRpv4J#scrollTo=0apq-4CZbTf-&printMode=true 5/14
1/7/2021 190411100157_AzharAsRahmatulloh_ProjectAkhirSDA_2A.ipynb - Colaboratory

return mylist

mylist = [13,12,10,8,7,5,11,2]
print("Data=",mylist)
print(f"\n{ganjilgenap(mylist)}")

[13,12,10,8,7,5,11,2]

def asc(mylist):
c = 0
x = len(mylist) // 2
y = len(mylist)-1
for i in range(x):
c+=1
print(f"Iterasi ke-{c}")
minflag = i
maxflag = y
for j in range(i+1,len(mylist)):
if mylist[minflag] > mylist[j]:
minflag = j
mylist[minflag], mylist[i] = mylist[i], mylist[minflag]
print(mylist)
for k in range(y-1,-1,-1):
if mylist[maxflag] < mylist[k]:
maxflag = k
mylist[maxflag], mylist[y] = mylist[y], mylist[maxflag]
print(mylist)
y -= 1
print("")

return mylist

print("sudah urut",asc([10,2,5,8,1,20,7,12,4]))

Contoh Code Sorting Secara Ascending Dan Descending

MODUL 5 - RECURSIVE
To undo cell deletion use Ctrl+M Z or the 'Undo' option in the 'Edit' menu

Recursive ialah sebuah metode pemograman di sebuah struktur data yang memiliki fungsi untuk
memanggil fungsi tersebut atau fungsi itu sendiri

dan juga bisa di artikan fungsi yang bisa memanggil fungsinya sendiri dan dapat di lakukan
berulang ulang secara perulangan

https://colab.research.google.com/drive/14_k0DkhNMLZhkMXppBGcxVwVY0vRpv4J#scrollTo=0apq-4CZbTf-&printMode=true 6/14
1/7/2021 190411100157_AzharAsRahmatulloh_ProjectAkhirSDA_2A.ipynb - Colaboratory

Algoritmanya ialah ada sebuah aloritma dalam sebuah persoalan untuk di susun maka recursive
digunakan untuk menginput sebuah nilai integer
def towerOfHanoi(n,source, des, aux): #Parameter index, asal,tujuan, tambahan
if n == 1:
print("\nPindahkan lempengan %d dari tower %s ke %s"%(n,source,des))
if source == "A" and des == "B":
sortir(n,A,B)
elif source == "A" and des == "C":
sortir(n,A,C)
elif source == "B" and des == "A":
sortir(n,B,A)
elif source == "B" and des == "C":
sortir(n,B,C)
elif source == "C" and des == "A":
sortir(n,C,A)
elif source == "C" and des == "B":
sortir(n,C,B)
print("{} :\n{}\n{} :\n{}\n{} :\n{}".format(chr_tower[0],display(A),chr_tower[1],disp
else:
towerOfHanoi(n-1,source,aux, des) #Parameter index, asal, tujuan, tambahan
print("\nPindahkan lempengan %d dari tower %s ke %s"%(n,source,des))
if source == "A" and des == "B":
sortir(n,A,B)
elif source == "A" and des == "C":
sortir(n,A,C)
elif source == "B" and des == "A":
sortir(n,B,A)
elif source == "B" and des == "C":
sortir(n,B,C)
elif source == "C" and des == "A":
sortir(n,C,A)
elif source == "C" and des == "B":
sortir(n,C,B)
print("{} :\n{}\n{} :\n{}\n{} :\n{}".format(chr_tower[0],display(A),chr_tower[1],disp
towerOfHanoi(n-1, aux, des, source)

def display(tower):
temp = ""
if len(tower) == 0 :
return("")
elif len(tower) == 1 :
To undoreturn("|{}|".format(tower[0]))
cell deletion use Ctrl+M Z or the 'Undo' option in the 'Edit' menu
else:
for chr_tower in tower:
temp += "|{}|\n".format(chr_tower)
return(temp)

def sortir(n,source,des):
temp = source.pop(source.index(n))
des.insert(0,temp)

#Pindahkan 4 lempengan dari A ke C dimana A = source C = des B = aux


https://colab.research.google.com/drive/14_k0DkhNMLZhkMXppBGcxVwVY0vRpv4J#scrollTo=0apq-4CZbTf-&printMode=true 7/14
1/7/2021 190411100157_AzharAsRahmatulloh_ProjectAkhirSDA_2A.ipynb - Colaboratory
#Pindahkan 4 lempengan dari A ke C, dimana A = source, C = des, B = aux
lst_num = [1,2,3,4]
chr_tower = ["A","B","C"]
A = []
B = []
C = []
print("Pemindahan {} lempengan dari {} ke {} dengan menggunakan bantuan {}".format(len(lst_nu
for num in lst_num:
A.append(num)
print("{} :\n{}\n{} :\n{}\n{} :\n{}".format(chr_tower[0],display(A),chr_tower[1],display(B),c
towerOfHanoi(4,"A","C","B")

import turtle

pen=turtle.Turtle()
window=turtle.Screen()
pen.speed(3)

def fraktal(panjang, level):


if level == 0:
pen.forward(panjang/2)
pen.right(180)
pen.forward(panjang)
pen.right(180)
pen.forward(panjang/2)
pen.right(90)
pen.forward(panjang/2)
pen.right(180)
pen.forward(panjang)
pen.right(90)
pen.forward(panjang/2)
pen.right(90)
pen.forward(panjang)
pen.right(90)
pen.forward(panjang)
pen.right(90)
pen.forward(panjang)
pen.right(90)
pen.forward(panjang/2)
else:
pen.forward(panjang/2)
To undopen.right(180)
cell deletion use Ctrl+M Z or the 'Undo' option in the 'Edit' menu
pen.forward(panjang)
pen.right(180)
pen.forward(panjang/2)
pen.right(90)
pen.forward(panjang/2)
pen.right(180)
pen.forward(panjang)
pen.right(90)
pen.forward(panjang/2)
pen right(90)
https://colab.research.google.com/drive/14_k0DkhNMLZhkMXppBGcxVwVY0vRpv4J#scrollTo=0apq-4CZbTf-&printMode=true 8/14
1/7/2021 190411100157_AzharAsRahmatulloh_ProjectAkhirSDA_2A.ipynb - Colaboratory
pen.right(90)
pen.forward(panjang)
pen.right(90)
pen.forward(panjang)
pen.right(90)
pen.forward(panjang)
pen.right(90)
pen.forward(panjang/2)
pen.right(90)
pen.forward(panjang/4)
pen.right(90)
pen.forward(panjang/4)
pen.right(180)
fraktal(panjang/2, level-1)

fraktal(500,4)

Contoh Code Recursive

MODUL 6 - SEARCHING

Searching adalah salah satu metode pemograman dalam struktur data yang memiliki arti yaitu
metode pencarian sebuah data dan juga untuk mengetahui kumpulan sebuah data itu ada isinya
atau tidak

def unorderedseqSearch(listdata,key):
founded=[]
i=0
cek=listdata
found=False
while i<len(listdata) and key in cek:
if listdata[i] == key:
founded.append(i)
cek[i]=key-1
To undo cell deletion use Ctrl+M Z or the 'Undo' option in the 'Edit' menu
found=True
i+= 1
if found:
return founded, i
else:
return ('data tidak ditemukan'), i

mylist = [1,5,9,8,1,5,10,26,5,12]
[hasil,count]=unorderedseqSearch(mylist,5)

https://colab.research.google.com/drive/14_k0DkhNMLZhkMXppBGcxVwVY0vRpv4J#scrollTo=0apq-4CZbTf-&printMode=true 9/14
1/7/2021 190411100157_AzharAsRahmatulloh_ProjectAkhirSDA_2A.ipynb - Colaboratory

print("Jumlah data=",hasil)
print("Jumlah iterasi=",count)

def orderedseqSearch(listdata,key):
founded=[]
i=0
cek = listdata
found=False
while key>=cek[i] and key in cek:
if listdata[i] == key:
founded.append(i)
cek[i]=key-1
found=True
i+= 1
if found:
return founded, i
else:
return ('data tidak ditemukan'), i

mylist = [1,1,5,5,5,8,9,10,12,26]
[hasil,count]=orderedseqSearch(mylist,5)

print("Jumlah data=",hasil)
print("Jumlah iterasi=",count)

def binSearch(listdata,key):
found=False
founded=[]
first=0
last=len(listdata)-1
count=0
while first<=last and not(found):
mid=(first+last)//2
if listdata[mid]==key:
founded.append(mid)
if listdata[mid-1]==key:
newmid = mid
while listdata[newmid-1]==key:
newmid-=1
founded.append(newmid)
To undo cell deletion use Ctrl+M Z or the 'Undo' option in the 'Edit' menu
found=True
if listdata[mid+1]==key:
newmid = mid
while listdata[newmid+1]==key:
newmid+=1
founded.append(newmid)
found=True
found = True
elif key>listdata[mid]:
first=mid+1
https://colab.research.google.com/drive/14_k0DkhNMLZhkMXppBGcxVwVY0vRpv4J#scrollTo=0apq-4CZbTf-&printMode=true 10/14
1/7/2021 190411100157_AzharAsRahmatulloh_ProjectAkhirSDA_2A.ipynb - Colaboratory
else:
last=mid-1
count+=1
if found:
return founded, count
else:
return ('Data tidak ada'), count

mylist = [1,1,5,5,5,8,9,10,12,26]
[hasil,count] = binSearch(mylist,1)
print("Posisi data=",hasil)
print("Jumlah iterasi=",count)

Contoh Code Searching

MODUL 7 - HASHING

Hashing ialah sebuah metode dalam sebuah pemograman struktur data yang memiliki arti atau
fungsi yaitu mengubah tata letak sebuah data ke tata letak yang lain

Algoritma Hashing sendiri ialah membuat table yang akan di isi dengan none

def reminderFunction (data, num) :


return data%num
def createHashTable(num) :
return [[None] for i in range(num)]
def chaining (data, table) :
for i in range (len(data)) :
ind = reminderFunction(data[i], len(table))
if table[ind][0] == None :
table[ind][0] = data[i]
else :
table[ind].append(data[i])
def searchHash(data, table) :
hashVal = reminderFunction(data, len(table))
if table[hashVal] != None :
cek = False
To undofor
cell deletion use Ctrl+M Z or the 'Undo' option in the 'Edit' menu
i in range(len(table[hashVal])):
if data == table[hashVal][i]:
print("(\'data berada si slot ke-\' {},\' dan index ke-\', {})".format(hashVa
cek = True
if cek == False :
print("False")

else :
print("False")

l t i d F ti (55 10)
https://colab.research.google.com/drive/14_k0DkhNMLZhkMXppBGcxVwVY0vRpv4J#scrollTo=0apq-4CZbTf-&printMode=true 11/14
1/7/2021 190411100157_AzharAsRahmatulloh_ProjectAkhirSDA_2A.ipynb - Colaboratory
slot = reminderFunction(55,10)
print(slot)
print("")
hashtable = createHashTable(11)
print(hashtable)
print("")
a = [54, 26, 93, 17, 77, 31, 44, 55, 20]
chaining(a, hashtable)
print(hashtable)
print("")
searchHash(54, hashtable)

Contoh Code Hashing

MODUL 8 - MERGE SORT & QUICK SORT

Merge Sort ialah sebuah pemograman yang memiliki fungsi yaitu salah satu pengurutan sebuah
kumpulan data dengan cara membuat suatu kumpulan data di pecah menjadi dua bagian yaitu
genap dan ganjil , data yang genap akan berada di kumuplan data yang pertama dan yang ganjil
akan berada di dalam kumpulan data yang kedua

Algoritma nya ialah dari kedua belah data yang sudah di pecah yaitu tinggal membandingkan lagi
dari kedua data yang sudah di pecah berikut dan untuk menentukannya hanya tinggal
menambahkan 1 di setiap perbandingannya

# Merge Sort
perbandingan = 0
pergeseran = 0
def mergeSort(arr):
global perbandingan,pergeseran
if len(arr) > 1:
print("splitting",arr," = ",end="")
mid = len(arr) // 2
left = arr[:mid]
right = arr[mid:]

print(left,",",right)
To undo cell deletion use Ctrl+M Z or the 'Undo' option in the 'Edit' menu
mergeSort(left)
mergeSort(right)
i,j,k = 0,0,0

print("merging",left," and ",right," = ",end="")

while i < len(left) and j < len(right):


perbandingan += 1
if left[i] < right[j]:
[k] l ft[i]
https://colab.research.google.com/drive/14_k0DkhNMLZhkMXppBGcxVwVY0vRpv4J#scrollTo=0apq-4CZbTf-&printMode=true 12/14
1/7/2021 190411100157_AzharAsRahmatulloh_ProjectAkhirSDA_2A.ipynb - Colaboratory
arr[k] = left[i]
i += 1
pergeseran += 1
else:
arr[k] = right[j]
j += 1
pergeseran += 1
k += 1

while i < len(left):


arr[k] = left[i]
i += 1
k += 1
pergeseran += 1

while j < len(right):


arr[k] = right[j]
j += 1
k += 1
pergeseran += 1
print(arr,"\n")
else:
print("no spliting = ",arr)

a = [5,3,2,4,1]
print("Sebelum di urutkan : ",a)
mergeSort(a)
print("Banyak Pergeseran = ",pergeseran)
print("Banyak Perbandingan = ",perbandingan)
print("Sesudah di urutkan : ",a)

# Quicksort
iteration = perbandingan = 0
pergeseran = 0
def partition(arr,p,q):
global iteration,perbandingan,pergeseran
pivot = arr[p]
i = p
print("iterasi ke-",iteration)
To print("Pivot =",pivot)
undo cell deletion use Ctrl+M Z or the 'Undo' option in the 'Edit' menu
for j in range(p+1,q+1):
perbandingan += 1
print(f"pivot >= {arr[j]} ? {pivot >= arr[j]}",end="")
if pivot >= arr[j]:
pergeseran += 1
i += 1
arr[i],arr[j] = arr[j],arr[i]
print(f", \tData = {arr}")
arr[i],arr[p] = arr[p],arr[i]
print("Data Akhir = ",arr)
https://colab.research.google.com/drive/14_k0DkhNMLZhkMXppBGcxVwVY0vRpv4J#scrollTo=0apq-4CZbTf-&printMode=true 13/14
1/7/2021 190411100157_AzharAsRahmatulloh_ProjectAkhirSDA_2A.ipynb - Colaboratory
p ( , )
iteration += 1
return i

def Quicksort(arr,p,q):
if p < q:
r = partition(arr,p,q)
Quicksort(arr, p, r-1)
Quicksort(arr, r+1, q)

a=[37,83,10,1,45,25,12,90,54]
print("Sebelum di urutkan : ",a)
Quicksort(a,0,len(a)-1)
print("Banyak Pergeseran = ",pergeseran)
print("Banyak Perbandingan = ",perbandingan)
print("Sesudah di urutkan : ",a)

Contoh Code Merge Sort & Quick Sort

To undo cell deletion use Ctrl+M Z or the 'Undo' option in the 'Edit' menu

https://colab.research.google.com/drive/14_k0DkhNMLZhkMXppBGcxVwVY0vRpv4J#scrollTo=0apq-4CZbTf-&printMode=true 14/14

Anda mungkin juga menyukai