Graph

Sebuah graph itu direpresentasikan dengan dua buah himpunan, himpunan vertex (yang bulet”) sama edge (jalan dari 1 vertex ke vertex lain) G= (V,E)

 

Graph ada 2 jenis yaitu :

1.Undirected graph : graph yang edgenya tidak ada arah  (1,3) dan (3,1) sama saja

2.Directed graph : graph yang edgenya ada arah <1,3> dan <3,1> berbeda

E(edge) Maximum bisa dicari dengan rumus dan tergantung dari jenis graph nya

1.Undirected graph : (N(N-1))/2

2.Directed graph :  N(N-1)

Dimana N adalaj jumlah vertex

Contoh Undirected graph

Directed graph

 

Dari gambar diatas ada 4 vertex dan 6 edge

V = {0,1,2,3}

E = {(0,1),(0,2),(0,3),(1,2),(1,3),(2,3)}

Contoh Directed Graph

graph

Dari gambar diatas ada 7 vertex dan 12 edge

V = {0,1,2,3,4,5,6,7,8,9}

E = {(0,1),(0,2),(1,4),(1,3),(3,0),(3,2),(3,5),(3,6),(4,3),(4,6),(5,2),(6,5)}

 

Terminologi 

Simple path : Path yang verteks pertama dan terakhir berbeda

Cycle path : Simple path yang verteks pertama dan terakhir sama

Weighted graph : Graph yang setiap edgenya diberi bobot (nilai)

Degree (v) : Banyaknya edge yang berhubungan dengan verteks v

Indegree (v) :  Banyaknya edge yang masuk (menuju) verteks v pada sebuah graph

Outdegree (V) :  Banyaknya edge yang keluar dari verteks v pada sebuah graph

 

 

Adjacency List

adjacency list adalah jalan / path dari vertex X ke vertex Y

contoh (Unweighted Graph)

Directed graph

Ajdlist dari graph diatas (dari X bisa ke Y)

0 -> 1               1 -> 2           2 -> 3

0 -> 2               1 -> 3

0 -> 3

intinya adj list sama aja kyk edge (unweighted)

Misalkan graph diatas diberikan weight masing 2

adjlistnya menjadi (dari X bisa ke Y, dengan weight)

0 -> 1, 2               1 -> 2, 2          2 -> 3, 2

0 -> 2, 2               1 -> 3, 2

0 -> 3, 2

 

 

 

Transversal Graph

Mencari jalan atau transversal di graph ada 2 algoritma :

1.BFS (Breadth First Search)

2.DFS (Depth Fisrt Search)

 

BFS (Breadth First Search)

Di BFS intinya kita cari jalan menyebar, algoritma ini dibantu dengan menggunakan queue dan dilakukan sampai queue kosong

Contoh :

kentang

Misalkan kita mau tau path nya

proses nya (Visited = 0 belum pernah, visited = 1 sudah pernah d visited) dengan kondisi semua vertex visited = 0
Queue : 0
Visited[0] = 1
Selama Queue Tidak kosong
Dari 0 ternyata bisa ke 1 dan 2
Queue : 0 1 2
visited[1] = 1
visited[2] = 1
Printf : 0
Dequeue : 0
Queue : 1 2
Dari 1 ternyata bisa ke 3 dan 4
Queue : 1 2 3 4
visited[3] = 1
visited[4] = 1
printf : 1
Dequeue 1:
Queue : 2 3 4
Dari 2 ternyata bisa ke 5 dan 6
Queue 2 3 4 5 6
visited[5] = 1
visited[6] = 1
printf : 2
Dequeue : 2
Queue 3 4 5 6
dari 3 ternyata bisa ke 7
Queue 3 4 5 6 7
visited[7] = 1
printf : 3
Dequeue : 3
Queue 4 5 6 7
Dari 4 ternyata bisa ke 7, tapi visited[7] = 1 jadi
printf : 4
Dequeue : 4
Queue 5 6 7
Dari 5 ternyata bisa ke 7, tapi visited[7] = 1 jadi
printf : 5
Dequeue : 5
Queue : 6 7
Dari 6 ternyata bisa ke 7, tapi visited[7] = 1 jadi
printf : 6
Dequeue : 6
Queue : 7
Dari 7 g bisa kemana”
printf : 7
Dequeue : 7
Queue : Kosong
Program stop !

