20
Struktur data Non linear: adalah sistem yang tidak linier yakni sistem yang tidak memenuhi prinsip superposisi . Sedikit lebih teknis, sistem nonlinier adalah sembarang soal dimana peubah yang disolusi tidak dapat ditulis sebagai jumlah linier komponen- komponen tak gayut. Sistem nonhomogen , yang linier terpisah dari keberadaan fungsi peubah-peubah tak gayut , adalah nonlinier menurut definisi yang tegas, namun sistem demikian biasanya dipelajari disamping sistem linier, karena mereka dapat ditransformasi menuju sistem linier sepanjang solusi khusus diketahui. tree >> Pengertian Salah satu bentuk struktur data tidak linier yang menggambarkan hubungan yang hirarki. >> Ketentuan Tree Root (akar) adalah node yang memiliki derajat keluar >=0 dan derajat masuk = 0. Subtree/child adalah bagian salah satu node dibawah root sampai ke bawah. Leaf (daun) adalah semua node yang derajat masuknya 1 dan derajat keluarnya 0. Height (ketinggian) adalah level tertinggi dari tree ditambah 1. Weight (bobot) adalah jumlah leaf(daun) pada tree. >> Contoh Tree Contoh tree dengan 2 level. Root : node A Subtree : 2 yaitu node B dan C Leaf : 4 yaitu node D, E, F, G Level : ada 2 Height : level + 1 = 2 + 1 = 3 Size : 7 node yaitu A, B, C, D, E, F, G Binary tree sebuah binary search tree (bst) adalah sebuah pohon biner yang boleh kosong, dan setiap nodenya harus memiliki identifier/value. value pada semua node subpohon sebelah kiri adalah selalu lebih kecil dari value dari root, sedangkan value subpohon di sebelah kanan adalah sama atau lebih besar dari value pada root, masing – masing subpohon tersebut (kiri&kanan) itu sendiri adalah juga bst.sebuah bst, pada dasarnya adalah sebuah pohon biner (binary tree), oleh karena itu, kita dapat melakukan traversal pada setiap node dengan metode inorder, preorder maupun postorder. dan jika kita melakukan

Struktur Data Non Linear Dan Linear

  • Upload
    ilkom12

  • View
    547

  • Download
    7

Embed Size (px)

DESCRIPTION

Tipe Data Abstrak untuk Struct

Citation preview

Page 1: Struktur Data Non Linear Dan Linear

Struktur data Non linear: adalah sistem yang tidak linier yakni sistem yang tidak memenuhi prinsip superposisi. Sedikit lebih teknis, sistem nonlinier adalah sembarang soal dimana peubah yang disolusi tidak dapat ditulis sebagai jumlah linier komponen-komponen tak gayut. Sistem nonhomogen, yang linier terpisah dari keberadaan fungsi peubah-peubah tak gayut, adalah nonlinier menurut definisi yang tegas, namun sistem demikian biasanya dipelajari disamping sistem linier, karena mereka dapat ditransformasi menuju sistem linier sepanjang solusi khusus diketahui.

tree

>> Pengertian

Salah satu bentuk struktur data tidak linier yang menggambarkan hubungan yang hirarki.

>> Ketentuan Tree

Root (akar) adalah node yang memiliki derajat keluar >=0 dan derajat masuk = 0.

Subtree/child adalah bagian salah satu node dibawah root sampai ke bawah.

Leaf (daun) adalah semua node yang derajat masuknya 1 dan derajat keluarnya 0.

Height (ketinggian) adalah level tertinggi dari tree ditambah 1.

Weight (bobot) adalah jumlah leaf(daun) pada tree.

>> Contoh Tree

Contoh tree dengan 2 level.

Root : node A

Subtree : 2 yaitu node B dan C

Leaf : 4 yaitu node D, E, F, G

Level : ada 2

Height : level + 1 = 2 + 1 = 3

Size : 7 node yaitu A, B, C, D, E, F, G

Binary tree

sebuah binary search tree (bst) adalah sebuah pohon biner yang boleh kosong, dan setiap

