Thursday, April 4, 2013

C++ LINKED list

setelah saya membuat coding LINKED list, inilah tampilan hasil dari coding setelah kita tekan 'F5'

1. MEMASUKAN DATA


2. MENGHAPUS DATA
    dalam menghpaus data kita beri perintah pada komputer untuk menghapus data yang akan kita hapus 
    dengan menekan tombol pada pilihan no.2 nanti data akan keluar pada pilihan nama/npm yang mau 
    dihapus seperti yang anda bisa lihat pada gambar



3. PENCARIAN DATA
    fungsinya adalah untuk memudahkan kita mencari data yang ada dengan cepat, disini program akan 
    memberi perintah untuk memasukan nama/npm yang ingin kita cari, setelah itu akan muncul data siswa dan 
    nilai yang ingin di tampilkan, seperti pada gambar dibawah berikut ini;



4. MENAMPILKAN DATA LIST
    fungsinya adalah menampilkan semua jumlah data mahasiswa dan nilai yang tercantum hingga bisa 
    mengetahui data-data mahasiswa yang sudah masuk atau tersimpan








linked list C++ (penambahan, pencarian, penghapusan data)

kali ini saya akan membuat program Linked List didalam Microsoft Visual Studio C++, sedikit penambahan, Linkes list yang saya buat ini berguna untuk mencari, memasukan, dan menghapus suatu data
karya : VANNY MONIAGA
jurusan : Ilmu Komputer
Universitas International Batam
matakuliah : Algoritma
Dosen: Yuniansyah, S.kom, M.kom

Berikut coding-coding dibawah ini :


#include "stdafx.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define CLS system("cls");
#define PAUSE {printf("\n"); system("pause");}

// membandingkan dua buah string (ignore case)


int _tmain(int argc, _TCHAR* argv[])
{
}
int compare(char *str1, char *str2) {
    int len = strlen(str1);
    int beda = 0;

    for (int i=0; i<len; i++) {
        if (str1[i] >= 'A' && str1[i] <= 'Z') str1[i] += 32;
        if (str2[i] >= 'A' && str2[i] <= 'Z') str2[i] += 32;

        if (str1[i] != str2[i]) beda++;
        if (str2[i] == 'beda') {
            beda++;
                return beda;
        }
    }

    if (strlen(str2) < len) {
        beda += strlen(str2) - len;
    }

    return beda;
}