Path : 1 2 3 4 5 6 7

 

DFS (Depth Fisrt Search)

Depth Fisrt Search itu kita menelusuri sebuah graph sampe ke yang paling dalem baru telusuri yg lain, dibantu dengan stack atau bisa menggunakan rekursif. DFS dilakukan sampai stack kosong atau sampai semua vertex dikunjungi (jika menggunakan rekursif)

Contoh :

kentang

Misalkan kita mau tau path nya (cara berikut ini dibahas menggunakan rekursif)

proses nya (Visited = 0 belum pernah, visited = 1 sudah pernah d visited) dengan kondisi semua vertex visited = 0

 

visited[0] = 0 ?? Yes
printf : 0
visited[0] = 1
dari 0 ternyata bisa ke 1 dan 2
Menelusuri 1
visited[1] = 0 ?? Yes
printf : 1
visited[1] = 1
dari 1 ternyata bisa ke 3 dan 4
Menelusuri 3
visited[3] = 0 ?? Yes
printf : 3
visited[3] = 1
dari 3 ternyata bisa ke 7
Menelusuri 7
visited[7] = 0 ?? Yes
printf : 7
visited[7] = 1
dari 7 ternyata tidak bisa kemana – mana lagi, balik ke vertex sebelumnya
dari 3 ternyata tidak bisa kemana – mana lagi, balik ke vertex sebelumnya
dari 1 ternyata bisa ke 3 dan 4 tetapi visited[3] = 1 jadi tidak bisa dilalui
Menelusuri 4
visited[4] = 0 ?? Yes
printf : 4
visited[4] = 1
dari 4 ternyata bisa ke 7 tetapi visited[7] = 1 jadi tidak bisa dilalui, balik ke vertex sebelumnya
dari 1 ternyata bisa ke 3 dan 4 tetapi visited[3] = 1 dan visited[4] = 1 jadi tidak bisa dilalui, balik ke vertes sebelumnya
dari 0 ternyata bisa ke 1 dan 2 tetapi visited[1] = 1 jadi tidak bisa dilalui
Menelurusi 2
visited[2] = 0 ?? Yes
printf : 2
visited[2] = 1
dari 2 ternyata bisa ke 5 dan 6
menelusuri 5
visited[5] = 0 ?? Yes
printf : 5
visited[5] = 1
dari 5 ternyata bisa ke 7 tetapi visited[7] = 1 jadi tidak bisa dilalui, balik ke vertex sebelumnya
dari 2 ternyata bisa ke 5 dan 6 tetapi visited[6] = 1 jadi tidak bisa dilalui
Menelurusi 6
visited[6] = 0 ?? Yes
printf : 6
visited[6] = 1
dari 6 ternyata bisa ke 7 tetapi visited[7] = 1 jadi tidak bisa dilalui, balik ke vertex sebelumnya
dari 2 ternyata bisa ke 5 dan 6 tetapi visited[5] = 1 dan visited[6] = 1 jadi tidak bisa dilalui, balik ke vertes sebelumnya
dari 0 ternyata bisa ke 1 dan 2 tetapi visited[1] = 1 dan visited[2] = 1 jadi tidak bisa dilalui, balik ke vertes sebelumnya
Program Selesai !

Path : 0 1 3 7 4 2 5 6

Tree Week 10

TREE

Tree adalah suatu struktur data (tipe data abstrak) yang teridiri dari sejumlah simpul (node) yang memiliki :
– Terdapat 1 simpul khusus yang di sebut root
– Simpul lainnya di bagi kedalam sejumlah himpunan terpisah (T1,T2,T3,…)
– Himpunan ini disebut sebuah Tree
– T1,T2,T3,… disebut Subtree dari root

Berikut adalah bagian-bagian yang terdapat dalam Tree :
– Root
– Leaf
– Depth
– Height
– Node

admin-ajax

 

BINARY TREE

Sama seperti Tree dan setiap simpulnya memiliki paling banyak 2 subtree atau yang kita sebut sebagai left subtree dan right subtree