nodenya harus memiliki identifier/value. value pada semua node subpohon sebelah kiri

adalah selalu lebih kecil dari value dari root, sedangkan value subpohon di sebelah kanan

adalah sama atau lebih besar dari value pada root, masing – masing subpohon tersebut

(kiri&kanan) itu sendiri adalah juga bst.sebuah bst, pada dasarnya adalah sebuah pohon

biner (binary tree), oleh karena itu, kita dapat melakukan traversal pada setiap node

dengan metode inorder, preorder maupun postorder. dan jika kita melakukan traversal

dengan metode inorder, pada dasarnya kita telah melakukan traversal valuenya secara

terurut dari kecil ke besar, jadilah ini sebagai sorting algoritma

Page 2: Struktur Data Non Linear Dan Linear

contoh:

#include<iostream.h>

#include<conio.h>

#include<stdio.h>

#include<stdlib.h>

struct node

{

int data;

node *left; 

node *right;

};

node *tree=NULL;

node *insert(node *tree,int ele);

void preorder(node *tree);

void inorder(node *tree);

void postorder(node *tree);

int count=1;

void main()

{

clrscr();

int ch,ele;

do

{

clrscr();

cout<<"\n\t\a\a1----INSERT A NODE IN A BINARY TREE.\a\a";

cout<<"\n\t\a\a2----PRE-ORDER TRAVERSAL.\a\a";

cout<<"\n\t\a\a3----IN-ORDER TRAVERSAL.\a\a";

cout<<"\n\t\a\a4----POST-ORDER TRAVERSAL.\a\a";

cout<<"\n\t\a\a5----EXIT.\a\a";

cout<<"\n\t\a\aENTER CHOICE::\a\a";

cin>>ch;

switch(ch)

{

case 1:

cout<<"\n\t\a\aENTER THE ELEMENT::\a\a";

cin>>ele;

tree=insert(tree,ele);

break;

case 2:

cout<<"\n\t\a\a****PRE-ORDER TRAVERSAL OF A TREE****\a\a";

preorder(tree);

break;

Page 3: Struktur Data Non Linear Dan Linear

case 3:

cout<<"\n\t\a\a****IN-ORDER TRAVERSAL OF A TREE****\a\a";

inorder(tree);

break;

case 4:

cout<<"\n\t\a\a****POST-ORDER TRAVERSAL OF A TREE****\a\a";

postorder(tree);

break;

case 5:

exit(0);

}

}while(ch!=5);

}

node *insert(node *tree,int ele)

{

if(tree==NULL)

{

tree=new node;

tree->left=tree->right=NULL;

tree->data=ele;

count++;

}

else

if(count%2==0)

tree->left=insert(tree->left,ele);

else

tree->right=insert(tree->right,ele);

return(tree);

}

void preorder(node *tree)

{

if(tree!=NULL)

{

cout<<tree->data;

preorder(tree->left);

preorder(tree->right);

getch();

}

}

void inorder(node *tree)

{

if(tree!=NULL)

{

inorder(tree->left);

Page 4: Struktur Data Non Linear Dan Linear

cout<<tree->data;

inorder(tree->right);

getch();

}

}

void postorder(node *tree)

{

if(tree!=NULL)

{

postorder(tree->left);

postorder(tree->right);

cout<<tree->data;

getch();

}

}

Graph

Graf adalah kumpulan noktah (simpul) di dalam bidang dua dimensi yang dihubungkan dengan sekumpulan garis (sisi). Graph dapat

digunakan untuk merepresentasikan objek-objek diskrit dan hubungan antara objek-objek tersebut. Representasi visual

dari graphadalah dengan menyatakan objek sebagai noktah, bulatan atau titik (Vertex), sedangkan hubungan antara objek

dinyatakan dengan garis (Edge).

G = (V, E)DimanaG = GraphV = Simpul atau Vertex, atau Node, atau TitikE = Busur atau Edge, atau arcGraf merupakan suatu cabang ilmu yang memiliki banyak terapan. Banyak sekali struktur yang bisa direpresentasikan

