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