Full binary Tree : setiap subtree harus terisi semua leafnya sebanyak anak setiap parentnya

 

Representasi Tree dalam Array

 

Untitled-1

Representasi Tree Dalam LinkedList

Untitled-2

TRAVERSAL

Simbol  : <L> untuk subtree kiri
<R> untuk subtree kanan
<P> untuk proses
Contoh Traversal : PLR, LPR, LRP
PRL,RPL,RLP

PLR (Pre Order) : Induk, Kiri, Kanan
LPR (Inorder) : Kiri, Induk, Kanan
LRP (Postorder) : Kiri, Kanan, Induk

Contoh :

Untitled-3

PLR : A,B,D,G,H,E,I,C,F,J,L,K,M,N
LPR : G,D,H,I,E,B,A,C,J,L,F,M,K,N
LRP : G,H,D,I,E,B,L,J,M,N,K,F,C,A

 

 

AVL Tree week 12

AVL tree
AVL tree adalah binary tree yang memiliki perbedaan height maksimal 1 dengan subtreenya. Metode ini di lakukan juga agar mempermudah waktu pencarian. Untuk menentukan apakah sebuah binary tree AVL atau tidak dapat di tentukan dengan cara Balance factor = h(subtree kiri) – h(subtree kanan), H=height.
Contoh AVL tree
difftree01

Cara untuk membalance sebuah binary tree yang tidak AVL tree dengan cara rotation tree. Rotation tree adalah suatu operasi binary tree yang mengubah stukturnya tanpa mengganggu urutan elemen.
Contoh ilustrasi:
File-Tree_rotation_animation_250x250

Secara keseluruhan kasus dibagi 2 kasus dalam membalance sebuah tree yaitu:
Kasus luar dibagi 2:
1.masuknya data ke subtree kiri dari anak yang kiri.
2.masuknya data ke subtree kanan dari anak yang kanan.
Kasus dalam di bagi 2 :
3.masuknya data ke subtree kanan dari anak yang kiri.
4.masuknya data ke subtree kiri dari anak yang kanan.
Rotation tree di bagi menjadi 2 yaitu:

Single rotation
Single rotation adalah rotasi yang di lakukan hanya sekali agar sebuah tree AVL cara ini dapat menyelesaikan kasus luar.
012111java_avl-fig01

Double rotation
Double rotation adalah rotasi yang dilakukan lebih dari sekali dan sedangkan cara ini untuk menyelesaikan kasus dalam.
avlrotate5

Sekian ringakasan kami dari matakuliah struktur data yang dibimbing oleh dosen Yonathan pada tanggal 25 november 2015 tentang AVL tree dan maaf jika terdapat kesalahan komen saja kesalahan kami dan akan kami perbaiki secepatnya..
Terima Kasih

catatan:
Rekan saya sedang dalam proses memahami materi ini sehingga tidak dapat menumbangkan tulisannya di blog

Queue week 9

Queue

Queue adalah Suatu kumpulan data dimana penambahan data atau elemnnya dilakukan di belakang
sedangkan kalo mau hapusnya dilakukan dari sisi depan ( FIFO )

contoh :

front                               rear
Q1    ,    Q2    ,    Q3    ,    Q4

istilah istilah di Queue
1. Elemen depan = front
2. Elemen belakang = rear
3. Fifo = data yang pertama kali masuk , yang paling pertama juga keluar.
4. Enqueue = proses buat nambah data baru di belakang
5. Dequeue = proses buat hapus data/ ambil data di depan

Perbedaan Stack sama Queue adalah
Kalo stack itu sifatnya LIFO , kalo queue sifatnya FIFO .
Kalo stack pake istilah bottom sama top . kalo queue pake istilah front dan rear

implementasi source code :

– struct :

struct data{
char bil[10];
struct data *next,*prev;
};

– function tambah data di belakang

void tambahdata(data **front,char input[], data **rear){
data *baru;
data *curr;
printf(“New Data Insert\n”);
baru = (struct data*) malloc (sizeof(data));

strcpy(baru -> bil, input);
baru->next=NULL;
if(*front == NULL){
*front=baru;
*rear=baru;
}
else{
curr=*front;
while(curr->next!=NULL){
curr=curr->next;
}
curr->next=baru;
}
getch();
}

