saya akan menjelaskan tentang jenis2 binary tree;
Ada 3 jenis tree yaitu :
skewed tree (masing2 punya satu anak di tap turunannya)
perfect tree (masing2 punya 2 anak di setiap turunannya)
complete tree(sebuah bynari tree yang tidak sempurna)
dalam pengaplikasiannya tree juga bisa digunakan dalam oprasi perhitungan seperti:
infix(perhitungan biasa)
=> A + B x C
prefix(perhitungan yang memposisikan tanda oprasi hitungan di depan angka)
=> + A x B C
postfix(perhitungan yang memposisikan tanda oprasi hitungan di belakang angka)
=>A B C x +
Sabtu, 29 Maret 2014
Jumat, 21 Maret 2014
linked list part 3
link list
: singgle(next), double(next, prev), multi(left, right, parent, child);
implementasi
: stack(enstack(nambah), destack(ngurang)) , queue(front(depan) , rear(belakang)) ;
berikut saya berikan contoh kodingan program push dalam link list yang nantinya bisa menentukan pisisi pushnya secara manual:
int jumlahData=0
void push(char vegeName[], int qty, int posisi)
{
struct grocery *curr=(struct grocery*)malloc(sizeof(struct grocery));
strcpy(curr->vegeName,vegeName);
curr->qty=qty;
if(head==NULL)
{
head=tail=curr;
tail->next=NULL;
head->prev=NULL;
}
else
{
if(posisi==1)
{
curr->next=head;
head->prev=curr;
head=curr;
head->prev=NULL;
}
else if(posisi==jumlahData+1)
{
tail->next=curr;
curr->prev=tail;
tail=curr;
tail->next=NULL;
}
else
{
temp=head;
int i=1;
while(temp!=tail && i!=posisi-1)
{
temp=temp->next;
i++;
}
curr->next=temp->next;
temp->next->prev=curr;
temp->next=curr;
curr->prev=temp;
}
}
jumlahData++;
}
berikut adalah kodingan program yang inngin menghapus (pop) suatu spesifik data:
void pop(char vegeName[])
{
if(head==NULL)
{
printf("not found");
}
else
{
if(strcmpi(head->vegeName,vegeName)==0)
{
if(head==tail)
{
free(head);
head=tail=NULL;
}
else
{
head=head->next;
free(head->prev);
head->prev=NULL;
}
}
else if(strcmpi(tail->vegeName,vegeName)==0)
{
tail=tail->prev;
free(tail->next);
tail->next=NULL;
}
else
{
temp=head;
int isFound=0;
while(temp!=NULL )
{
if(strcmpi(vegeName,temp->vegeName)==0)
{
isFound=1;
break;
}
temp=temp->next;
}
if(isFound==1)
{
temp->next->prev=temp->prev;
temp->prev->next=temp->next;
free(temp);
}
else
{
printf("\nnot found ");
getch();
}
}
}
}
Jumat, 14 Maret 2014
link list part 2
QUEUE:
adalah sebuah system linked list system yang menganut system FIFO (first in first out);
queue menggunakan system pushHead dengan popTail selain itu bisa juga menggunakan system pushTail dengan popHead;
queue menggunakan system priority queue jadi dalam sytem ini kita bisa langsung mensorting node yang di masukan , contoh kodingnya adalah:
void priority(char nama[], int usia){
struct Facebook *curr = (struct Facebook*) malloc(sizeof(struct Facebook));
strcpy(curr->nama,nama);
curr->usia = usia;
if(head == NULL){
head = tail = curr;
head->prev = NULL;
tail->next = NULL;
}else{
if(curr->usia > head->usia){
//pushHead
curr->next = head;
head->prev = curr;
head = curr;
head->prev = NULL;
}else if(curr->usia < tail->usia ){
//pushTail
tail->next = curr;
curr->prev = tail;
tail = curr;
tail->next = NULL;
}else{
//push mid
struct Facebook *temp=head;
while(temp->next->usia > curr->usia){
temp = temp->next;
}
curr->next = temp->next;
temp->next->prev = curr;
temp->next = curr;
curr->prev = temp;
}
}
}
jadi secara logika bisa disimpulkan sebagai berikut:
//if(strcmp(curr->nama,head->nama) < 0){
// //push head
//}else if(strcmp(curr->nama,tail->nama) > 0){
// //push tail
//}else{
// //push mid
//}
STACK:
adalah sebuah system linked list system yang menganut system LIFO (last in first out);
stack menggunakan system pushHead dengan popHead selain itu bisa juga menggunakan system pushTail dengan popTail;
DOUBLE LINKED LIST:
adalah system linked list yang cara menyambungnya mempunyai 2 cara dengan next dan prev;
ini contoh kodingnya:
struct Facebook{
char nama[25];
int usia;
struct Facebook *next,*prev;
}*head,*tail , *curr;
adalah sebuah system linked list system yang menganut system FIFO (first in first out);
queue menggunakan system pushHead dengan popTail selain itu bisa juga menggunakan system pushTail dengan popHead;
queue menggunakan system priority queue jadi dalam sytem ini kita bisa langsung mensorting node yang di masukan , contoh kodingnya adalah:
void priority(char nama[], int usia){
struct Facebook *curr = (struct Facebook*) malloc(sizeof(struct Facebook));
strcpy(curr->nama,nama);
curr->usia = usia;
if(head == NULL){
head = tail = curr;
head->prev = NULL;
tail->next = NULL;
}else{
if(curr->usia > head->usia){
//pushHead
curr->next = head;
head->prev = curr;
head = curr;
head->prev = NULL;
}else if(curr->usia < tail->usia ){
//pushTail
tail->next = curr;
curr->prev = tail;
tail = curr;
tail->next = NULL;
}else{
//push mid
struct Facebook *temp=head;
while(temp->next->usia > curr->usia){
temp = temp->next;
}
curr->next = temp->next;
temp->next->prev = curr;
temp->next = curr;
curr->prev = temp;
}
}
}
jadi secara logika bisa disimpulkan sebagai berikut:
//if(strcmp(curr->nama,head->nama) < 0){
// //push head
//}else if(strcmp(curr->nama,tail->nama) > 0){
// //push tail
//}else{
// //push mid
//}
STACK:
adalah sebuah system linked list system yang menganut system LIFO (last in first out);
stack menggunakan system pushHead dengan popHead selain itu bisa juga menggunakan system pushTail dengan popTail;
DOUBLE LINKED LIST:
adalah system linked list yang cara menyambungnya mempunyai 2 cara dengan next dan prev;
ini contoh kodingnya:
struct Facebook{
char nama[25];
int usia;
struct Facebook *next,*prev;
}*head,*tail , *curr;
Jumat, 07 Maret 2014
LINKED LIST DI STRUTUR DATA 7-3-2014
linked list : suatu cara membuat kumpulan data yang berisi bermacam-macam data dan bersifat dinamis yang artinya jumlah kumpulan data di dalam memory akan berubah-ubah sesuai jumlah inputan data user;
data- data yang dimasukan dalam linked list di sebut node
example:
struct Mahasiswa{
char nama[25];
int usia;
struct Mahasiswa *next;
}*head, *tail;
linked list dibagi jadi banyak:
1) pushHead/ pushDepan
menambahkan node(data) di awal, jadi setiap node yang ditambah node itu akan di masukan ke awal node;
example:
void pushDepan(char nama[],int usia){
struct Mahasiswa *curr = (struct Mahasiswa*) malloc(sizeof(struct Mahasiswa));
strcpy(curr->nama,nama);
curr->usia = usia;
if(head == NULL){
head = tail = curr;
tail->next = NULL;
}else{
curr->next = head;
head = curr;
}
}
2)pushTail/pushBelakang
menambahkan node(data) di akhir, jadi setiap node yang ditambah node itu akan di masukan ke akhir node ;
void pushBelakang(char nama[], int usia){
struct Mahasiswa *curr = (struct Mahasiswa*) malloc(sizeof(struct Mahasiswa));
strcpy(curr->nama,nama);
curr->usia = usia;
if(head == NULL){
head = tail = curr;
}else{
tail->next = curr;
tail = curr;
}
tail->next = NULL;
}
3)print/cetak
fungsi ini hanya untuk mencetak linked list;
example:
void print(){
struct Mahasiswa *curr;
printf("=====================================================\n");
printf("| %-23s | %-23s |\n","Nama Mahasiswa","Usia");
printf("=====================================================\n");
//menggunakan for
for(curr=head;curr!=NULL;curr=curr->next){
printf("| %-23s | %-23d |\n",curr->nama,curr->usia);
}
//menggunakan while
curr = head;
while(curr){
printf("| %-23s | %-23d |\n",curr->nama,curr->usia);
curr=curr->next;
}
printf("=====================================================\n");
}
4)popDepan/popHead
menghapus node yang ada di paling depan;
example:
void popDepan(){
if(head){
struct Mahasiswa *curr = head;
if(head == tail){
//1
head = tail = NULL;
free(curr);
}else{
//>1
head = head->next;
free(curr);
}
}else{
printf("No more data to be deleted..\n\n");
}
}
5)popBelakang/popTail
menghapus node yang ada di paling belakang;
void popBelakang(){
if(head){
struct Mahasiswa *curr = head;
if(head == tail){
//1
head = tail = NULL;
free(curr);
}else{
//>1
while(curr->next != tail){
curr=curr->next;
}
tail = curr;
free(curr->next);
tail->next = NULL;
}
}else{
printf("No more data to be deleted..\n\n");
}
}
6)popAll
menghapus semua node yang ada
example:
void popAll()
{
curr=head;
while(curr)
{
head=head->next;
free(curr);
curr=head;
}
head=tail=NULL;
}
berikut cara menukar data tanpa menggunakan temporary:
example:
void tukar(int *a, int *b){
*a ^= *b ^= *a ^= *b;
}
void main()
{
int angka = 20;
int angka2 = 30;
tukar(&angka,&angka2);
printf("%d %d",angka, angka2);
}
tambahan istilah-istilah :
Queue = awal
Rear=belakang
Circular Queue= antrian yang berputar
FIFO(menganut sistem first in first out)
Stacks:
Top=data / node yang ada di paling atas
instacks=masuk
destacks=keluar
enqueue=Push
dequeue=Pop
LIFO(menganut sistem last in first out)
beda b.tree dan b.s.tree
binary tree: kita tentuin sendiri letaknya dimana
binary search tree memiliki ketentuan bahwa bilangan yang lebih kecil harus disebelah kiri dan mempunyai keuntungan membuat pencarian lebih cepat
Tipe data: float, int, char, long, double,void ,sign, unsign
int= bilangan riil;
long= kapasitasnya (2^32);
float = jumlah angka di belakang koma panjang
double = jumlah angka di belakang koma dua kali float.
baris=row=record
kolom=field
sumber:
skyconnectiva dan binus
data- data yang dimasukan dalam linked list di sebut node
example:
struct Mahasiswa{
char nama[25];
int usia;
struct Mahasiswa *next;
}*head, *tail;
linked list dibagi jadi banyak:
1) pushHead/ pushDepan
menambahkan node(data) di awal, jadi setiap node yang ditambah node itu akan di masukan ke awal node;
example:
void pushDepan(char nama[],int usia){
struct Mahasiswa *curr = (struct Mahasiswa*) malloc(sizeof(struct Mahasiswa));
strcpy(curr->nama,nama);
curr->usia = usia;
if(head == NULL){
head = tail = curr;
tail->next = NULL;
}else{
curr->next = head;
head = curr;
}
}
2)pushTail/pushBelakang
menambahkan node(data) di akhir, jadi setiap node yang ditambah node itu akan di masukan ke akhir node ;
void pushBelakang(char nama[], int usia){
struct Mahasiswa *curr = (struct Mahasiswa*) malloc(sizeof(struct Mahasiswa));
strcpy(curr->nama,nama);
curr->usia = usia;
if(head == NULL){
head = tail = curr;
}else{
tail->next = curr;
tail = curr;
}
tail->next = NULL;
}
3)print/cetak
fungsi ini hanya untuk mencetak linked list;
example:
void print(){
struct Mahasiswa *curr;
printf("=====================================================\n");
printf("| %-23s | %-23s |\n","Nama Mahasiswa","Usia");
printf("=====================================================\n");
//menggunakan for
for(curr=head;curr!=NULL;curr=curr->next){
printf("| %-23s | %-23d |\n",curr->nama,curr->usia);
}
//menggunakan while
curr = head;
while(curr){
printf("| %-23s | %-23d |\n",curr->nama,curr->usia);
curr=curr->next;
}
printf("=====================================================\n");
}
4)popDepan/popHead
menghapus node yang ada di paling depan;
example:
void popDepan(){
if(head){
struct Mahasiswa *curr = head;
if(head == tail){
//1
head = tail = NULL;
free(curr);
}else{
//>1
head = head->next;
free(curr);
}
}else{
printf("No more data to be deleted..\n\n");
}
}
5)popBelakang/popTail
menghapus node yang ada di paling belakang;
void popBelakang(){
if(head){
struct Mahasiswa *curr = head;
if(head == tail){
//1
head = tail = NULL;
free(curr);
}else{
//>1
while(curr->next != tail){
curr=curr->next;
}
tail = curr;
free(curr->next);
tail->next = NULL;
}
}else{
printf("No more data to be deleted..\n\n");
}
}
6)popAll
menghapus semua node yang ada
example:
void popAll()
{
curr=head;
while(curr)
{
head=head->next;
free(curr);
curr=head;
}
head=tail=NULL;
}
berikut cara menukar data tanpa menggunakan temporary:
example:
void tukar(int *a, int *b){
*a ^= *b ^= *a ^= *b;
}
void main()
{
int angka = 20;
int angka2 = 30;
tukar(&angka,&angka2);
printf("%d %d",angka, angka2);
}
tambahan istilah-istilah :
Queue = awal
Rear=belakang
Circular Queue= antrian yang berputar
FIFO(menganut sistem first in first out)
Stacks:
Top=data / node yang ada di paling atas
instacks=masuk
destacks=keluar
enqueue=Push
dequeue=Pop
LIFO(menganut sistem last in first out)
beda b.tree dan b.s.tree
binary tree: kita tentuin sendiri letaknya dimana
binary search tree memiliki ketentuan bahwa bilangan yang lebih kecil harus disebelah kiri dan mempunyai keuntungan membuat pencarian lebih cepat
Tipe data: float, int, char, long, double,void ,sign, unsign
int= bilangan riil;
long= kapasitasnya (2^32);
float = jumlah angka di belakang koma panjang
double = jumlah angka di belakang koma dua kali float.
baris=row=record
kolom=field
sumber:
skyconnectiva dan binus
Langganan:
Postingan (Atom)