ipynb - Colaboratory
NIM : 190411100157
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
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))
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)
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):
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]))
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)
import turtle
pen=turtle.Turtle()
window=turtle.Screen()
pen.speed(3)
fraktal(500,4)
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)
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
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)
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
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)
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