int main()
{
    struct list {
        char npm[16];
        char nama[64];
        float nilai;
        struct list *next;
    };

    struct list *awal, *akhir, *p, *Psbl, *baru;

    awal = akhir = NULL;

    int pilihan = 1, posisi, posisi_sekarang,posisi_data;
    char cari[64], konfirmasi;
    do {
        switch (pilihan) {
            case 1: // tambah data kedalam list
                CLS;
                baru = (struct list *) malloc(sizeof(struct list)); // alokasikan list baru di memori
                if (baru == NULL) {
                    CLS;
                    printf("\nMemori tidak cukup.");
                    PAUSE;
                    break;
                }
                printf("\nNPM   : "); scanf("%s", baru->npm); getchar();
                printf("Nama  : "); scanf("%[^\n]", baru->nama);
                printf("Nilai : "); scanf("%f", &baru->nilai);

                if (awal == NULL) {
                    baru->next = NULL;
                    awal = baru;
                    akhir = baru;
                } else {
                    printf("\nTambahkan Data di (Default = akhir) : \n");
                    printf("1. Awal\n2. Tengah\n3. Akhir\n\nPilihan Anda : ");
                    scanf("%d", &posisi);
                    switch(posisi) {
                        case 1:
                            // tambah data di awal list
                            baru->next = awal;
                            awal = baru;
                            PAUSE;
                            break;

                        case 2:
                            printf("Masukan posisi data : "); scanf("%d", &posisi_data);
                            p = awal;
                            Psbl = NULL;
                            posisi_sekarang = 1;
                            while (p != NULL && posisi_sekarang < posisi_data) {
                                //Psbl = p;
                                p = p->next;
                                posisi_sekarang++;
                            }
                            if (p != NULL) {
                                // tambahkan data di tengah (posisi_data)
                                Psbl = p;
                                baru->next = p->next;
                                Psbl->next = baru;
                            }
                            break;

                        case 3:
                        default:
                            // tambah data di akhir list
                            akhir->next = baru;
                            akhir = baru;
                            baru->next = NULL;
                            PAUSE;
                            break;
                    }
                }

                break;

            case 2:
                CLS;
                p = awal;
                printf("\n------------------------------------------\n");
                if (p == NULL) {
                    printf("\n List Kosong\n");
                    printf("\n------------------------------------------\n");
                    break;
                } else {
                    while (p != NULL) {
                        printf("\nNPM   : %s", p->npm);
                        printf("\nNama  : %s", p->nama);
                        printf("\nNilai : %.2f", p->nilai);
                        printf("\n------------------------------------------\n");
                        p = p->next;
                    }
                }

                printf("\n");
                printf("Masukan NPM/Nama dari data yang ingin dihapus : ");
                scanf("%s", cari);
                CLS;
                Psbl = NULL;
                p = awal;
                while (p != NULL) {
                    if (compare(p->npm, cari) == 0 || compare(p->nama, cari) == 0) {
                        printf("\n\n------------------------------------------\n");

                        printf("\nNPM   : %s", p->npm);
                        printf("\nNama  : %s", p->nama);
                        printf("\nNilai : %.2f", p->nilai);
                        printf("\n------------------------------------------\n");

                        printf("\nIngin menghapus data di atas (y/n) : ");
                        scanf("%s", &konfirmasi);
                        if (konfirmasi == 'y' || konfirmasi == 'Y') {
                            if (awal->next == NULL) {
                                awal = NULL;
                                akhir = awal;
                            } else if (p == awal) {
                                // hapus di awal
                                Psbl = awal;
                                awal = Psbl->next;
                            } else if (p == akhir) {
                                // hapus di akhir
                                Psbl->next = NULL;
                                akhir = Psbl;
                            }
                            else {
                                // hapus di tengah
                                Psbl->next = p->next;
                            }

                            printf("\nData berhasil dihapus.\n\n");
                        } else {
                            printf("\nData tidak jadi dihapus.\n\n");
                        }

                        break;
                    }
                    Psbl = p;

                    p = p->next;
                }

                if (p == NULL) {
                    printf("\n\nNPM/Nama tidak ditemukan !\n\n");
                }
                PAUSE;
                break;

            case 3:
                CLS;
                printf("\nMasukan NPM/Nama yang di cari : ");
                scanf("%s", cari);

                p = awal;
                while (p != NULL) {
                    if (compare(p->npm, cari) == 0 || compare(p->nama, cari) == 0) {
                        printf("\n\n------------------------------------------\n");

                        printf("\nNPM   : %s", p->npm);
                        printf("\nNama  : %s", p->nama);
                        printf("\nNilai : %.2f", p->nilai);
                        printf("\n------------------------------------------\n");

                        PAUSE;
                        break;
                    }
                    p = p->next;
                }
                if (p == NULL) {
                    printf("\nData tidak ditemukan ! \n\n");
                    PAUSE;
                }
                break;

            case 4: // tampilkan list
                CLS;

                p = awal;
                printf("\n------------------------------------------\n");
                if (p == NULL) {
                    printf("\n List Kosong\n");
                    printf("\n------------------------------------------\n");
                } else {
                    while (p != NULL) {
                        printf("\nNPM   : %s", p->npm);
                        printf("\nNama  : %s", p->nama);
                        printf("\nNilai : %.2f", p->nilai);
                        printf("\n------------------------------------------\n");
                        p = p->next;
                    }
                }
                printf("\n");
                PAUSE;
                break;

            case 0: break;

            default:
                printf("\nPilihan salah !\n");
                break;
        }

        CLS;
        printf("\n1. Tambahkan data kedalam list\n"
                 "2. Hapus data\n"
                 "3. Pencarian data\n"
                 "4. Tampilkan list\n"
                 "0. Keluar\n\n");
        printf("Pilihan Anda : ");
        scanf("%d", &pilihan);
    } while (pilihan > 0);

    return 0;
}

LINKED LIST