dengan graf, dan banyak masalah yang bisa diselesaikan dengan bantuan graf. Seringkali graf digunakan untuk

merepresentasikan suaru jaringan. Misalkan jaringan jalan raya dimodelkan graf dengan kota sebagai simpul (vertex/node) dan

jalan yang menghubungkan setiap kotanya sebagai sisi (edge) yang bobotnya (weight) adalah panjang dari jalan tersebut.

Ada beberapa cara untuk menyimpan graph di dalam sitem komputer. Struktur data bergantung pada struktur graph dan

algoritma yang digunakan untuk memmanipulasi graph. Secara teori salah satu dari keduanya dapat dibedakan antara struktur

list dan matriks, tetapi dalam penggunaannya struktur terbaik yang sering digunakan adalah kombinasi keduanya.

• Graph tak berarah (undirected graph atau non-directed graph) :

• Urutan simpul dalam sebuah busur tidak dipentingkan. Misal busur e1 dapat disebut busur AB atau BA

• Graph berarah (directed graph) :

• Urutan simpul mempunyai arti. Misal busur AB adalah e1 sedangkan busur BA adalah e8.

• Graph Berbobot (Weighted Graph)

• Jika setiap busur mempunyai nilai yang menyatakan hubungan antara 2 buah simpul, maka busur tersebut dinyatakan memiliki

bobot.

• Bobot sebuah busur dapat menyatakan panjang sebuah jalan dari 2 buah titik, jumlah rata-rata kendaraan perhari yang melalui

sebuah jalan, dll.

Tree dalam pemrograman merupakan struktur data yang tidak linear / non linear yang digunakan terutama untuk

merepresentasikan hubungan data yang bersifat hierarkis antara elemen-elemennya. Kumpulan elemen yang salah satu

elemennya disebut dengan root (akar) dan sisa elemen yang lain disebut sebagai simpul (node/vertex) yang terpecah menjadi

sejumlah himpunan yang tidak saling berhubungan satu sama lain, yang disebut subtree / cabang.

Page 5: Struktur Data Non Linear Dan Linear

Adapun Perbedaan Graph dengan Tree sebagai berikut:

a. Pada Tree tidak terdapat Cycle

b. Pada Graph tidak memiliki root

2. Istilah-istilah dalam graf

Kemudian terdapat istilah-istilah yang berkaitan dengan graph yaitu:

a. Vertex

Adalah himpunan node / titik pada sebuah graph.

b. Edge

Adalah himpunan garis yang menghubungkan tiap node / vertex.

c. Adjacent

Adalah dua buah titik dikatakan berdekatan (adjacent) jika dua buah titik tersebut terhubung dengan sebuah sisi. Adalah Sisi e3 =

v2v3 insident dengan titik v2 dan titik v3, tetapi sisi e3 = v2v3 tidak insident dengan titik v1 dan titik v4.

Titik v1 adjacent dengan titik v2 dan titik v3, tetapi titik v1 tidak adjacent dengan titik v4.

d. Weight

Adalah Sebuah graf G = (V, E) disebut sebuah graf berbobot (weight graph), apabila terdapat sebuah fungsi bobot bernilai real W pada

himpunan E,

W : E  R,

nilai W(e) disebut bobot untuk sisi e,  e  E. Graf berbobot tersebut dinyatakan pula sebagai G = (V, E, W).

Graf berbobot G = (V, E, W) dapat menyatakan

 suatu sistem perhubungan udara, di mana

 V = himpunan kota-kota

 E = himpunan penerbangan langsung dari satu kota ke kota lain

 W = fungsi bernilai real pada E yang menyatakan jarak atau ongkos atau waktu

 suatu sistem jaringan komputer, di mana

 V = himpunan komputer

 E = himpunan jalur komunikasi langsung antar dua komputer

 W = fungsi bernilai real pada E yang menyatakan jarak atau ongkos atau waktu

e. Path

Adalah Walk dengan setiap vertex berbeda. Contoh, P = D5B4C2A Sebuah walk (W) didefinisikan sebagai urutan (tdk nol) vertex &