– function menampilkan data yang sudah di input

void tampildata(data **rear){
data *temp;
temp = *rear;
if(*rear == NULL){
printf(“Stack is Empty\n”);
}
else {
while(temp != NULL){
printf(“%s “, temp -> bil);
temp = temp -> next;
}
printf(“\n”);
}
}

– Function dequeue

void dequeue(data **front){
data *curr;
if(front==NULL){
printf(“Queue is Empty”);
}
else{
curr=*front;
printf(“Pooped : %s \n”,curr->bil);
*front=(*front)->next;
free(curr);
}
}

– Function top

void frontt(data **rear){
struct data *var=*rear;
if(var!=NULL){
printf(“%s”,var->bil);
printf(“\n”);
}
else{
printf(“\nQueue is Empty”);
}
}

– Function cek data apakah kosong atau tidak

void cek(data **rear){
struct data *temp, *var=*rear;
if(var != NULL){
printf(“Queue is Empty\n”);
}
else{
printf(“Queue is Not empty”);
}
}

Week 8-Stacking

 

Stack  adalah suatu struktur data yang terbentuk dari barisan hingga yang terurut dari satuan data. Pada Stack, penambahan dan penghapusan elemennya hanya dapat dilakukan pada satu posisi, yaitu posisi akhir stack. Posisi ini disebut Puncak atau Top dari stack. Stack mempunyai sifat LIFO (Last In First Out), Benda yang terakhir masuk ke dalam stack akan menjadi benda pertama yang dikeluarkan dari stack.

Stack karena aturan penyisipan dan penghapusan semacam itu, TOP adalah satu-satunya alamat tempat terjadi operasi. Elemen yang ditambahkan paling akhir akan menjadi elemen yang akan dihapus.Dikatakan bahwa elemen Stack akan tersusun secara LIFO (Last In First Out).
karena kita menumpuk Compo di posisi terakhir, maka Compo akan menjadi elemen teratas dalam tumpukan.
Sebaliknya, karena kita menumpuk Televisi pada saat pertama kali, maka elemen Televisi menjadi elemen terbawah dari tumpukan. Dan jika kita mengambil elemen dari tumpukan, maka secara otomatis akan terambil elemen teratas, yaitu Compo juga.
OPERASI-OPERASI/FUNGSI STACK
Push       : digunakan untuk menambah item pada stack pada tumpukan paling atas
Pop         : digunakan untuk mengambil item pada stack pada tumpukan paling atas
Clear       : digunakan untuk mengosongkan stack
IsEmpty : fungsi yang digunakan untuk mengecek apakah stack sudah kosong
IsFull     : fungsi yang digunakan untuk mengecek apakah stack sudah penuh

 

MACAM-MACAM STACK

1. Stack dengan Array

Sesuai dengan sifat stack, pengambilan atau penghapusan elemen dalam stack harus dimulai dari elemen teratas.

2. Double Stack dengan Array

Metode ini adalah teknik khusus yang dikembangkan untuk menghemat pemakaian memori dalam pembuatan dua stack dengan array. Intinya adalah penggunaan hanya sebuah array untuk menampung dua stack.

3.Stack dengan linked list

Adalah stack yang dibuat menggunakan linked list.

CONTOH PROGRAM STACK MENGGUNAKAN LINKED LIST

#include<stdio.h>
#include<stdlib.h>

typedef int ItemType;
typedef struct simpul node;
struct simpul
{
	ItemType item;
	node *next;
};

struct Stack{
	node *TOS;
};

node *baru;

void awal()
{
	printf("===================================================");
	printf("=         PROGRAM STACK DENGAN LINKED LIST        =");
	printf("===================================================\n");
}

void allocate_node(ItemType x)
{
	baru = (node *) malloc (sizeof(node));
	if(baru==NULL)
	{
		printf("Gagal\n");
		exit(1);
	}
	else
	{
		baru->item=x;
		baru->next=NULL;
	}
}

void inisialisasi(Stack *s)
{
	s->TOS = NULL;
}

