Data Structure#
Struktur data adalah penyimpanan yang digunakan untuk menyimpan dan mengatur data. Ini adalah cara mengatur data di komputer sehingga dapat diakses dan diperbarui secara efisien.
Sorting#
Bubble Sort#
#Bubble Sort Konvensional
print ("Bubble Sort")
def bubbleSort(listData):
for outIter in range(len(listData)-1,0,-1):
print()
print("panjang",len(listData),"counter",outIter)
if outIter > 0 and outIter < len(listData)-1 :
print(listData)
for i in range(outIter):
print("index",i,"->",listData[i],",geserkanan")
if listData[i]>listData[i+1]:
temp = listData[i]
listData[i]=listData[i+1]
listData[i+1]=temp
print()
a=[12,11,5,1,0]
print("Data Awal = ",a)
bubbleSort(a)
print("Data urut = ",a)
Bubble Sort
Data Awal = [12, 11, 5, 1, 0]
panjang 5 counter 4
index 0 -> 12 ,geserkanan
index 1 -> 12 ,geserkanan
index 2 -> 12 ,geserkanan
index 3 -> 12 ,geserkanan
panjang 5 counter 3
[11, 5, 1, 0, 12]
index 0 -> 11 ,geserkanan
index 1 -> 11 ,geserkanan
index 2 -> 11 ,geserkanan
panjang 5 counter 2
[5, 1, 0, 11, 12]
index 0 -> 5 ,geserkanan
index 1 -> 5 ,geserkanan
panjang 5 counter 1
[1, 0, 5, 11, 12]
index 0 -> 1 ,geserkanan
Data urut = [0, 1, 5, 11, 12]
#Modified Bubble Sort
def bubbleSort(listData):
exchange = True
end = len(listData)-1
start = 0
while exchange:
exchange = False
print()
for i in range(end):
print("panjang",len(listData),"counter",i)
if listData[i] > listData[i+1]:
exchange = True
print(listData[i] , listData[i+1],"->",listData[i+1], listData[i])
listData[i] , listData[i+1]= listData[i+1], listData[i]
end = end - 1
print("fase1 :",listData)
print()
for i in range(end,0,-1):
print("panjang",len(listData),"counter",i)
if listData[i] < listData[i-1]:
exchange = True
print(listData[i-1],listData[i], "->",listData[i],listData[i-1])
listData[i-1],listData[i]= listData[i],listData[i-1]
start = start + 1
print("fase2 :",listData)
print("------------")
b = [12,11,5,1,0]
print("Data Awal = ",b)
bubbleSort(b)
print()
print("sortedData = ",b)
Data Awal = [12, 11, 5, 1, 0]
panjang 5 counter 0
12 11 -> 11 12
panjang 5 counter 1
12 5 -> 5 12
panjang 5 counter 2
12 1 -> 1 12
panjang 5 counter 3
12 0 -> 0 12
fase1 : [11, 5, 1, 0, 12]
panjang 5 counter 3
1 0 -> 0 1
panjang 5 counter 2
5 0 -> 0 5
panjang 5 counter 1
11 0 -> 0 11
fase2 : [0, 11, 5, 1, 12]
------------
panjang 5 counter 0
panjang 5 counter 1
11 5 -> 5 11
panjang 5 counter 2
11 1 -> 1 11
fase1 : [0, 5, 1, 11, 12]
panjang 5 counter 2
5 1 -> 1 5
panjang 5 counter 1
fase2 : [0, 1, 5, 11, 12]
------------
panjang 5 counter 0
panjang 5 counter 1
fase1 : [0, 1, 5, 11, 12]
panjang 5 counter 1
fase2 : [0, 1, 5, 11, 12]
------------
sortedData = [0, 1, 5, 11, 12]
Selection Sort#
def selectionSort(listData):
i = 0
h = len(listData)-1
while i < h:
#print("index",i,"index2",h)
minIndex = i
maxIndex = h
j = i + 1
while j < len(listData):
print("Nilai",listData[j],"banding",listData[minIndex])
if listData[j] < listData[minIndex]:
print("nilaiMin",listData[j],"- index",j)
minIndex = j
j = j + 1
if minIndex != i:
print("swap:",listData,"tukarnilai:",listData[minIndex],"denganNilai:",listData[i])
swap(listData,minIndex,i)
i = i + 1
j = h - 1
print()
#print("index",i,"index2",j)
while j >= 0:
print("Nilai",listData[j],"banding",listData[maxIndex])
if listData[j] > listData[maxIndex]:
print("nilaiMax",listData[j],"- index",j)
maxIndex = j
j = j - 1
if maxIndex != h:
print("swap:",listData,"tukarnilai:",listData[maxIndex],"denganNilai:",listData[h])
swap(listData,maxIndex,h)
h = h - 1
print("Hasil : ",listData)
print()
def swap(listData,i,j):
temp = listData[i]
listData[i] = listData[j]
listData[j] = temp
d=[10,2,5,8,1,20,2,2,4]
print("Data awal = ",d)
selectionSort(d)
print("Data Urut = ",d)
Data awal = [10, 2, 5, 8, 1, 20, 2, 2, 4]
Nilai 2 banding 10
nilaiMin 2 - index 1
Nilai 5 banding 2
Nilai 8 banding 2
Nilai 1 banding 2
nilaiMin 1 - index 4
Nilai 20 banding 1
Nilai 2 banding 1
Nilai 2 banding 1
Nilai 4 banding 1
swap: [10, 2, 5, 8, 1, 20, 2, 2, 4] tukarnilai: 1 denganNilai: 10
Nilai 2 banding 4
Nilai 2 banding 4
Nilai 20 banding 4
nilaiMax 20 - index 5
Nilai 10 banding 20
Nilai 8 banding 20
Nilai 5 banding 20
Nilai 2 banding 20
Nilai 1 banding 20
swap: [1, 2, 5, 8, 10, 20, 2, 2, 4] tukarnilai: 20 denganNilai: 4
Hasil : [1, 2, 5, 8, 10, 4, 2, 2, 20]
Nilai 5 banding 2
Nilai 8 banding 2
Nilai 10 banding 2
Nilai 4 banding 2
Nilai 2 banding 2
Nilai 2 banding 2
Nilai 20 banding 2
Nilai 2 banding 2
Nilai 4 banding 2
nilaiMax 4 - index 5
Nilai 10 banding 4
nilaiMax 10 - index 4
Nilai 8 banding 10
Nilai 5 banding 10
Nilai 2 banding 10
Nilai 1 banding 10
swap: [1, 2, 5, 8, 10, 4, 2, 2, 20] tukarnilai: 10 denganNilai: 2
Hasil : [1, 2, 5, 8, 2, 4, 2, 10, 20]
Nilai 8 banding 5
Nilai 2 banding 5
nilaiMin 2 - index 4
Nilai 4 banding 2
Nilai 2 banding 2
Nilai 10 banding 2
Nilai 20 banding 2
swap: [1, 2, 5, 8, 2, 4, 2, 10, 20] tukarnilai: 2 denganNilai: 5
Nilai 4 banding 2
nilaiMax 4 - index 5
Nilai 5 banding 4
nilaiMax 5 - index 4
Nilai 8 banding 5
nilaiMax 8 - index 3
Nilai 2 banding 8
Nilai 2 banding 8
Nilai 1 banding 8
swap: [1, 2, 2, 8, 5, 4, 2, 10, 20] tukarnilai: 8 denganNilai: 2
Hasil : [1, 2, 2, 2, 5, 4, 8, 10, 20]
Nilai 5 banding 2
Nilai 4 banding 2
Nilai 8 banding 2
Nilai 10 banding 2
Nilai 20 banding 2
Nilai 5 banding 4
nilaiMax 5 - index 4
Nilai 2 banding 5
Nilai 2 banding 5
Nilai 2 banding 5
Nilai 1 banding 5
swap: [1, 2, 2, 2, 5, 4, 8, 10, 20] tukarnilai: 5 denganNilai: 4
Hasil : [1, 2, 2, 2, 4, 5, 8, 10, 20]
Data Urut = [1, 2, 2, 2, 4, 5, 8, 10, 20]
Insertion Sort#
def insertionsort(listdata):
for outiter in range(1,len(listdata)):
print(listdata)
key=listdata[outiter]
ind=outiter
while (ind>0 and listdata[ind-1]>key):
listdata[ind]=listdata[ind-1]
ind=ind-1
print('insert=',listdata)
listdata[ind]=key
print('change=',listdata)
print('sorteddata=',listdata)
b=[3,2,8,5,1,7,10,4]
insertionsort(b)
[3, 2, 8, 5, 1, 7, 10, 4]
insert= [3, 3, 8, 5, 1, 7, 10, 4]
change= [2, 3, 8, 5, 1, 7, 10, 4]
[2, 3, 8, 5, 1, 7, 10, 4]
change= [2, 3, 8, 5, 1, 7, 10, 4]
[2, 3, 8, 5, 1, 7, 10, 4]
insert= [2, 3, 8, 8, 1, 7, 10, 4]
change= [2, 3, 5, 8, 1, 7, 10, 4]
[2, 3, 5, 8, 1, 7, 10, 4]
insert= [2, 3, 5, 8, 8, 7, 10, 4]
insert= [2, 3, 5, 5, 8, 7, 10, 4]
insert= [2, 3, 3, 5, 8, 7, 10, 4]
insert= [2, 2, 3, 5, 8, 7, 10, 4]
change= [1, 2, 3, 5, 8, 7, 10, 4]
[1, 2, 3, 5, 8, 7, 10, 4]
insert= [1, 2, 3, 5, 8, 8, 10, 4]
change= [1, 2, 3, 5, 7, 8, 10, 4]
[1, 2, 3, 5, 7, 8, 10, 4]
change= [1, 2, 3, 5, 7, 8, 10, 4]
[1, 2, 3, 5, 7, 8, 10, 4]
insert= [1, 2, 3, 5, 7, 8, 10, 10]
insert= [1, 2, 3, 5, 7, 8, 8, 10]
insert= [1, 2, 3, 5, 7, 7, 8, 10]
insert= [1, 2, 3, 5, 5, 7, 8, 10]
change= [1, 2, 3, 4, 5, 7, 8, 10]
sorteddata= [1, 2, 3, 4, 5, 7, 8, 10]
Stack Queue#
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])
def isEmpty(s):
return (s==[])
def size(s):
return (len(s))
s=stack()
push(s,'matematika')
push(s,'struktur data')
push(s,'bahasa inggris')
push(s,'pemrograman web')
print(s)
pop(s)
print(s)
print(size(s))
['matematika', 'struktur data', 'bahasa inggris', 'pemrograman web']
['matematika', 'struktur data', 'bahasa inggris']
3
def createQueue():
q=[]
return (q)
def addqueue(q,data):
q.insert(0,data)
return(q)
def removequeue(q):
data = q.pop()
return(data)
def isEmpty(q):
return (q==[])
def size(q):
return(len(q))
q=createQueue()
addqueue(q,'a')
addqueue(q,'b')
addqueue(q,"c")
addqueue(q,"d")
print(q)
addqueue(q,removequeue(q))
print("q =",q)
a=removequeue(q)
print(a,q)
addqueue(q,"new")
a=removequeue(q)
print(a)
print(isEmpty(q),size(q))
['d', 'c', 'b', 'a']
q = ['a', 'd', 'c', 'b']
b ['a', 'd', 'c']
c
False 3
Recursion#
def rekur(bil):
if bil<=1:
return (1)
else:
return (bil*rekur(bil-1))
print(rekur(5))
a=5*4*3*2*1
print(a)
120
120
def fungsiPrint():
counter=0
while counter<5:
print('struktur data1')
counter+=1
def fungsiPrintRekursif(counter):
if counter>0:
print('struktur data')
fungsiPrintRekursif(counter-1)
fungsiPrint()
print('----------------Rekursif-------------------')
fungsiPrintRekursif(5)
struktur data1
struktur data1
struktur data1
struktur data1
struktur data1
----------------Rekursif-------------------
struktur data
struktur data
struktur data
struktur data
struktur data
#Stack with rekursif
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])
def isEmpty(s):
return (s==[])
def size(s):
return (len(s))
sak=stack()
push(sak,1)
push(sak,2)
push(sak,3)
def stackRekursif(cek):
if isEmpty(sak) is not True:
print(pop(sak))
return stackRekursif(sak)
stackRekursif(sak)
3
2
1
Linked List#
class Node:
def __init__(self,initdata):
self.data = initdata
self.next = None
def getData(self):
return self.data
def getNext(self):
return self.next
def setNext(self,newnext):
self.next = newnext
class LinkedList:
def __init__(self):
self.head = None
def isEmpty(self):
return self.head == None
def addPrev(self,item):
temp = Node(item)
temp.setNext(self.head)
self.head = temp
def addNext(self,item):
temp = Node(item)
current = self.head
while current.getNext() != None:
current = current.getNext()
current.setNext(temp)
def size(self):
current = self.head
count = 0
while current != None:
count = count + 1
current = current.getNext()
return count
def search(self,item):
current = self.head
found = False
while current != None and not found:
if current.getData() == item:
found = True
else:
current = current.getNext()
return found
def remove(self,item):
current = self.head
previous = None
found = False
while not found and current != None:
if current.getData() == item:
found = True
else:
previous = current
current = current.getNext()
if found:
if previous == None:
self.head = current.getNext()
else:
previous.setNext(current.getNext())
else:
print("Item tidak ada dalam list")
def print_list(self):
current = self.head
print("Head ->",end=" ")
while current:
print (current.getData(), end=" -> ")
current = current.getNext()
print("None")
my_list=LinkedList()
print(my_list.print_list())
print()
my_list.addPrev(31)
my_list.print_list()
my_list.addPrev(77)
my_list.print_list()
my_list.addPrev(17)
my_list.print_list()
my_list.addPrev(93)
my_list.print_list()
my_list.addNext(26)
my_list.print_list()
my_list.addNext(54)
my_list.print_list()
Head -> None
None
Head -> 31 -> None
Head -> 77 -> 31 -> None
Head -> 17 -> 77 -> 31 -> None
Head -> 93 -> 17 -> 77 -> 31 -> None
Head -> 93 -> 17 -> 77 -> 31 -> 26 -> None
Head -> 93 -> 17 -> 77 -> 31 -> 26 -> 54 -> None