edge. Diawali origin vertex dan diakhiri terminus vertex. Dan setiap 2 edge berurutan adalah series. Contoh, W =

A1B3C4B1A2.

f. Cycle

Adalah Siklus ( Cycle ) atau Sirkuit ( Circuit ) Lintasan yang berawal dan berakhir pada simpul yang sama3. Representasi Graf

Dalam pemrograman, agar data yang ada dalam graph dapat diolah, maka graph harus dinyatakan dalam suatu struktur data yang

dapat mewakili graph tersebut. Dalam hal ini graph perlu direpresentasikan kedalam bentuk array dan dimensi yang sering

disebut matrix atau direpresentasikan dalam bentuk linked list. Bentuk mana yang dipilih biasanya tergantung kepada efisiensi

dan kemudahan dalam membuat program. Berikut ini beberapa bentuk representasi graph:

1. Representasi Graph dalam bentuk Matrix:

1. Adjacency Matrik Graf Tak Berarah

Page 6: Struktur Data Non Linear Dan Linear

Matrik yang digambarkan pada gambar 1b merupakan representasi dalam bentuk Adjacency Matrik dari graf yang digambarkan pada gambar 1a. Beberapa hal yang dapat dilihat atau dapat diterangkan pada Adjacency Matrik tersebut adalah sebagai berikut :

1. Matrik yang terbentuk adalah matrik bujur sangkar n x n, dimana n = jumlah simpul yang ada dalam graf tersebut. Matrik ini menyatakan hubungan antara simpul satu dengan simpul lainnya.

2. Matrik yang terbentuk adalah matrik simetris dengan sumbu simetris adalah diagonal dari titik kiri atas ke titik kanan bawah.

3. Data yang tedapat baik dalam baris maupun kolom, dapat menyatakan degree sebuah simpul. Contoh : baik pada baris D maupun kolom D jumlah angka 1 nya adalah 3 buah, dimana jumlah ini menyatakan degree simpul D.2. Adjacency Matrik Graf BerarahMatrik yang digambarkan pada gambar 2b merupakan representasi dalam bentuk Adjacency Matrik dari graf yang digambarkan pada gambar 2a. Beberapa hal yang dapat dilihat atau dapat diterangkan pada Adjacency Matrik tersebut adalah sebagai berikut :

1. Matrik yang terbentuk adalah matrik bujur sangkar n x n, dimana n = jumlah simpul yang ada dalam graf tersebut. Matrik ini menyatakan hubungan antara simpul satu dengan simpul lainnya.

2. Matrik yang terbentuk mungkin simetris mungkin juga tidak simetris. MenjadiSimetris bila hubungan antara dua buah simpul (v1 dan v2) terdapat busur dariv1 ke v2 dan juga sebaliknya.

3. Hal pokok yang dinyatakan oleh matrik ini adalah : busur yang ’keluar’ dari suatu simpul. Dengan demikian, data yang terdapat dalam suatu baris, dapat menyatakan outdegree simpul yang bersangkutan.

Contoh : Jumlah elemen yang nilainya = 1 pada baris B ada 3 elemen,ini menyatakan jumlah outdegree simpul B adalah 3 buah.

4. Data yang terdapat dalam suatu kolom, dapat menyatakan indegree simpul bersangkutan.Contoh : Jumlah elemen yang nilainya 1 pada kolom B ada 2 elemen, ini menyatakan indegree

simpul B adalah 2 buah.3. Adjacency Matrik Graf Berbobot Tak BerarahNilai yang ada dalam tiap elemen matrik, menyatakan bobot busur yang menghubungkan dua buah simpul yang bersangkutan. Untuk dua buah simpul yang tidak berhubungan langsung oleh sebuah busur, maka dianggap dihubungkan oleh sebuah busur yang nilai bobotnya tidak terhingga. Dalam pemograman, karena keperluan algoritma, maka dari total bobot seluruh busur yang ada atau yang mungkin ada.Contoh: pada gambar 3a simpul A dan C tidak berhubungan langsung melalui sebuah busur, maka untuk elemen matrik yang bersangkutan diisi dengan nilai 999 karena nilai 999 dalam kasus ini cukup mewakili nilai tidak terhingga.