int kosong(Stack *s)
{
	return s->TOS==NULL;
}

void push(Stack *s)
{
	baru->next = s->TOS;
	s->TOS = baru;
}

ItemType pop(Stack *s)
{
	node *temp;
	if(kosong(s))
	{
		printf("Data Kosong\n");
		return ' ';
	}
	else
	{
		temp = s->TOS;
		s->TOS = s->TOS->next;
		return temp->item;
		free(temp);
		temp=NULL;
	}
}

void tampil(Stack *s)
{
	Stack bantu;
	bantu = *s;
	printf("\nData Simpul ==>  ");
	while(bantu.TOS!=NULL)
	{
		printf("%d ", bantu.TOS->item);
		bantu.TOS = bantu.TOS->next;
	}
	printf("\n\n");
}

void main()
{
	int pilih, data;
	char lagi='y';
	Stack ujung;

	inisialisasi(&ujung);
	while(lagi=='y')
	{
		system("CLS");
		awal();
		//tampil(&ujung);
		printf("Menu Pilihan : \n");
		printf("1. Push\n");
		printf("2. Pop\n");
		printf("3. Tampilkan Stack\n");
		printf("\nPilih No          : ");
		scanf("%d", &pilih);
		switch(pilih)
		{
		case 1:
			printf("Masukkan data     : ");
			scanf("%d", &data);
			allocate_node(data);
			push(&ujung);
			break;
		case 2:
			pop(&ujung);
			break;
		case 3:
			tampil(&ujung);
			break;
		}
		fflush(stdin);
		printf("Lagi (ya(y)/tidak(t) ? ");
		scanf("%c", &lagi);
	}
}



Erwin Iswandi(14110110137)
Anthony Nugraha(14110110138)

WEEK 6-RADIX SORTING

Radix sort adalah salah satu metoda sorting yang berdasarkan digit (subdata) pembentuk bilangan.

Ada 2 jenis radix sort : 

*LSD(Least Significant Digit) : sort dari digit yang terkecil.

*MSD(Most Significant Digit) : sort dari digit yang terbesar.

Nah, radix ini menggunakan sistem bucket, bucket itu sendiri adalah tempat untuk menampung hasil sorting sementara. Bucket itu di implementasikan dengan array of linked list. Banyaknya bucket bergantung pada radixnya, misalkan menggunakan alfabet(ada 26 karakter) berarti akan ada 26 bucket.

  • Untuk memulai radix sort, langkah ke-1 adalah mencari tahu angka terbesar untuk menentukan ada berapa ronde. misalkan ada : 81,94,411,66,312,535,717,295,958,328,150,697

Angka terbesar adalah 958, untuk menghitung jumlah ronde :

max=958/10     -> max=95   -> JumRonde = 1

max=95/10        -> max=9     -> JumRonde = 2

max=9/10          -> max=0     -> JumRonde = 3

perulangan selesai dikarenakan max=0.

  • Nah langkah ke-2 yaitu ekstrasi nilai digit. Kita harus mencari digit satuan pada putaran pertama,digit puluhan pada putaran kedua, dan seterusnya.

contoh :

putaran pertama(ronde pertama):

            Pada ronde pertama digit yang kita ambil adalah digit satuan, jadi misal angka tersebut 81 maka satuan nya 1,  maka dimasukan kedalam bucket index 1.
94 = 4 maka dimasukan ke index ke 4.
150 = 0 maka dimasukan ke index ke 0.
Hal tersebut dilakukan sampai semua element array masuk ke dalam bucket.

Contoh Koding:

for(i=0;i<JumRonde;i++){

    pembagi = pow(10,i);

    for(j=0;j<JumData;j++){

        nilaidigit=(arr[j]/pembagi)%10;

        }

}

  • Langkah ke-3 Misalkan disaat kita memasukan element kedalam bucket namun terdapat element kedua yang lokasi array nya sama dengan element sebelumnya maka nilai element sebelumnya akan hilang. Maka dari itu perlu dibuat array of link list. Yaitu mengaitkan simpul ke bucket. Disini akan dibuat simpul untuk dikaitkan pada ujung kanan bucket sesuai dengan digitnya. Jika bucket yang bersangkutan masih bernilai NULL, maka simpul tersebut menjadi simpul pertama. Jika tidak maka perlu ditelusuri dahulu simpul terakhir dan akan dikaitkan dengan simpul baru.

