’modul struktur data lengkap

Upload: kurniasyukurjzalukhu

Post on 05-Jul-2018

238 views

Category:

Documents


0 download

TRANSCRIPT

  • 8/16/2019 ’Modul Struktur Data Lengkap

    1/69

    MODUL PRAKTIKUMSTRUKTUR DATA

    Disusun Oleh

    Achmad Yani, S.T., M.Kom.

    PROGRAM STUDI MANAJEMEN INFORMATIKAPOLITEKNIK NEGERI MEDAN

    2008

  • 8/16/2019 ’Modul Struktur Data Lengkap

    2/69

    ii

    KATA PENGANTAR

    Segala puji dan syukur bagi Allah SWT, karena dengan rahmat dan karunia-

    Nya, penulisan Modul Laboratoium Struktur Data ini dapat dirampungkan.

    Modul laboratorium yang digunakan sebagai panduan praktikum untuk mata

    kuliah Struktur Data pada Program Studi Manajemen Informatika Politeknik Negeri

    Medan ini disusun dengan materi yang sesuai dengan mata kuliah teori. Materi dalam

    modul ini dibagi atas 10 buah modul untuk diselesaikan dalam 18 kali pertemuan di

    laboratorium.

    Dalam proses penulisan dan penyusunan modul ini, penyusun menyadari

    adanya kekurangan yang tidak mungkin dapat dihindari. Atas dasar kekurangan pada

    modul ini, penyusun mengharapkan kritik dan saran yang bersifat membangun dari para pembaca agar modul ini dapat disempurnakan.

    Dalam penyelesaian tulisan ini penulis mengucapkan banyak terima kasih

    kepada

    1. Bapak Ir. Zulkifli Lubis, M.I.Komp., selaku Direktur Politeknik Negeri Medan,

    2. Ibu Roslina, M.I.T., selaku Ketua Program Studi Manajemen Informatika, dan

    3. Semua pihak yang telah memberikan andil dalam penyelesaian penelitian ini.

    Akhirnya penulis berharap semoga penelitian ini dapat memberikan manfaatkepada sivitas akademika Politeknik Negeri Medan khususnya dan kepada para

    pembaca umumnya.

    Medan, Desember 2008

    Penyusun,

    Achmad Yani, S.T., M.Kom.

  • 8/16/2019 ’Modul Struktur Data Lengkap

    3/69

    iii

    DAFTAR ISI

    KATA PENGANTAR ……………………………………………………. ii

    DAFTAR ISI ……………………………………………………………… iii

    MODUL 1 Searching pada Array ………………………………. 1

    MODUL 2 Sorting pada Array ………………………………….. 9

    MODUL 3 Stack dengan Array …………………………………. 15

    MODUL 4 Queue dengan Array ………………………………... 19

    MODUL 5 Single Linked-List Non-Circular …………………... 24

    MODUL 6 Single Linked-List Circular ………………………… 35

    MODUL 7 Double Linked-List Non-Circular …………………. 45

    MODUL 8 Double Linked-List Circular ……………………….. 52

    MODUL 9 Stack dengan Linked List …………………………... 59

    MODUL 10 Queue dengan Linked List ………………………….. 63

    REFERENSI ......................................................................................... 66

  • 8/16/2019 ’Modul Struktur Data Lengkap

    4/69

    Modul Praktikum Struktur Data

    Prodi Manajemen Informatika - Polmed 1

    MODUL 1

    Pertemuan : I dan IIJudul Modul : Searching pada ArrayTujuan :

    Memahami beberapa metode searching pada array Dapat membuat program aplikasi searching pada array

    DASAR TEORI

    Pengertian Searching

    Pada suatu data seringkali dibutuhkan pembacaan kembali informasi(information retrieval ) dengan cara searching (pencarian).

    Searching adalah pencarian data dengan menelusuri tempat pencarian datatersebut.

    Tempat pencarian data tersebut dapat berupa array dalam memori, bisa juga pada file di dalam external storage (disk).

    Beberapa metode searching pada array: Sequential Search Binary Search Interpolation Search

    1. Sequenti al Search Sequential search adalah suatu teknik pencarian data dalam array (1 dimensi)

    yang akan menelusuri semua elemen-elemen array dari awal sampai akhiruntuk array yang belum terurut.

    Kemungkinan terbaik ( best case ) adalah jika data yang dicari terletak di indeksarray terdepan (elemen array pertama) sehingga waktu yang dibutuhkan untuk

    pencarian data sangat singkat (minimal). Kemungkinan terburuk ( worst case ) adalah jika data yang dicari terletak di

    indeks array terakhir (elemen array terakhir) sehingga waktu yang dibutuhkanuntuk pencarian data sangat lama (maksimal).

    Misalnya terdapat array satu dimensi sebagai berikut:

    0 1 2 3 4 5 6 7 Indeks

    8 10 6 -2 11 7 1 100 Nilai

    Kemudian program akan meminta data yang akan dicari, misalnya 1000. Jika ada,maka a kan ditampilkan tulisan “ADA”, sedangkan jika tidak ada maka akanditampilkan tulisan “TIDAK ADA”.

    #include #include

    void main(){clrscr();

  • 8/16/2019 ’Modul Struktur Data Lengkap

    5/69

    Modul Praktikum Struktur Data

    Prodi Manajemen Informatika - Polmed 2

    int data[8] = {8,10,6,-2,11,7,1,100};int cari;int flag=0;

    printf("masukkan data yang ingin dicari = ");scanf("%d",&cari);for(int i=0;i

  • 8/16/2019 ’Modul Struktur Data Lengkap

    6/69

    Modul Praktikum Struktur Data

    Prodi Manajemen Informatika - Polmed 3

    int data[7] = {3,12,9,-4,21,6};int cari,i;

    printf("masukkan data yang ingin dicari = ");scanf("%d",&cari); data[6] = cari;i=0;

    while(data[i] != cari) i++;

    if(i 15 (data tengah), maka: awal = tengah + 1

    0 1 2 3 4 5 6 7 8

    3 9 11 12 15 17 23 31 35A B C

    Karena 17 < 23 (data tengah), maka: akhir = tengah – 1

    0 1 2 3 4 5 6 7 83 9 11 12 15 17 23 31 35

    A=B=C

    Karena 17 = 17 (data tengah), maka KETEMU!

  • 8/16/2019 ’Modul Struktur Data Lengkap

    7/69

  • 8/16/2019 ’Modul Struktur Data Lengkap

    8/69

    Modul Praktikum Struktur Data

    Prodi Manajemen Informatika - Polmed 5

    Low = 3 + 1 = 4High = 7Ternyata Kunci[4] adalah 063 yang lebih besar daripada 060 .Berarti tidak ada kunci 060.

    Programnya:

    int interpolationsearch(int key,int n){int low,high,pos,i;low=0;high=n-1;do{

    pos = (key – data[low]) * (high – low) / data[high] – data[low] + low;if (data[pos] == key]

    return pos;if (data[pos] > key)

    high = pos-1;else

    if (data[pos] < key)low = pos + 1;

    } while(key >= data[low] && key

  • 8/16/2019 ’Modul Struktur Data Lengkap

    9/69

    Modul Praktikum Struktur Data

    Prodi Manajemen Informatika - Polmed 6

    { printf("Data %d yang dicari ada %d buah\n",k,j); printf("Data tersebut terdapat dalam index ke :");

    for(i=0;i

  • 8/16/2019 ’Modul Struktur Data Lengkap

    10/69

    Modul Praktikum Struktur Data

    Prodi Manajemen Informatika - Polmed 7

    else{

    top=middle-1;}

    }if (tm>0)

    { printf("Data %d yang dicari ada dalam array\n",k);}//jika tidak ditemukanelse{

    printf("Data tidak ditemukan dalam array\n");}

    }

    3. Program 3 ( Interpolation Search )

    #includevoid main(){

    //deklarasi variableint A[10], i,j,k,tkr,low,high,pos,tm;//proses penginputan datafor(i=0;i

  • 8/16/2019 ’Modul Struktur Data Lengkap

    11/69

    Modul Praktikum Struktur Data

    Prodi Manajemen Informatika - Polmed 8

    if (A[pos] < k)low = pos + 1;

    } while(k >= A[low] && k 0){

    printf("data %d yang dicari ada dalam array\n",k);}//jika tidak ditemukanelse{

    printf("data tidak ditemukan dalam array\n");}

    }

    LATIHAN

    1.

    Buat program lengkap untuk menggabungkan ketiga metode searching denganmenggunakan menu. Buat dalam bentuk fungsi. Menu-menunya adalah sebagai berikut:

    a. Masukkan data b. Cari datac. Edit datad. Tampilkan data

    2. Buat array rekening bank dengan ketentuan :a. Setiap elemen array bertipe struktur:

    (int no_rek, char nama[25], long saldo) b. Buatlah fungsi-fungsi sebagai berikut :

    - Add- Edit- Cari (Sequential)- Setor- Ambil- Transfer- Tutup Rekening (Delete)

  • 8/16/2019 ’Modul Struktur Data Lengkap

    12/69

    Modul Praktikum Struktur Data

    Prodi Manajemen Informatika - Polmed 9

    MODUL 2

    Pertemuan : III dan IVJudul Modul : Sorting pada ArrayTujuan :

    Memahami beberapa metode sorting pada array Dapat membuat program aplikasi sorting pada array

    DASAR TEORI

    Sorting (pengurutan) adalah proses menyusun kembali data yang sebelumnya telahdisusun dengan suatu pola tertentu ataupun secara acak, sehingga menjadi tersusunsecara teratur menurut aturan tertentu.

    Pada umumnya ada 2 macam pengurutan, yaitu: Pengurutan secara ascending (urut naik). Pengurutan secara descending (urut turun).

    Ada beberapa metode sorting pada array. Dalam praktikum ini akan dibahas lima diantara metode-metode sorting yang ada, yaitu

    Bubble sort Selection sort Insertion sort

    Quick sort Merge sort

    Algoritma-algoritma ini mempunyai efek yang berbeda dalam setiap prosesnya, adayang mudah digunakan, ada yang mempunyai proses yang sangat cepat, dansebagainya.

    Hal yang umum dilakukan dalam proses sorting adalah proses pertukaran antara 2elemen atau lebih (analogi memindah air dalam gelas). Untuk melakukan proses

    pertukaran akan diperlukan adanya variable baru yang digunakan sebagai variable

    penampung.//fungsi penukar datavoid tukar (int a[], int i, int j) {int tampung = a[i];a[i] = a[j];a[j] = tampung;}

    1. Bubble Sort Bubble sort merupakan metode sorting paling mudah, namun paling lambat

    dibandingkan dengan metode yang lain.

  • 8/16/2019 ’Modul Struktur Data Lengkap

    13/69

    Modul Praktikum Struktur Data

    Prodi Manajemen Informatika - Polmed 10

    Bubble sort mengurutkan data dengan cara membandingkan elemen sekarangdengan elemen berikutnya.

    Bisa dilakukan baik dari kepala array maupun ekor array. Proses yang berlangsung:

    Untuk ascending : jika elemen sekarang lebih besar daripada elemen berikutnya, maka kedua elemen tersebut ditukar.

    Untuk descending : jika elemen sekarang lebih kecil daripada elemen berikutnya, maka kedua elemen tersebut ditukar.

    Contoh fungsi bubble sort://Bubble Sortvoid bubble (int a[], int n) {int i,j;for (i=n;i>=1;i--) {

    for (j=2;ja[j])tukar (a,j-1,j);}

    }

    2. Exchange Sort Mirip dengan bubble sort. Perbedaannya: dalam exchange sort ada elemen yang berfungsi sebagai pusat

    (pivot), pertukaran hanya akan dilakukan jika diperlukan saja dari pivottersebut.

    Contoh fungsi exchange sort:

    //Exchange Sortvoid exchange (int a[], int n) {int i,j;for (i=0;i

  • 8/16/2019 ’Modul Struktur Data Lengkap

    14/69

    Modul Praktikum Struktur Data

    Prodi Manajemen Informatika - Polmed 11

    int i,j,pos;for (i=1;i

  • 8/16/2019 ’Modul Struktur Data Lengkap

    15/69

    Modul Praktikum Struktur Data

    Prodi Manajemen Informatika - Polmed 12

    Langkah:

    o

    Memilih sebuah elemen pembanding (pivot), misal x.o Semua elemen dari deret tersebut yang kurang dari x diletakkan pada bagian pertama.

    o Kemudian semua elemen dari yang lebih besar dari x diletakkan pada bagian kedua.

    o Untuk elemen yang sama dengan x bisa diletakkan di mana saja bahkan bisa juga di antara kedua bagian tersebut.

    Algoritma partisi:

    Masukan : array A[n] dengan n elemenKeluaran : permutasi dari array sedemikian sehingga smua elemen A[0], …,

    A[j] kurang dari atau sama dengan semua elemen A[i], …,A[n-1] (i > j)

    Metode : pilih elemen di pertengahan array sebagai elemen pembanding x

    Buat i = 0 dan j = n-1

    Selama i j

    Cari elemen pertama A[i] yang lebih besar atau sama dengan x

    Cari elemen terakhir A[j] yang lebih kecil atau sama dengan x

    Jika i j

    Tukarkan A[i] dan A[j]

    Buat i = i+1 dan j = j-1o Setelah mempartisi, prosedur sorting akan dilakukan secara rekursif.

    Hingga proses rekursif tersebut akan berhenti saat sebuah bagian hanyatinggal terdapat satu elemen saja.

    o Tidak baik digunakan jika elemen-elemen yang akan diurutkan hanya adasedikit atau sudah hamper terurut, karena jika menggunakan metode ini

    justru akan melakukan perulangan yang tidak berguna dan lama.o Mempunyai algoritma dan program yang cukup kompleks.o Contoh fungsi quick sort:

    //Quick Sortvoid quicksort (int a[],int l,int r) {

  • 8/16/2019 ’Modul Struktur Data Lengkap

    16/69

    Modul Praktikum Struktur Data

    Prodi Manajemen Informatika - Polmed 13

    int i,j,v;if(r>1) {v=a[r];i=l-1;j=r;

    for(;;) { while(a[++i]v);

    if(i>=j) break;tukar(a,i,j)}

    tukar(a,i,r);quicksort(a,l,i-1);quicksort(a,i+1,r);}

    }

    PERCOBAAN 1. Tuliskan program untuk mengurutkan barisan karakter dengan menggunakan

    bubble sort berikut ini, kemudian lihat hasilnya dan beri penjelasan// Program untuk mengurutkan barisan karakter // menggunakan bubble sort #include #include using namespace std;

    void Urutkan(char* str) {

    unsigned int n = strlen(str); unsigned int i, j;

    for (i = 1; i < n; i++)

    for (j = n-1; j >= i; j--) if (str[j] < str[j-1]) {

    char temp = str[j]; str[j] = str[j-1]; str[j-1] = temp;

    }; };

    int main() {

    char BarisanKarakter[1024]; // Input barisan karakter

    cout > BarisanKarakter; // Urutkan Urutkan(& BarisanKarakter[0]); // Tampilkan hasilnya cout

  • 8/16/2019 ’Modul Struktur Data Lengkap

    17/69

    Modul Praktikum Struktur Data

    Prodi Manajemen Informatika - Polmed 14

    LATIHAN

    1. Buatlah program lengkap yang dapat menampilkan semua hasil sorting dalamlima metode sorting yang dijelaskan di depan dengan menggunakan menu.

    2. Dari program tersebut tambahkanlah bagian program yang dapat menampilkan proses sorting yang sebenarnya terjadi (tidak hanya hasil akhirnya saja).

    3. Buat program yang membaca masukan berupa stringQWERTYUIOPASDFGHJKLZXCVBNM . Kemudian program melakukan prosessorting sehingga menjadi string ABCDEFGHIJKLMNOPQRSTUVWXYZ.

    4. Buat program dengan masukan NIM , nama , dan umur untuk 10 mahasiswa,kemudian lakukan sorting terhadap masukan berdasarkan NIM.

  • 8/16/2019 ’Modul Struktur Data Lengkap

    18/69

    Modul Praktikum Struktur Data

    Prodi Manajemen Informatika - Polmed 15

    MODUL 3

    Pertemuan : V dan VIJudul Modul : Stack dengan ArrayTujuan :

    Memahami pengertian stack Dapat mengimplementasikan stack dengan menggunakan array

    DASAR TEORI

    Stack atau tumpukan adalah suatu struktur data yang seolah-olah terlihat seperti datayang tersusun secara „menumpuk‟; dalam hal ini, ada data yang terletak di atas datayang lainnya. Penyimpanan data di dalam stack bersifat LIFO (Last In First Out),yang berarti bahwa data yang masuk terakhir akan keluar pertama.Beberapa operasi dasar pada Stack antara lain:

    IsFull() mengecek apakah stack sudah penuh IsEmpty() mengecek apakah stack sudah kosong Push() menambah data pada stack pada tumpukan paling atas Pop() mengambil data pada stack pada tumpukan paling atas Tampil() mencetak semua data dalam stack

    Dalam implementasinya, stack dapat disajikan dengan menggunakan struktur datastatis maupun dinamis. Implementasi dengan struktur data statis pada percobaan ini

    adalah dengan menggunakan array.

    Berikut ini adalah cara deklarasi stack dengan menggunakan array:typedef struct STACK{

    int top;char data[10][10]; //misalkan : data adalah array of string

    //berjumlah 10 data, masing-masing string//menampung maksimal 10 karakter

    };STACK tumpuk;

    Pada keadaan awal, stack diinisialisasi dengan fungsi inisialisasi() seperti berikut ini:void inisialisasi(){

    tumpuk.top = -1;}

    Elemen top dari stack diisi dengan nilai -1, karena array dalam C dimulai dari 0, yang berarti stack adalah kosong. Top adalah suatu variabel penanda dalam STACK yangmenunjukkan elemen teratas Stack sekarang. Top Of Stack akan selalu bergerakhingga mencapai MAX_STACK (di sini, MAX_STACK adalah ukuran maksimumstack) sehingga menyebabkan stack penuh.

  • 8/16/2019 ’Modul Struktur Data Lengkap

    19/69

    Modul Praktikum Struktur Data

    Prodi Manajemen Informatika - Polmed 16

    Untuk memeriksa apakah stack sudah penuh, digunakan fungsi IsFull():int IsFull(){

    if(tumpuk.top == MAX_STACK-1)return 1;else

    return 0;}

    Sementara itu, untuk memeriksa apakah stack kosong, dapat dibuat fungsi IsEmpty():int IsEmpty(){

    if(tumpuk.top == -1)return 1;

    elsereturn 0;

    } Adapun fungsi Push() dan Pop() masing-masing diimplementasikan sebagai berikut:

    void Push(char d[10]){tumpuk.top++;strcpy(tumpuk.data[tumpuk.top],d);

    }

    void Pop(){ printf("Data yang terambil = %s\n",tumpuk.data[tumpuk.top]);

    tumpuk.top--;}

    Untuk menampilkan seluruh data dari stack, maka digunakan perulangan. Karena bersifat LIFO, maka data yang pertama ditampilkan adalah yang berada pada elementeratas (yaitu yang terakhir sekali disimpan di stack). Fungsi untuk menampilkan inidapat dibuat sebagai berikut:

    void TampilStack(){for(int i=tumpuk.top;i>=0;i--){

    printf("Data : %s\n",tumpuk.data[i]);}

    }

  • 8/16/2019 ’Modul Struktur Data Lengkap

    20/69

    Modul Praktikum Struktur Data

    Prodi Manajemen Informatika - Polmed 17

    PERCOBAAN

    Berikut ini adalah contoh implementasi program menggunakan stack. Ketiklah program berikut ini, kemudian lihat hasilnya, dan beri penjelasannya.

    #include #include

    //deklarasi 'STACK' dengan struct dan arraystruct STACK{

    int data[5];int atas;

    };

    //deklarasi variabel 'tumpuk' dari structSTACK tumpuk;

    void main(){

    clrscr();int pilihan,baru,i;

    //inisialisasi awaltumpuk.atas=-1;do{

    clrscr(); printf("1.Push Data\n"); printf("2.Pop Data\n"); printf("3.Print Data\n"); printf("\nPilihan = ");

    scanf("%i",&pilihan);switch(pilihan){

    case 1:{if(tumpuk.atas==5-1){

    printf("Tumpukan penuh");getch();

    }else{

    printf("Data yang akan di-push = ");scanf("%d",&baru);tumpuk.atas++;tumpuk.data[tumpuk.atas]=baru;

    } break;

    }case 2:{

    if(tumpuk.atas==-1){

    printf("Tumpukan kosong");getch();

    }else{

    printf("Data yang akan di-pop = %d",tumpuk.data[tumpuk.atas]);

    tumpuk.atas--;getch();

    } break;}

  • 8/16/2019 ’Modul Struktur Data Lengkap

    21/69

    Modul Praktikum Struktur Data

    Prodi Manajemen Informatika - Polmed 18

    case 3:{

    if(tumpuk.atas==-1){

    printf("Tumpukan kosong");getch();

    }

    else{ printf("Data = ");

    for(i=0; i=1 && pilihan

  • 8/16/2019 ’Modul Struktur Data Lengkap

    22/69

    Modul Praktikum Struktur Data

    Prodi Manajemen Informatika - Polmed 19

    MODUL 4

    Pertemuan : VII dan VIIIJudul Modul : Queue dengan ArrayTujuan :

    Memahami pengertian queue Dapat mengimplementasikan queue dengan menggunakan array

    DASAR TEORI

    Secara harfiah, queue berarti antrian. Dalam suatu antrian, yang datang lebih dahuluakan dilayani dan akan keluar lebih dahulu. Karena itu, queue merupakan sebuahstruktur data yang bersifat FIFO (First In First Out), yaitu data yang pertama sekali

    disimpan (masuk ke antrian) akan merupakan data yang pertama sekali diambil(keluar dari antrian).Seperti halnya stack, struktur data queue juga dapat diimplementasikan denganmenggunakan array.

    Queue dapat dideklarasikan sebagai berikut:#define MAX 8typedef struct{

    int data[MAX];int head;int tail;

    } Queue;Queue antrian;

    Beberapa operasi dasar pada queue adalah sebagai berikut:1) Create()

    Untuk menciptakan dan menginisialisasi Queue

    Dengan cara membuat Head dan Tail = -1

    void Create (){antrian.head=antrian.tail=-1;

    }2) IsEmpty()

    Untuk memeriksa apakah Antrian sudah penuh atau belum Dengan cara memeriksa nilai Tail, jika Tail = -1 maka empty

  • 8/16/2019 ’Modul Struktur Data Lengkap

    23/69

    Modul Praktikum Struktur Data

    Prodi Manajemen Informatika - Polmed 20

    Head tidak diperiksa, karena Head adalah tanda untuk kepala antrian (elemen pertama dalam antrian) yang tidak akan berubah-ubah

    Pergerakan pada Antrian terjadi dengan penambahan elemen antrian ke belakang, yaitu menggunakan nilai Tail

    int IsEmpty (){if(antrian.tail==-1)

    return 1;else

    return 0;}

    3) IsFull() Untuk mengecek apakah Antrian sudah penuh atau belum Dengan cara mengecek nilai Tail, jika Tail >= MAX-1 (karena MAX-1 adalah

    batas elemen array pada C) berarti sudah penuh

    int IsFull (){if(antrian.tail==MAX-1) return 1;else return 0;

    } 4) EnQueue(data)

    Untuk menambahkan elemen ke dalam Antrian, penambahan elemen selaluditambahkan di elemen paling belakang

    Penambahan elemen selalu menggerakan variabel Tail dengan cara incrementcounter Tail

    void EnQueue (int data){if(IsEmpty()==1){

    antrian.head=antrian.tail=0;antrian.data[antrian.tail]=data;printf("%d masuk!",antrian.data[antrian.tail]);

    }else if(IsFull()==0){

    antrian.tail++;antrian.data[antrian.tail]=data;printf("%d masuk!",antrian.data[antrian.tail]);

    }}

    5) DeQueue() Digunakan untuk menghapus elemen terdepan/pertama dari Antrian

  • 8/16/2019 ’Modul Struktur Data Lengkap

    24/69

    Modul Praktikum Struktur Data

    Prodi Manajemen Informatika - Polmed 21

    Dengan cara mengurangi counter Tail dan menggeser semua elemen antriankedepan.

    Penggeseran dilakukan dengan menggunakan looping

    int DeQueue (){int i;int e = antrian.data[antrian.head];for(i=antrian.head;i

  • 8/16/2019 ’Modul Struktur Data Lengkap

    25/69

    Modul Praktikum Struktur Data

    Prodi Manajemen Informatika - Polmed 22

    PERCOBAAN

    Berikut ini adalah implementasi program menggunakan struktur data queue. Tuliskan program ini, kemudian lihat hasilnya dan beri penjelasan.

    #include#include

    void main(){

    int cek=0, data[20], x, hapus;char pil;do {

    clrscr(); printf("1. Tambah Antrian\n"); printf("2. Hapus Antrian\n"); printf("3. Lihat Antrian\n"); printf("4. Keluar\n");

    printf("Silahkan masukkan pilihan anda... "); pil=getche();

    if(pil!='1' && pil !='2' && pil !='3' && pil!='4' ) printf("\n\nAnda salah mengetikkan inputan...\n");

    else {if(pil=='1') //ENQUEUE

    {if(cek==20)

    printf("\nAntrian Penuh\n\n");else {

    printf("\nMasukkan nilai--> ");scanf("%i",&x);data[cek]=x;

    cek++;}}

    else{

    if(pil=='2') //DEQUEUE{

    if(cek==0) printf("\nAntrian kosong\n\n");

    else {hapus=data[0];for(int v=0;v

  • 8/16/2019 ’Modul Struktur Data Lengkap

    26/69

    Modul Praktikum Struktur Data

    Prodi Manajemen Informatika - Polmed 23

    printf("%i",data[z]); printf(" | ");

    }

    }getch();

    }}}

    }

    }while(pil!='4');}

    LATIHAN

    1. Modifikasi program pada Percobaan sehingga modul-modul program dibuat

    dalam bentuk fungsi, yaitu Create(), IsEmpty(), IsFull(), EnQueue(), DeQueue(),Clear(), dan Tampil().

    2. Tambahkanlah fungsi untuk mencari suatu elemen dalam queue3. Tambahkan fungsi untuk mengedit suatu elemen dalam queue4. Carilah nilai total, rata-rata, terbesar dan terkecil dari elemen-elemen queue dalam

    function tersendiri5. Buatlah program untuk simulasi antrian registrasi Polmed. Yang tercatat adalah

    nim mahasiswa.6. Kembangkan program tersebut sehingga bisa menyimpan keterangan nim, nama,

    dan prodi mahasiswa tersebut.

  • 8/16/2019 ’Modul Struktur Data Lengkap

    27/69

    Modul Praktikum Struktur Data

    Prodi Manajemen Informatika - Polmed 24

    MODUL 5

    Pertemuan : IX dan XJudul Modul : Single linked-list non-circlar Tujuan :

    Memahami pengertian single linked-list non-circlar Dapat mengimplementasikan single linked-list non-circular

    DASAR TEORI

    Linked list (senarai berkait) adalah sebuah struktur data berupa rangkaian elemensaling berkait dengan setiap elemen dihubungkan dengan elemen lain melalui pointer.Penggunaan pointer untuk mengacu elemen berakibat elemen-elemen bersebelahan

    secara logika walaupun tidak bersebelahan secara fisik di memori. Masing-masingdata dalam linked list disebut node (simpul).

    Setiap simpul dalam linked list terdiri dai dua bagian, yaitu bagian data bagian pointer yang menunjuk ke simpul lain.

    Ditinjau dari banyaknya pointer dalam setiap simpul, maka linked list dapatdibedakan atas dua jenis, yaitu

    single linked-list , memiliki sebuah pointer yang menunjuk ke simpul berikutnya, dan

    double linked-list , memiliki dua buah pointer yang masing-masing menunjukke simpul sebelumnya dan simpul berikutnya.

    Selanjutnya, single linked-list masih dapat dibedakan atas non-circular (tidakmelingkar) dan circular (melingkar). Single linked-list non-circular adalah singlelinked list yang pointer pada elemen terakhirnya tidak menunjuk ke manapun.Sementara itu, pada single linked-list circular, pointer pada elemen terakhirnyamenunjuk ke elemen pertama sehingga membentuk cincin (melingkar).

    Sebuah single linked list non-circular dapat diilustrasikan seperti berikut:

    Pembuatan Single Linked ListDeklarasi node untuk single linked list dibuat dengan menggunakan struct seperti

    berikut:typedef struct TNode{int data;TNode *next;};

    Pembentukan node baru

    -

    Menggunakan keyword new yang berarti mempersiapkan sebuah node baru berserta alokasi memorinya

  • 8/16/2019 ’Modul Struktur Data Lengkap

    28/69

    Modul Praktikum Struktur Data

    Prodi Manajemen Informatika - Polmed 25

    - Kemudian node tersebut diisi data, dan pointer nextnya menunjuk ke NULL.TNode *baru;baru = new TNode;baru->data = databaru;baru->next = NULL;

    Single Linked List Menggunakan Head- Membutuhkan satu buah variabel pointer: head- Head akan selalu menunjuk pada node pertama

    Deklarasi Pointer Penunjuk Kepala Single Linked ListManipulasi linked list tidak bisa dilakukan langsung ke node yang dituju, melainkanharus menggunakan suatu pointer penunjuk ke node pertama dalam linked list (dalamhal ini adalah head). Deklarasinya sebagai berikut:

    TNode *head;

    Fungsi Inisialisasi Single LinkedListvoid init(){head = NULL;}

    Fungsi untuk mengetahui kosong tidaknya Single LinkedListint isEmpty(){if(head == NULL) return 1;else return 0;}

    Penambahan Data Penambahan data di depanPenambahan node baru akan dikaitkan di node paling depan, namun pada saat

    pertama kali (data masih kosong), maka penambahan data dilakukan dengan cara headditunjukkan ke node baru tersebut. Pada prinsipnya adalah mengaitkan node barudengan head, kemudian head akan menunjuk pada data baru tersebut sehingga headakan tetap selalu menjadi data terdepan.

    void insertDepan(int databaru){

    TNode *baru;baru = new TNode;baru->data = databaru;baru->next = NULL;if(isEmpty()==1){

    head=baru;head->next = NULL;

    }else {

    baru->next = head;head = baru;

    }cout

  • 8/16/2019 ’Modul Struktur Data Lengkap

    29/69

    Modul Praktikum Struktur Data

    Prodi Manajemen Informatika - Polmed 26

    2. Masuk data baru, misalnya 5

    3. Datang data baru, misalnya 20 (penambahan di depan)

    Penambahan data di belakangPenambahan data dilakukan di belakang , namun pada saat pertama kali, nodelangsung ditunjuk oleh head. Penambahan di belakang lebih sulit karena kitamembutuhkan pointer bantu untuk mengetahui node terbelakang, kemudian setelahitu, dikaitkan dengan node baru. Untuk mengetahui data terbelakang perlu digunakan

    perulangan.

    void insertBelakang (int databaru){TNode *baru,*bantu;baru = new TNode;baru->data = databaru;baru->next = NULL;if(isEmpty()==1){

    head=baru;head->next = NULL;

    } else {

    bantu=head;while(bantu->next!=NULL){bantu=bantu->next;

    }bantu->next = baru;}cout

  • 8/16/2019 ’Modul Struktur Data Lengkap

    30/69

    Modul Praktikum Struktur Data

    Prodi Manajemen Informatika - Polmed 27

    4. Datang data baru, misal 25 (penambahan di belakang)

    Menampilkan DataFunction untuk menampilkan isi single linked list non circular

    void tampil(){TNode *bantu;bantu = head;if(isEmpty()==0){

    while(bantu!=NULL){cout

  • 8/16/2019 ’Modul Struktur Data Lengkap

    31/69

    Modul Praktikum Struktur Data

    Prodi Manajemen Informatika - Polmed 28

    else coutnext->next!=NULL){bantu = bantu->next;

    }hapus = bantu->next;d = hapus->data;bantu->next = NULL;delete hapus;

    }else {

    d = head->data;head = NULL;

    }cout

  • 8/16/2019 ’Modul Struktur Data Lengkap

    32/69

    Modul Praktikum Struktur Data

    Prodi Manajemen Informatika - Polmed 29

    TNode *bantu,*hapus;bantu = head;while(bantu!=NULL){

    hapus = bantu;bantu = bantu->next;delete hapus;

    }

    head = NULL;}

    Single Linked List Menggunakan Head Dan Tail- Membutuhkan dua buah variabel pointer: head dan tail- Head akan selalu menunjuk pada node pertama, sedangkan tail akan selalu

    menunjuk pada node terakhir.

    Inisialisasi LinkedListTNode *head, *tail;

    Fungsi Inisialisasi LinkedListvoid init(){head = NULL;tail = NULL;}

    Fungsi untuk mengetahui kosong tidaknya LinkedListint isEmpty(){

    if(tail == NULL) return 1;else return 0;

    }

    Penambahan DataPengaitan node baru ke linked list di depanPenambahan data baru di depan akan selalu menjadi head.

    void insertDepan(int databaru){TNode *baru;baru = new TNode;baru->data = databaru;baru->next = NULL; if(isEmpty()==1){

    head=tail=baru;tail->next=NULL;

    }else {

    baru->next = head;head = baru;

    }cout

  • 8/16/2019 ’Modul Struktur Data Lengkap

    33/69

    Modul Praktikum Struktur Data

    Prodi Manajemen Informatika - Polmed 30

    2. Masuk data baru, misalnya 5

    3. Datang data baru, misalnya 20

    Penambahan Data di belakangPada penambahan data di belakang, data akan selalu dikaitkan dengan tail, karena tailterletak di node paling belakang. Setelah dikaitkan dengan node baru, maka node barutersebut akan menjadi tail baru.

    void tambahBelakang(int databaru){TNode *baru,*bantu;baru = new TNode;baru->data = databaru;baru->next = NULL;if(isEmpty()==1){

    head=baru;tail=baru;tail->next = NULL;

    }else {

    tail->next = baru;tail=baru;

    }cout

  • 8/16/2019 ’Modul Struktur Data Lengkap

    34/69

    Modul Praktikum Struktur Data

    Prodi Manajemen Informatika - Polmed 31

    Kelebihan dari Single Linked List dengan Head & Tail adalah pada penambahan datadi belakang, hanya dibutuhkan tail yang mengikat node baru saja tanpa harusmenggunakan perulangan pointer bantu.

    Fungsi untuk menampilkan isi linked list:void tampil(){

    TNode *bantu;bantu = head;if(isEmpty()==0){

    while(bantu!=NULL){

    cout

  • 8/16/2019 ’Modul Struktur Data Lengkap

    35/69

    Modul Praktikum Struktur Data

    Prodi Manajemen Informatika - Polmed 32

    Penghapusan data di belakang:

    Dengan menggunakan Single Linked List ber-Head dan Tail, pengahapusan data di belakang akan mudah dilakukan, tidak seperti pada Single Linked List hanya ber-Head saja.

    void hapusBelakang(){TNode *bantu,*hapus;int d;if (isEmpty()==0){

    bantu = head;if(head!=tail){

    while(bantu->next!=tail){bantu = bantu->next;

    }hapus = tail;tail=bantu;d = hapus->data;delete hapus;tail->next = NULL;

    }else {

    d = tail->data;head=tail=NULL;

    }cout

  • 8/16/2019 ’Modul Struktur Data Lengkap

    36/69

    Modul Praktikum Struktur Data

    Prodi Manajemen Informatika - Polmed 33

    Penghapusan semua elemen LinkedListvoid clear(){

    TNode *bantu,*hapus;bantu = head;while(bantu!=NULL){

    hapus = bantu;bantu = bantu->next;delete hapus;

    }head = NULL;tail = NULL;

    }

    PERCOBAAN

    1. Buatlah program lengkap dengan menggunakan menu untuk single linked-listnon-circular yang menggunakan head dan memiliki fungsi-fungsi seperti yangtelah diberikan pada Dasar Teori:

    init() isEmpty() insertDepan() insertBelakang() hapusDepan() hapusBelakang() clear()

    2. Buatlah program seperti pada no. 1, tetapi menggunakan head dan tail .

    LATIHAN

    1. Buatlah sebuah linked-list non-circular yang berisi nim Anda dan nama lengkapAnda.

    2. Buat fungsi untuk menambahkan node single linked-list non-circular dengan tiap

    node mengandung informasi nim dan nama. Peletakan posisi node diurutkan berdasar nim secara ascending, jadi bisa tambah depan, belakang maupun tambah ditengah. Isikan data nim dan nama lengkap teman sebelah kiri dan kanan Anda.

    3. Buatlah fungsi untuk menampilkan data 3 buah node yang telah anda bentuksebelumnya. Contoh tampilan

    NIM Nama Lengkap22053766 Hernawan22053768 Andrew S22053791 Anthony S

    4. Buatlah fungsi untuk mencari nama yang telah diinputkan dengan menggunakan NIM. Contoh tampilan:

    Nim yang dicari: 22053768

  • 8/16/2019 ’Modul Struktur Data Lengkap

    37/69

    Modul Praktikum Struktur Data

    Prodi Manajemen Informatika - Polmed 34

    Nama yang bersangkutan adalah Andrew S5. Buatlah sebuah fungsi untuk menghapus nim yang diinputkan oleh user. Contoh

    tampilan: NIM yang mau dihapus: 2205376 NIM dengan nama Andrew S ditemukan dan telah dihapus

    6. Buatlah sebuah program dengan menggunakan single linked-list non-circular denganfungsi-fungsi berikut ini:

    menambah data(dari depan dan dari belakang) search data yang telah diinputkan menghapus data( dari depan dan dari belakang) mencetak data

    Buatlah dengan menggunakan menu.7. Dengan menggunakan soal no 6 tambahkan 4 fungsi berikut ini:

    menambah data (di tengah)

    menghapus data tertentu(berada di tengah) mengurutkan data acak secara acending mengurutkan data acak secara decending

  • 8/16/2019 ’Modul Struktur Data Lengkap

    38/69

    Modul Praktikum Struktur Data

    Prodi Manajemen Informatika - Polmed 35

    MODUL 6

    Pertemuan : XI dan XIIJudul Modul : Single linked-list circlar Tujuan :

    Memahami pengertian single linked-list circlar Dapat mengimplementasikan single linked-list circular

    DASAR TEORI

    Single linked-list circular adalah single linked-list yang pointer pada elemen (simpul)terakhirnya menunjuk ke elemen (simpul) pertama sehingga membentuk cincin(melingkar).

    Pembuatan Single Linked List CircularDeklarasi node

    typedef struct TNode{int data;TNode *next;

    };

    Pembentukan node baruTNode *baru;baru = new TNode;baru->data = databaru;baru->next = baru;

    Single Linked List Circular Menggunakan Head- Membutuhkan satu buah variabel pointer: head- Head akan selalu menunjuk pada node pertama

    Deklarasi Pointer Head Single Linked ListTNode *head;

    Fungsi Inisialisasi Single LinkedListvoid init(){

    head = NULL;}

    Fungsi untuk mengetahui kosong tidaknya Single LinkedListint isEmpty(){

    if(head == NULL) return 1;else return 0;}

  • 8/16/2019 ’Modul Struktur Data Lengkap

    39/69

    Modul Praktikum Struktur Data

    Prodi Manajemen Informatika - Polmed 36

    Penambahan Data Penambahan data di depanUntuk menghubungkan node terakhir dengan node terdepan dibutuhkan pointerbantu .

    void insertDepan(int databaru){

    TNode *baru,*bantu;baru = new TNode;baru->data = databaru;baru->next = baru;

    if(isEmpty()==1){head=baru;head->next=head;

    }else {

    bantu = head;while(bantu->next!=head){

    bantu=bantu->next;

    }baru->next = head;head = baru;bantu->next = head;

    }cout

  • 8/16/2019 ’Modul Struktur Data Lengkap

    40/69

  • 8/16/2019 ’Modul Struktur Data Lengkap

    41/69

    Modul Praktikum Struktur Data

    Prodi Manajemen Informatika - Polmed 38

    if(isEmpty()==0){do{

    coutnext = head;

    }else

    head=NULL;cout

  • 8/16/2019 ’Modul Struktur Data Lengkap

    42/69

    Modul Praktikum Struktur Data

    Prodi Manajemen Informatika - Polmed 39

    bantu = head;while(bantu->next->next != head)

    bantu = bantu->next;hapus = bantu->next;d = bantu->data;bantu->next = head;

    delete hapus;}cout

  • 8/16/2019 ’Modul Struktur Data Lengkap

    43/69

    Modul Praktikum Struktur Data

    Prodi Manajemen Informatika - Polmed 40

    Inisialisasi LinkedListTNode *head, *tail;

    Fungsi Inisialisasi LinkedListvoid init(){

    head = NULL;tail = NULL;

    }

    Fungsi untuk mengetahui kosong tidaknya LinkedListint isEmpty(){

    if(tail == NULL) return 1;else return 0;

    }Penambahan Data

    Penambahan data baru di depanvoid insertDepan(int databaru){

    TNode *baru;baru = new TNode;baru->data = databaru;baru->next = baru;if(isEmpty()==1){

    head=baru; tail=baru;head->next=head;tail->next=tail;

    }else {

    baru->next = head;head = baru;tail->next = head;

    }cout

  • 8/16/2019 ’Modul Struktur Data Lengkap

    44/69

    Modul Praktikum Struktur Data

    Prodi Manajemen Informatika - Polmed 41

    Penambahan Data di belakangPada penambahan data di belakang, data akan selalu dikaitkan dengan tail, karena tailterletak di node paling belakang. Setelah dikaitkan dengan node baru, maka node barutersebut akan menjadi tail.

    void tambahBelakang(int databaru){

    TNode *baru;baru = new TNode;baru->data = databaru;baru->next = baru;if(isEmpty()==1){

    head=baru;tail=baru;head->next=head;tail->next=tail;

    }else {

    tail->next = baru;tail = baru;tail->next = head;

    }cout

  • 8/16/2019 ’Modul Struktur Data Lengkap

    45/69

    Modul Praktikum Struktur Data

    Prodi Manajemen Informatika - Polmed 42

    Fungsi untuk menghapus data di depan

    void hapusDepan(){TNode *hapus;if (isEmpty()==0){

    int d; hapus = head;d = head->data;if(head != tail){

    hapus = head;head = head->next;tail->next = head;delete hapus;

    }else

    head=tail=NULL;cout

  • 8/16/2019 ’Modul Struktur Data Lengkap

    46/69

    Modul Praktikum Struktur Data

    Prodi Manajemen Informatika - Polmed 43

    tail->next = head;delete hapus;

    }cout

  • 8/16/2019 ’Modul Struktur Data Lengkap

    47/69

  • 8/16/2019 ’Modul Struktur Data Lengkap

    48/69

    Modul Praktikum Struktur Data

    Prodi Manajemen Informatika - Polmed 45

    MODUL 7

    Pertemuan : XIII dan XIVJudul Modul : Double linked-list non-circlar Tujuan :

    Memahami pengertian double linked-list non-circlar Dapat mengimplementasikan double linked-list non-circular

    DASAR TEORI

    Seperti halnya single linked-list, maka double linked-list juga dapat dibedakan atasnon-circular dan circular. Dengan demikian, pembahasannya juga tidak jauh berbeda.Modul ini membahas double linked-list non-circular yang diimplementasikan dengan

    menggunakan head saja dan juga dengan menggunakan head dan tail.

    Ilustrasi double linked-list non-circular:

    Deklarasi node:typedef struct TNode{

    int data;TNode *next;Tnode *prev;

    };

    Pembentukan node baru TNode *baru;baru = new TNode;baru->data = databaru;baru->next = NULL;baru->prev = NULL;

    Double Linked List Non Circular Menggunakan Head

    Deklarasi Pointer HeadTNode *head;

    Fungsi Inisialisasi LinkedListvoid init(){

    head = NULL;}

    Fungsi untuk mengetahui kosong tidaknya LinkedList

  • 8/16/2019 ’Modul Struktur Data Lengkap

    49/69

    Modul Praktikum Struktur Data

    Prodi Manajemen Informatika - Polmed 46

    int isEmpty(){if(head == NULL) return 1;else return 0;

    }

    PENAMBAHAN DATA Penambahan data di depan

    void insertDepan(int databaru){TNode *baru;baru = new TNode;baru->data = databaru;baru->next = NULL;baru->prev = NULL;if(isEmpty()==1){

    head=baru;head->next = NULL;head->prev = NULL;

    }else {

    baru->next = head;head->prev = baru;head = baru;

    }coutnext = NULL;baru->prev = NULL;if(isEmpty()==1){

  • 8/16/2019 ’Modul Struktur Data Lengkap

    50/69

    Modul Praktikum Struktur Data

    Prodi Manajemen Informatika - Polmed 47

    head=baru;head->next = NULL;head->prev = NULL;

    } else {

    bantu=head;

    while(bantu->next!=NULL){bantu=bantu->next;}bantu->next = baru;baru->prev = bantu;

    }cout

  • 8/16/2019 ’Modul Struktur Data Lengkap

    51/69

    Modul Praktikum Struktur Data

    Prodi Manajemen Informatika - Polmed 48

    Fungsi untuk menghapus node terbelakangvoid hapusBelakang(){

    TNode *hapus;int d;if (isEmpty()==0){

    if(head->next != NULL){hapus = head;while(hapus->next!=NULL){

    hapus = hapus->next;}d = hapus->data;hapus->prev->next = NULL;delete hapus;

    }else {

    d = head->data;head = NULL;

    }cout

  • 8/16/2019 ’Modul Struktur Data Lengkap

    52/69

    Modul Praktikum Struktur Data

    Prodi Manajemen Informatika - Polmed 49

    Fungsi Inisialisasi DLLNCvoid init(){

    head = NULL;tail = NULL;

    }

    Fungsi untuk mengetahui kosong tidaknya Linked Listint isEmpty(){

    if(tail == NULL) return 1;else return 0;

    }

    Penambahan node di depanvoid insertDepan (int databaru){

    TNode *baru;baru = new TNode;baru->data = databaru;baru->next = NULL;baru->prev = NULL;if(isEmpty()==1){

    head=baru;tail=head;head->next = NULL;head->prev = NULL;tail->prev = NULL;tail->next = NULL;

    }else {

    baru->next = head;head->prev = baru;head = baru;

    }coutnext = NULL;baru->prev = NULL;if(isEmpty()==1){

    head=baru; tail=head;head->next = NULL;head->prev = NULL;tail->prev = NULL;tail->next = NULL;

    }else {

    tail->next = baru;baru->prev = tail;tail = baru;tail->next = NULL;

    }cout

  • 8/16/2019 ’Modul Struktur Data Lengkap

    53/69

  • 8/16/2019 ’Modul Struktur Data Lengkap

    54/69

    Modul Praktikum Struktur Data

    Prodi Manajemen Informatika - Polmed 51

    while(bantu!=NULL){hapus = bantu;bantu = bantu->next;delete hapus;

    }head = NULL;

    tail = NULL;}

    PERCOBAAN

    1. Buatlah ilustrasi dari masing-masing potongan program.2. Buat program lengkap dari potongan-potongan program yang ada di atas. Buat

    dengan menggunakan menu.3. Buat program untuk memasukkan node baru tetapi di antara node yang sudah ada.

    Tentukan node yang baru akan berada pada antrian keberapa.

    LATIHAN 1. Buatlah fungsi tambahan yang berguna untuk mencari data yang ada dalam linked

    list baik dengan head maupun head & tail.2. Buatlah fungsi untuk menghapus data tertentu dalam linked list.3. Buatlah fungsi untuk menampilkan data list secara terbalik.4. Buatlah fungsi untuk menghitung nilai rata-rata dari sebuah linked-list yang

    memiliki elemen bertipe float.

  • 8/16/2019 ’Modul Struktur Data Lengkap

    55/69

    Modul Praktikum Struktur Data

    Prodi Manajemen Informatika - Polmed 52

    MODUL 8

    Pertemuan : XV dan XVIJudul Modul : Double linked-list circlar Tujuan :

    Memahami pengertian double linked-list circlar Dapat mengimplementasikan double linked-list circular

    DASAR TEORI

    Pada double linked-list cicular, pointer next dan prev menunjuk ke dirinya sendirisecara circular (melingkar).

    Pembuatan Double Linked List CircularDeklarasi node

    typedef struct TNode{int data;TNode *next;Tnode *prev;};

    Pembentukan node baruTNode *baru;baru = new TNode;baru->data = databaru;baru->next = baru;baru->prev = baru;

    Double Linked List Circular Menggunakan Head

    Deklarasi Pointer HeadTNode *head;

    Fungsi Inisialisasi LinkedListvoid init(){

    head = NULL;}

  • 8/16/2019 ’Modul Struktur Data Lengkap

    56/69

    Modul Praktikum Struktur Data

    Prodi Manajemen Informatika - Polmed 53

    Fungsi untuk mengetahui kosong tidaknya LinkedList int isEmpty(){if(head == NULL) return 1;else return 0;}

    Penambahan Data Penambahan data di depan

    void insertDepan(int databaru){TNode *baru, *bantu;baru = new TNode;baru->data = databaru;baru->next = baru;baru->prev = baru;if(isEmpty()==1){

    head=baru;head->next = head;head->prev = head;

    }else {

    bantu = head->prev;baru->next = head;head->prev = baru;head = baru;head->prev = bantu;bantu->next = head;

    }cout

  • 8/16/2019 ’Modul Struktur Data Lengkap

    57/69

    Modul Praktikum Struktur Data

    Prodi Manajemen Informatika - Polmed 54

    Penambahan data di belakang void insertBelakang (int databaru){

    TNode *baru,*bantu;baru = new TNode;baru->data = databaru;baru->next = baru;baru->prev = baru;if(isEmpty()==1){

    head=baru;head->next = head;head->prev = head;

    }else {

    bantu=head->prev;bantu->next = baru;baru->prev = bantu;baru->next = head;head->prev = baru;

    }cout

  • 8/16/2019 ’Modul Struktur Data Lengkap

    58/69

    Modul Praktikum Struktur Data

    Prodi Manajemen Informatika - Polmed 55

    delete hapus;}else {

    d = head->data;head = NULL;

    }

    coutdata;bantu->next = head;delete hapus;

    }else {

    d = head->data; head = NULL;

    }cout

  • 8/16/2019 ’Modul Struktur Data Lengkap

    59/69

    Modul Praktikum Struktur Data

    Prodi Manajemen Informatika - Polmed 56

    Fungsi Inisialisasi:void init(){

    head = NULL;tail = NULL;

    }

    Fungsi untuk mengetahui kosong tidaknya LinkedListint isEmpty(){

    if(tail == NULL) return 1;else return 0;

    }

    Penambahan node di depanvoid insertDepan (int databaru){

    TNode *baru;baru = new TNode; baru->data = databaru;baru->next = baru;

    baru->prev = baru;if(isEmpty()==1){head=baru;tail=baru;head->next = head;head->prev = head;tail->next = tail;tail->prev = tail;

    }else {

    baru->next = head;head->prev = baru;head = baru;

    head->prev = tail;tail->next = head;}coutnext = baru;baru->prev = baru;if(isEmpty()==1){

    head=baru;tail=baru;head->next = head;head->prev = head;tail->next = tail;tail->prev = tail;

    }else {

    tail->next = baru;baru->prev = tail;tail = baru; tail->next = head;head->prev = tail;

    }cout

  • 8/16/2019 ’Modul Struktur Data Lengkap

    60/69

    Modul Praktikum Struktur Data

    Prodi Manajemen Informatika - Polmed 57

    Function untuk menampilkan isi linked listvoid tampil(){

    TNode *bantu;bantu = head;if(isEmpty()==0){

    do{

    coutdata;head = NULL;tail = NULL;

    }cout

  • 8/16/2019 ’Modul Struktur Data Lengkap

    61/69

    Modul Praktikum Struktur Data

    Prodi Manajemen Informatika - Polmed 58

    Function untuk menghapus semua elemen LinkedListvoid clear(){

    TNode *bantu,*hapus;if (isEmpty()==0){

    bantu = head;while(bantu->next!=head){

    hapus = bantu;bantu = bantu->next;delete hapus;

    }head = NULL;

    }}

    PERCOBAAN

    4. Buatlah ilustrasi dari masing-masing potongan program.5. Buat program lengkap dari potongan-potongan program yang ada di atas. Buat

    dengan menggunakan menu.6. Buat program untuk memasukkan node baru tetapi di antara node yang sudah ada.Tentukan node yang baru akan berada pada antrian keberapa.

    LATIHAN 5. Buatlah fungsi tambahan yang berguna untuk mencari data yang ada dalam linked

    list baik dengan head maupun head & tail.6. Buatlah fungsi untuk menghapus data tertentu dalam linked list.7. Buatlah fungsi untuk menampilkan data list secara terbalik.8. Buatlah fungsi untuk menghitung nilai rata-rata dari sebuah linked-list yang

    memiliki elemen bertipe float.

  • 8/16/2019 ’Modul Struktur Data Lengkap

    62/69

    Modul Praktikum Struktur Data

    Prodi Manajemen Informatika - Polmed 59

    MODUL 9

    Pertemuan : XVIIJudul Modul : Stack dengan linked listTujuan :

    Memahami pengertian stack dengan linked-list Dapat mengimplementasikan operasi-operasi dasar pada stack dengan linked

    list

    DASAR TEORI

    Selain implementasi stack dengan array, ada cara lain untuk mengimplementasikanstack, yaitu dengan linked list. Pada modul ini, stack akan diimplementasikan dengan

    single linked list. Keunggulan implementasi dengan linked list dibandingkan denganarray adalah penggunaan alokasi memori yang dinamis sehingga menghindari

    pemborosan memori. Sebagai contoh, jika sebuah stack dengan array dialokasikantempat untuk stack berisi 150 elemen, sementara ketika dipakai oleh user stack hanyadiisi 50 elemen, maka telah terjadi pemborosan memori untuk sisa 100 tempat elemenyang tidak terpakai. Dengan penggunaan linked list, maka tempat yang digunakanakan sesuai dengan banyaknya elemen yang mengisi stack. Oleh karena itu, dalamstack dengan linked list, tidak ada istilah full (penuh), sebab biasanya program tidakmenentukan jumlah elemen stack yang mungkin ada (kecuali jika sudah dibatasi oleh

    pembuatnya). Namun demikian, sebenarnya stack ini pun memiliki batas kapasitas,yakni dibatasi oleh jumlah memori yang tersedia.

    Pembuatan stack dengan single linked listDeklarasi node:

    typedef struct TNode {int Data;TNode *Next;

    };

    NULL

    A

    B

    C

    D

    E

    Top

  • 8/16/2019 ’Modul Struktur Data Lengkap

    63/69

  • 8/16/2019 ’Modul Struktur Data Lengkap

    64/69

    Modul Praktikum Struktur Data

    Prodi Manajemen Informatika - Polmed 61

    Ilustrasi:

    5) Fungsi Clear() void Clear() {

    while(!isEmpty())Pop();

    }

    PERCOBAAN

    1. Buatlah fungsi Tampil () untuk menampilkan semua elemen dalam stack dengansingle linked list.

    2. Buatlah program lengkap dengan menggunakan menu yang memiliki fungsi-fungsi dasar untuk operasi pada stack dengan single linked list, yaitu Init (),isEmpty (), Push (), Pop (), dan Tampil ();

    LATIHAN

    1. Dengan menggunakan struktur data stack, buatlah program yang menerimamasukan berupa string nama Anda. Program kemudian membalik string nama,dan menampilkan string nama yang sudah dibalik itu.

    2. Buatlah program yang menerima masukan berupa ekspresi matematika dalamnotasi postfix , kemudian menghitung (mengevaluasi) hasilnya. Operatormatematika yang digunakan adalah +, – , *, dan /.Contoh: ekspresi dalam notasi infix 10 + 3 * 5 dapat diubah menjadi notasi postfix 3 5 * 10 +

    NULL

    23

    11

    52

    68

    90

    Top

    NULL

    23

    11

    52

    68

    Top

    Sampah

    2. Ambil elemen teratasdengan Pop():

    1. Keadaan awal stacksudah berisi lima

  • 8/16/2019 ’Modul Struktur Data Lengkap

    65/69

    Modul Praktikum Struktur Data

    Prodi Manajemen Informatika - Polmed 62

    Notasi postfix ini kemudian menjadi masukan bagi program. Programmembutuhkan dua buah stack, stack Soal (untuk menyimpan data ekspresi dalamnotasi postfix) dan stack Hasil (untuk menyimpan hasil evaluasi ekspresimatematika) dan dievaluasi dengan algoritma sebagai berikut:

    1) Pop Stack Soal:a. Jika berupa operand, maka Push ke Stack Hasil

    b. Jika berupa operator, makai. Pop nilai pertama dari Stack Hasilii. Pop nilai kedua dari Stack Hasil

    iii. Lakukan operasi sesuai dengan operator yang didapat. 2) Ulangi langkah i sampai selesai.

  • 8/16/2019 ’Modul Struktur Data Lengkap

    66/69

    Modul Praktikum Struktur Data

    Prodi Manajemen Informatika - Polmed 63

    MODUL 10

    Pertemuan : XVIIIJudul Modul : Queue dengan linked listTujuan :

    Memahami pengertian queue dengan linked-list Dapat mengimplementasikan operasi-operasi dasar pada queue dengan linked

    list

    DASAR TEORI

    Selain menggunakan array, queue juga dapat diimplementasikan denganmenggunakan linked list. Pada modul ini, linked list yang digunakan adalah double

    linked list.Pembuatan queue dengan double linked list adalah melalui deklarasi queue sebagai

    berikut:typedef struct TNode {

    int Data;TNode *Prev;TNode *Next;

    }Untuk keperluan operasi-operasi pada queue selanjutnya, maka diperlukan variabelHead dan Tail, masing-masing sebagai penunjuk antrian paling depan dan antrian

    paling belakang. Selain itu, diperlukan juga variabel untuk menyimpan banyaknyadata dalam antrian, yaitu Count.

    TNode *Head, *Tail;unsigned int Count;

    Adapun fungsi-fungsi untuk melakukan operasi-operasi dasar yang diperlukan adalah Init() untuk melakukan inisialisasi queue isEmpty() untuk memeriksa apakah queue kosong isFull() untuk memeriksa apakah queue sudah penuh EnQueue() untuk memasukkan sebuah elemen ke dalam queue (mirip dengan

    fungsi Push pada oerasi stack) DeQueue() untuk mengeluarkan sebuah elemen dari dalam queue (mirip

    dengan fungsi Pop pada stack)

    1) Fungsi Init():void Init() {

    Head = NULL;Tail = NULL;Count = 0;

    }

    2) Fungsi isEmpty():int isEmpty() {

    if(Head==NULL) return 1;else return 0;

    }

    NULL

    Count = 0

    TailHead

  • 8/16/2019 ’Modul Struktur Data Lengkap

    67/69

    Modul Praktikum Struktur Data

    Prodi Manajemen Informatika - Polmed 64

    3) Fungsi isFull():int isFull() {

    if(Count==MAX_QUEUE) // MAX_QUEUE adalah kapasitas queue maksimumreturn 1;

    else return 0;}

    4) Fungsi EnQueue():int EnQueue(int X) {

    if(!isFull()) {TNode *Baru = new TNode;Baru -> Data = X;Baru -> Next = NULL;Baru -> Prev = Tail;

    if(isEmpty())Head = Baru;

    elseTail->Next = Baru;

    Tail = Baru;Count++;

    }return X;

    }

    5) Fungsi DeQueue():int DeQueue() {

    int Temp;if(!isEmpty()) {

    Temp=Head->Data;TNode *Sampah = Head;Head=Head->Next;Head->Prev=NULL;delete Sampah;Count--;

    }return Temp;

    }

    6) Fungsi Clear() void Clear() {

    while(!isEmpty())DeQueue();

    }

    PERCOBAAN

    1. Buatlah ilustrasi untuk menggambarkan fungsi EnQueue() dan DeQueue(). 2. Buatlah fungsi Tampil () untuk menampilkan semua elemen dalam queue dengan

    double linked list.3. Buatlah program lengkap dengan menggunakan menu untuk operasi-operasi dasar

    pada queue dengan double linked list, yaitu Init() , isEmpty(), isFull(),EnQueue(), DeQueue(), Clear() , dan Tampil() .

  • 8/16/2019 ’Modul Struktur Data Lengkap

    68/69

    Modul Praktikum Struktur Data

    Prodi Manajemen Informatika - Polmed 65

    LATIHAN

    Gunakan fungsi-fungsi untuk operasi-operasi dasar pada struktur data Queue yangelemen datanya berupa nilai float untuk membuat program lengkap menggunakanmenu-menu berikut:

    1. Masukkan data2. Hapus data3. Hapus seluruh data4. Tampilkan data dalam Queue dengan disertai data statistik:

    a. Banyak data n

    b. Jumlah semua nilain

    i

    i x

    1

    c. Nilai rata-rata x d. Nilai maksimum max x

    e. Nilai minimum min x 5. Selesai

  • 8/16/2019 ’Modul Struktur Data Lengkap

    69/69

    Modul Praktikum Struktur Data

    REFERENSI

    1. Hariyanto, Bambang. (2000). Struktur Data . Penerbit Informatika, Bandung.

    2. Sanjaya, Dwi (2005). Asyiknya Belajar Struktur Data di Planet C++ . Elex Media

    Komputindo, Jakarta.

    3. Kadir, A., dan Heriyanto (2005). Algoritma Pemrograman Menggunakan C++.

    Penerbit Andi, Yogyakarta.

    4. Heriyanto, Tjendry. (1995). Tuntunan Praktis Pemrograman C++ . Elex Media

    Komputindo, Jakarta.

    5. Halawa, Edward E.H., dan Setyawan P. Sakti (1995). Pemrograman dengan C++

    dan Aplikasi Numerik. Penerbit Erlangga, Jakarta.

    6. http://lecturer.ukdw.ac.id/anton

    7. http://www.dwisanjaya.com