struktur data linear adalah kumpulan komponen-komponen yang tersusun membentuk satu garis linear. Bila komponen-komponen ditambahkan (atau dikurangi), maka struktur-struktur tersebut berkembang (atau menyusut).Contohnya :

a) Double linked list Circular .Double Linked List Circular adalah linked list dengan menggunakan pointer, dimana setiap node memiliki 3 field,yaitu 1 field pointer yang menunjuk pointer berikutnya(next), 1 field menunjuk pointer sebelumnya (prev), sertasebuah field yang berisi data untuk node tersebut.

b) Double Linked List Non Circular ( DLLNC )

Page 7: Struktur Data Non Linear Dan Linear

DLLNC "Double linked list non circular" adalah Double Linked Listyang memiliki 2 buah pointer yaitu pointer next dan prev.Pointer next menunjuk pada node setelahnya dan pointer prev menunjuk pada node sebelumnya.

Pengertian: Double : artinya field pointer-nya dua buah dan dua arah, ke node sebelum dan sesudahnya.Linked List : artinya node-node tersebut saling terhubung satu sama lain.Non Circular : artinya pointer prev dan next-nya akan menunjuk padaNULL.Setiap node pada linked list mempunyai field yang berisi data dan pointer ke node berikutnya & ke node sebelumnyaUntuk pembentukan node baru , mulanya pointer next dan prev akan menunjuk ke nilai NULLSelanjutnya pointer prev akan menunjuk ke node sebelumnya , dan pointer next akan menunjuk ke node selanjutnya pada list. 

Deklarasi dan node baru DLLNC

Deklarasi node Dibuat dari struct berikut ini :typedef struct TNode {int data ;TNode *next ;Tnode * prev ; }; 

Pembentukan node baru Digunakan keyword new yang berarti mempersiapkan sebuah node baru berserta alokasi memorinya . TNode * baru ; baru = new TNode ; baru ->data = databaru ; baru ->next = NULL; baru -> prev = NULL;

Contohnya:#include "stdio.h"

#include "stdlib.h"

#include "conio.h"

struct node{

struct node *previous;

int info;

struct node *next;

};

typedef struct node *simpul;

void main()

{

simpul baru, awal=NULL, akhir=NULL, temp;

Page 8: Struktur Data Non Linear Dan Linear

int pilih;

do

{

cout("MENU\n");

cout("1. Isi depan\n");

cout("2. tampil\n");

cout("3. cari\n");

cout("4. hapus Depan\n");

cout("PILIH: ");

scanf("%d", &pilih);

switch(pilih)

{

case 1:

int data;

cout("Data Masuk: ");

scanf("%i", &data);

baru = (simpul) malloc(sizeof (struct node));

baru->info = data;

baru->next = NULL;

baru->previous = NULL;

if (awal == NULL)

{

awal = baru;

akhir = baru;

}

else

{

baru->next = awal;

awal->previous = baru;

awal = baru;

}

break;

case 2:

clrscr();

cout("Dari AWAL\n");

temp = awal;

while(temp!=NULL)

{

cout("%i ", temp->info);

temp = temp->next;

}

cout("\nDari AKHIR\n");

temp = akhir;

while(temp!=NULL)

{

cout("%i ", temp->info);

temp = temp->previous;

}

Page 9: Struktur Data Non Linear Dan Linear

cout("\n");

break;

case 3:

clrscr();

int cari;

cout("Cari Angka: ");

scanf("%i", &cari);

temp = awal;

while((temp!=NULL)&&(temp->info!=cari))

{

temp = temp->next;

}

if(temp != NULL && temp->info == cari)

cout("Data Ditemukan");

else

cout("Data Tidak Ditemukan");

cout("\n");

break;

case 4:

clrscr();

temp = awal;

awal = awal->next;

if (awal != NULL)

awal->previous = NULL;

if (awal == NULL)

akhir = NULL;

free(temp);

break;

}

}while (pilih!=5);

}

C) Singly Linked List Circular