contoh:

B[0]=90
B[1]=81
…..
…..

Kemudian ada element yg baru adalah 10, maka:

B[0]=90;0
B[1]=81
…….
…….

Contoh Koding:

struct tdata{

    int data;

    struct tdata *next;

};

……..

node = (struct tdata*) malloc(sizeof(struct tdata));

node->data = arr[j];

node->next=NULL;

nilaidigit=(arr[j]/pembagi)%10;

if(bucket[sisa]==NULL) bucket[sisa]=node;

else{

    curr=bucket[sisa];

    while(curr->next!=NULL) curr = curr->next;

     curr->next = node;

}

  • Langkah ke-4 adalah menyalin isi simpul pada bucket ke array. Nah ketika data sudah di alokasikan ke bucketnya, isi bucket disalin kembali ke array semula dari simpul pertama bucket pertama hingga simpul terakhir bucket terakhir secara berurut.

contoh:

B[0] = 20;40;10;230
B[1] = 21;121;1;51
…….
……
Sehingga menjadi A[…] = 20;40;10;230;21;121;1;51;…..

Contoh Koding:

idx = 0;

for(j=0;j<10;j++){

    curr=bucket[j];

    while(curr){

        arr[idx++]=curr->data;

        curr=curr->next;

    }

}

  • Langkah ke-5 adalah membebaskan simpul bucket. Simpul-simpul pada bucket akan kita free satu persatu, mempersiapkan bucket untuk ronde  selanjutnya.

contoh :

void freedata(struct tdata*a[]){

    int i;

    struct tdata *curr, *temp;

    for(i=0;i<10;i++){

        curr=a[i];

        while(curr){

            temp=curr;

            curr=curr->next;

            free(temp);

        }

    }

}

  • Sehingga jika seluruh langkah dilakukan urutan pensortingan radix digambarkan sebagai berikut

Ronde-1

0 :150/

1 :81->441/

2 :312/

3 :[EMPTY]

4 :94/

5 :535->295/

6 :66/

7 :717->697/

8 :958->328/

9 :[EMPTY]

Ronde-2

0 :[EMPTY]

1 :411->312->717/

2 :328/

3 :535/

4 :[EMPTY]

5 :150->958/

6 :66/

7 :[EMPTY]

8 :51/

9 :94->295->697/

Ronde-3

0 :66->81->94/

1 :150/

2 :295/

3 :312->328/

4 :411/

5 :535/

6 :697/

7 :717/

8 :[EMPTY]

9 :958/

Sehingga hasilnya menjadi : 66,81,94,150,295,312,328,411,535,697,717,958.

Week 7 – Hashing

Hashing adalah sebuah searching and storing method dengan cara mengakses lokasi/index penyimpanan data secara langsung. Hashing tidak memerlukan data yang terurut (seperti binary search) dan tidak memerlukan perbandingan nilai data. Hashing erupakan searching method yang cepat namun makan banyak memory.

Continue reading

Week 4 – Linked List

Linked List

  1. Refresh Memory Allocation
  2. Pengertian Linked List
  3. SLL : LIFO & FIFO
  4. Menghapus Linked List

Pembahasan no. 1

Memory dibagi dua :

  1. Heap
    Bersifat dinamic, jadi programmer yang pesan memory dengan malloc. Kelemahannya yaitu kemungkinan bisa kehabisan memory.
  2. Array
    Bersifat static, lebih “mudah” karena compiler yang cari tempat di memory.

Pembahasan no. 2

Linked List adalah sekumpulan elemen bertipe sama yang mempunyai keterurutan tertentu, dan setiap elemen terdiri atas dua bagian, yaitu :

  1. Informasi mengenai elemen (Info)
  2. Informasi mengenai alamat elemen suksesor (Next)

Elemen pertama, biasanya melalui alamatnya disebut First.

Alamat elemen berikutnya (suksesor), dapat diakses melalui Next.

Setiap elemen list mempunyai alamat (address) untuk mengacu sebuah elemen.