DEFINISI
Linked list (list bertaut) adalah salah satu struktur data dasar yang
sangat fundamental dalam bidang ilmu komputer. Dengan
menggunakan linked list maka programmer dapat menimpan datanya
kapanpun dibutuhkan. Linked list mirip dangan array, kecuali pada
linked list data yang ingin disimpan dapat dialokasikan secara dinamis
pada saat pengoperasian program (run-time).
Linked List sering disebut juga Senarai Berantai Linked List saling
terhubung dengan bantuan variabel pointer Masing-masing data dalam
Linked List disebut dengan node (simpul) yang menempati alokasi
memori secara dinamis dan biasanya


CATATAN :
- Ada dua hal yang menjadi kerugian dengan representasi suatu data dengan
linked list ini,
  yaitu :
  1. Diperlukan ruang tambahan untuk menyatakan/tempat field pointer.
  2. Diperlukan waktu yang lebih banyak untuk mencari suatu node dalam linked
       list.
- Sedangkan keuntungannya adalah :
  1. Jenis data yang berbeda dapat di-link.
  2. Operasi REMOVE atau INSERT hanya dilakukan dengan mengubah pointer-nya saja.

Wednesday, March 6, 2013

Gambar Tree




-       Hubungan antar elemen: parent
    child, father-son, mother-daughter

-      Nama node: nama(angka) yang dipakai untuk membedakan sebuah node dengan node yang lain. Dalam kuliah ini adalah angka yang tertulis dalam lingkaran.

-   Label: nilai yang diingat oleh sebuah node   
  
-      Tree vs Graph
    Tree: setiap node kecuali root hanya memiliki
    sebuah parent
    Graph: dapat memiliki lebih dari  sebuah parent

-          siblingnode-node yang memiliki parent yang sama
-          Ancestor dari node x node yang ditemukan, ketika menyusuri tree ke atas dari node x
-          Descendant dari node x node yang ditemukan ketika menyusuri tree ke bawah dari node x 





 











TREE

Tree bisa didefinisikan sebagai suatu kumpulan elemen salah satu elemennya disebut dengan akar (root), dan sisa elemen lainnya (yang disebut simpul) terpecah menjadi sejumlah himpunan yang paling tidak berhubungan satu sama lain, yang disebut dengan subpohon (subtree), atau disebut juga cabang. Jika kita melihat pada subpohon, maka subpohon inipun juga mempunyai akar dan sub-subpohonnya masing-masing. Dalam kehidupan sehari-hari, tree dapat dilihat dari pohon silsilah keluarga.
Tingkat yang tertinggi disebut juga sebagai root

Pohon Biner (Binary Tree)
Pohon biner bisa didefinisikan sebagai suatu kumpulan simpul yang mungkin kosong atau mempunyai akar dan dua subpohon yang saling terpisah yang disebut dengan subpohon kiri dan sub pohon kanan. Subpohon disebut juga sebagai cabang. Karakteristik dari pohon biner ialah bahwa setiap simpul paling banyak hanya mempunyai dua buah anak. Dengan kata lain derajat tertinggi dari sebuah pohon biner adalah dua.
Pengertian daun, root, level, tinggi dan derajad yang berlaku pada pohon
juga berlaku pada binary tree. Penyajian binary tree pada komputer di gunakan
double link list.
 
Deklarasi Pohon Biner
Setiap simpul pada pohon biner selalu berisi dua buah pointer yang menunjuk ke cabang kiri dan cabang kanan dengan melihat hal tersebut maka struktur double link list sangat cocok untuk di terapkan di dalam tree ini.

Kunjungan Pada Pohon Biner
Sebuah pohon biner memiliki operasi traversal yaitu suatu kunjungan pada
suatu simpul tepat satu kali. Dengan melakukan kunjungan lengkap kita akan
memperoleh urutan informasi secara linier yang tersimpan di dalam pohon biner.
Terdapat tiga jenis kunjungan pada pohon biner, yaitu :
 
1. PREORDER
Kunjungan jenis ini mempunyai urutan kunjungan sebagai berikut :
- Cetak isi simpul yang dikunjungi.
- Kunjungi cabang kiri.
- Kunjungi cabang kanan.

INORDER
Kunjungan jenis ini mempunyai urutan kunjungan sebagai berikut :
- Kunjungi cabang kiri.
- Cetak isi simpul yang dikunjungi.
- Kunjungi cabang kanan.

POSTORDER
Kunjungan jenis ini mempunyai urutan kunjungan sebagai berikut :
- Kunjungi cabang kiri.
- Kunjungi cabang kanan.
- Cetak isi simpul yang dikunjungi.