Hampir sama dengan singly linked list non circular, bahwa dibutuhkan sebuah kait untuk menghubungkan node-

node data yang ada, dimana pada node terakhir atau tail yang semula menunjukkan NULL diganti dengan menunjuk

ke kepala atau head.

Dimana inisialisasi senarai berkait tunggal sirkular menggunakan struc adalah sebagai

berikut:

                                    Deklarasi Singly Linked List Circular

Struct tnode

{

int data;

tnode *next;

};

Page 10: Struktur Data Non Linear Dan Linear

void main()

{

head = new tnode;

                                                      head->next = head;

                                                      }

Menambah node dan membuat tail dari singly linked list circular

                                         Deklarasi penambahan node baru

Void main()

{

node = new tnode;

tail = new tnode;

node->next = head->next;

head->next = node;

tail = node;

                                            Menyisipkan Node baru :

       Deklarasi menyisipkan node baru menggunakan sintak berikut:

Void main()

{

node = new tnode;

node->next = head->next;

head->next = node;

}

                 Menghapus Node dari Singly Linked List Circular :

       Deklarasi menghapus node dari singly linked list circular, menggunakan sintaks berikut :

Void main()

{

     hapus = new tnode;

if( head != tail)

{

     hapus = head;

     head = head->next;

     tail->next = head;

Page 11: Struktur Data Non Linear Dan Linear

     delete hapus;

}else

{

    head = NULL;

    tail = NULL;

   }

       }

Sumber : Antonius Rachmat C. Handout Struktur Data. Prodi Teknik Informatika

               Universitas Kristen Duta Wacana.

               Abdul Kadir. 1991. Pemrograman Dasar Turbo C untuk IBM PC. Yogyakarta:

               Penerbit Andi.

Contohnya:

#include <iostream.h>#include <conio.h>#include <stdio.h>#include <alloc.h>

int pil;void pilih();void buat_baru();void tambah_belakang();void tambah_depan();void hapus_belakang();void hapus_depan();void tampil();

struct simpul{    char nim[8], nama [20];    int umur;    struct simpul *next;} mhs, *baru, *awal=NULL, *akhir=NULL,*hapus,*bantu;

int main(){    do    {        clrscr();        cout<<"MENU SINGLE LINKEDLIST"<<endl;        cout<<"1. Tambah Depan"<<endl;        cout<<"2. Tambah Belakang"<<endl;        cout<<"3. Hapus Depan"<<endl;

Page 12: Struktur Data Non Linear Dan Linear

        cout<<"4. Hapus Belakang"<<endl;        cout<<"5. Tampilkan"<<endl;        cout<<"6. Selesai"<<endl;        cout<<"Pilihan Anda : ";        cin>>pil;        pilih();    } while(pil!=6);    return 0;}

void pilih(){    if(pil==1)        tambah_depan();    else if(pil==2)        tambah_belakang();    else if(pil==3)        hapus_depan();     else if(pil==4)        hapus_belakang();      else if(pil==5)        tampil();    else        cout<<"selesai";}

void buat_baru(){    baru=(simpul*)malloc(sizeof(struct simpul));    cout<<"input nim   : ";cin>>baru->nim;    cout<<"input nama  : ";cin>>baru->nama;    cout<<"input umur  : ";cin>>baru->umur;    baru->next=NULL;}

void tambah_belakang(){    buat_baru();    if(awal==NULL)    {        awal=baru;    }    else    {        akhir->next=baru;    }    akhir=baru;    akhir->next=NULL;    cout<<endl<<endl;

Page 13: Struktur Data Non Linear Dan Linear

    tampil();}

void tambah_depan(){    buat_baru();    if(awal==NULL)    {        awal=baru;        akhir=baru;        akhir->next=NULL;    }    else    {        baru->next=awal;        awal=baru;    }    cout<<endl<<endl;    tampil();}

void hapus_depan(){    if (awal==NULL)        cout<<"Kosong";    else    {        hapus=awal;        awal=awal->next;        free(hapus);    }   cout<<endl<<endl;    tampil();}

void hapus_belakang(){    if (awal==NULL)        cout<<"Kosong";    else if(awal==akhir)    {         hapus=awal;         awal=awal->next;         free(hapus);    }    else    {        hapus=awal;        while(hapus->next!=akhir)

Page 14: Struktur Data Non Linear Dan Linear

             hapus=hapus->next;        akhir=hapus;        hapus=akhir->next;        akhir->next=NULL;        free(hapus);    }    cout<<endl<<endl;    tampil();}

void tampil(){     if (awal==NULL)          cout<<"Kosong";     else     {         bantu=awal;         while(bantu!=NULL)         {            cout<<"nim : "<<bantu->nim;            cout<<"  nama : "<<bantu->nama;            cout<<"  umur : "<<bantu->umur<<endl;            bantu=bantu->next;         }     }     getch();} 

D) •         Single : artinya field pointer-nya hanya satu buah saja dan satu arah serta pada akhir node, pointernya menunjuk NULLLinked List : artinya node-node tersebut saling terhubung satu sama lain