Dan ada elemen terakhirnya.

 

Pembahasan no. 3

Pada Single Linked List, biasa menggunakan istilah node, head, dan tail.
Node     : kombinasi data dan pointer,
Head     : node yang pertama,
Tail        : node yang terakhir (biasa untuk FIFO)

Contoh deklarasi sebuah linked list data

struct data{

int tgl,bln,thn;

char ket[100];

struct data *next;

};

Contoh deklarasi pointer penunjuk awal Linked List (LL)

struct data *head, *node, *tail;

 

FIFO dan LIFO

Untuk FIFO, list yang pertama kali diinput akan diprint pertama kali di output.

Teorinya, kita akan menggunakan dua variabel sebagai penanda dua variabel tersebut adalah head dan tail. Head adalah penanda node pertama sedangkan tail sebagai penanda node terakhir.

 

Penggunaan FIFO

Idenya saat FIFO, pada input data pertama head dan tail akan berada di node yang sama, ketika input kedua hingga ke-n variabel tail yang akan berpindah-pindah.

Contoh penggunaan algoritma dalam bentuk potongan code

if(head==NULL){

head=node;

tail=node;

}

else{

tail->next=node;

tail=node;

node->next=NULL; //line ini ditulis apabila node->next belum ditulis di atas

}

Penggunaan LIFO

Idenya saat LIFO kita hanya memindahkan “kepala” dari linked list, karena head lah yang akan diprint pertama.

Contoh penggunaan algoritma dalam bentuk potongan code

if(head==NULL){

head=node;

}

else{

node->next=head;

head=node;

}

Pembahasan no.4

Menghapus linked list

Tujuan dari menghapus linked list adalah untuk menghemat memory, pada saat pindah perpindahan data biasanya akan meninggalkan sebuah memory jika tidak dilepas/dihapus memorynya akan memenuhi kapasitas memory mengakibatkan program memakai resource memory secara berlebihan.

Untuk menghapus linked list bisa menggunakan contoh function dan juga harus menambahkan sebuah function dari stdlib.h yang bernama free contoh deklarasinya dibawah ini :

void del(struct tglnode **head){
struct tglnode *curr;
while (*head != NULL){
curr=*head;
*head=(*head)->next;
free(curr);
}
*head =NULL;
}

 

Dibuat oleh :

Yuriandhika Zafaridho (14110110001)

Naufal Irfan Hayanto   (14110110017)

Kevin Lionery               (14110110020)

Week 3 – Abstract Data Type ;>

  • Tipe data yaitu sekumpulan data yang memenuhi spesifikasi data dan operasi yang boleh dilakukan untuk data tersebut.
  • Struktur Data:
    • Teknik penyimpanan data dalam memori komputer, sehinnga data bisa digunakan dengan efisien.
    • Struktur Data dasar biasanya hanya berupa array, record, union dan pointer (reference).
  • Kumpulan character: field.
    • Kumpulan field: record.
      • Kumpulan record: table/file.
        • Kumpulan table/file: database.
  • Record sama dengan struct pada C (kumpulan field-field).
  • Abstract Data Type adalah suatu tipe data yang diatur sehingga spesifikasi data dan operasi terpisah dari representasi (interface) dan implementasinya. Abstract Data Type berisikan banyak tipe data standar, misalnya float, int, atau char.
  • Implementasi Abstract Data Type dapat dilakukan dengan list, stack, queue, tree, atau graph.
  • Operasi-operasi yang dapat dilakukan untuk membuat list:
    • createlist(size): untuk membuat suatu daftar dengan ukuran size.
    • insert(a,baru): menambahkan data baru pada a.
    • search(a,key): pencarian pada a dengan nilai key. mengembalikan posisi record bila ditemukan dan -1 bila tidak.
    • sizelist(a): menghitung dan mengembalikan nilai berupa jumlah data
    • clearlist(xyz): menghapus seluruh data pada daftar xyz
    • printlist(a): menampilkan seluruh data pada daftar a.
  • typedef pada C digunakan untuk memberikan nama alternatif pada tipe data.
    • Misalnya: typedef int integer; integer a;
    • Sama halnya dengan: int a;