contoh: #include <iostream.h>#include <conio.h>#include <stdio.h>#include <alloc.h>

int pil;void pilih();void buat_baru();void tambah_belakang();void tambah_depan();void hapus_belakang();void hapus_depan();void tampil();

struct simpul{

Page 15: Struktur Data Non Linear Dan Linear

    char nim[8], nama [20];    int umur;    struct simpul *next;} mhs, *baru, *awal=NULL, *akhir=NULL,*hapus,*bantu;

int main(){    do    {        clrscr();        cout<<"MENU SINGLE LINKEDLIST"<<endl;        cout<<"1. Tambah Depan"<<endl;        cout<<"2. Tambah Belakang"<<endl;        cout<<"3. Hapus Depan"<<endl;        cout<<"4. Hapus Belakang"<<endl;        cout<<"5. Tampilkan"<<endl;        cout<<"6. Selesai"<<endl;        cout<<"Pilihan Anda : ";        cin>>pil;        pilih();    } while(pil!=6);    return 0;}

void pilih(){    if(pil==1)        tambah_depan();    else if(pil==2)        tambah_belakang();    else if(pil==3)        hapus_depan();     else if(pil==4)        hapus_belakang();      else if(pil==5)        tampil();    else        cout<<"selesai";}

void buat_baru(){    baru=(simpul*)malloc(sizeof(struct simpul));    cout<<"input nim   : ";cin>>baru->nim;    cout<<"input nama  : ";cin>>baru->nama;    cout<<"input umur  : ";cin>>baru->umur;    baru->next=NULL;

Page 16: Struktur Data Non Linear Dan Linear

}

void tambah_belakang(){    buat_baru();    if(awal==NULL)    {        awal=baru;    }    else    {        akhir->next=baru;    }    akhir=baru;    akhir->next=NULL;    cout<<endl<<endl;    tampil();}

void tambah_depan(){    buat_baru();    if(awal==NULL)    {        awal=baru;        akhir=baru;        akhir->next=NULL;    }    else    {        baru->next=awal;        awal=baru;    }    cout<<endl<<endl;    tampil();}

void hapus_depan(){    if (awal==NULL)        cout<<"Kosong";    else    {        hapus=awal;        awal=awal->next;        free(hapus);    }   cout<<endl<<endl;

Page 17: Struktur Data Non Linear Dan Linear

    tampil();}

void hapus_belakang(){    if (awal==NULL)        cout<<"Kosong";    else if(awal==akhir)    {         hapus=awal;         awal=awal->next;         free(hapus);    }    else    {        hapus=awal;        while(hapus->next!=akhir)             hapus=hapus->next;        akhir=hapus;        hapus=akhir->next;        akhir->next=NULL;        free(hapus);    }    cout<<endl<<endl;    tampil();}

void tampil(){     if (awal==NULL)          cout<<"Kosong";     else     {         bantu=awal;         while(bantu!=NULL)         {            cout<<"nim : "<<bantu->nim;            cout<<"  nama : "<<bantu->nama;            cout<<"  umur : "<<bantu->umur<<endl;            bantu=bantu->next;         }     }     getch();}