JURUSAN SISTEM INFORMASI SEKOLAH TINGGI ILMU KOMPUTER YOS SUDARSO PURWOKERTO 2014
BAB I TEORI DASAR 1. PENDAHULUAN Struktur data dinamis yang paling sederhana, yaitu linked list atau struktur berkait atau senarai bernatai, yaitu cara menyimpan data secara terstruktur, sehingga programmer dapat secara otomatis menciptakan suatu tempat baru untuk menyimpan data kapan saja diperlukan. Linked list(senarai berantai) disebut juga dengan senarai satu arah (one-way list). Masing-masing komponen dinamakan dengan simpul (node). Linked list mengandung 3 buah simpul atau node. Sebuah pointer menunjuk simpul terkiri dan setiap simpul mempunyai pointer yang menunjuk ke simpul berikutnya. Pointer pada simpul teralhir tidak menunjuk ke mana-mana, maka berisi NULL. Simpul pada linked list terdiri dari dua komponen utama, yaitu: 1. Data, yaitu bisa berupa satu elemen data atau beberapa elemen data. 2. Pointer yang menunjuk ke simpul lain. A. PERBEDAAN KARAKTERISTIK ARRAY DAN LINKED LIST Perlu diketahui bahwa array dan linked list memiliki sifat yang berbeda, perbedaannya tersebut dapat dilihat pada table berikut : ARRAY LINKED LIST Penambahan atau penghapusan data terbatas Penambahan atau penghapusan data tidak terbatas Random access Sequential access Penghapusan array tidak mungkin Penghapusan linked list mudah Statis Dinamis
Teknik pembacaan linked list : Awal =2, maka Data[2] =A Linked[2]=6, maka Data[6] =B Linked[6]=1, maka Data[1] =C Linked[1]=5, maka Data[5] =D Linked[5]=10, maka Data[10]=E Linked[10]=8, maka Data[8] =F Linked[8]=0, maka akhir linked list B. BENTUK NODE SINGLE LINKED LIST NON- CIRCULAR Single : field pointer-nya hanya satu dan satu arah, pada akhir node pointer-nya menunjuk NULL.
data pointer pada gambar diatas memberikan pengertian bahwa linked listr merupakan node-node yang saling terhubung satu sama lain. Setiap node pada linked list mempunyai field yang berisi pointer ke node berikutnya, dan juga memiliki field yang berisi data. Node terkahir akan menjukan NULL yang akan digunakan sebagai kondisi berhenti pada saat pembacaan isi linked list.
Atau dapat di ilustrasikan dengan cara dibawah ini :
C. Untuk menciptakan linked list, salah satu dari anggota struktur berupa pointer kestruktur yang bertipe sama. Sebagai contoh perhatikan struktur berikut: Struct FileList { Char filename[64]; Struct FileList *next; } Anggota next adalah pointer ke entry berikutnya di dalam list tersebut. Untuk menciptakan linked list dan kemudian menelusurinya, program linked list normalnya memakai paling tidak dua variable. Variable start merupakan struktur yang A B C D A B C D anggota next akan berisi pointer ke awal list atau NULL jika list kosong. Variable node atau simpul berupa pointer ke simpul sekarang : struct FileList start, *node;
/* * linked1.cpp * * Created on: May 28, 2014 * Author: SAMSUNG */
#include <iostream> #include <malloc.h> #include <list> using namespace std;
int main() { int i;
struct ListEntry{ int number; struct ListEntry *next; }start,*node;
D. SINGLE LINKED LIST NON-CIRCULAR MENGGUNAKAN HEAD Dalam single linked list non-circular menggunakan head untuk menunjuk sebuah head, maka dibutuhkan satu buah variable pointer. Head yang akan selalu menunjuk pada node pertama. NULL
HEAD a. Teknik Menambah Node di Depan Penambahan node baru akan dikaitan di node paling depan, namun pada saat pertama kali ( data masih kosong ), maka penambahan data dilakukan dengan cara : node head menunjuk ke node baru tersebut. Prinsip utamanya adalah mengkaitkan node baru dengan head, kemudian head akan menunjuk pada data baru tersebut sehingga head akan tetap selalu menjadi data terdepan. Program linked list 2: /* * linkedd2.cpp A B C D * * Created on: May 28, 2014 * Author: SAMSUNG */
buatsenarai(&pel); cout<<"Masukkan Banyak Data = "; cin>>k; for(i=1;i<=k;i++) { cout<<"Masukkan Data Senarai ke-"<<i<<" = "; cin>>nilai; n=nodbaru(nilai); sisipsenarai(&pel,n,NULL);
} cetaksenarai(pel); return 0; } Output program :
b. Teknik Menambah Node di Belakang Penambahan data dilakukan dibelakang, namun pada saat pertama kali, node langsung ditunjuk oleh head. Penambahan dibelakang membutuhkan pointer bantu untuk mengetahui node terakhir. Kemudian, dikaitkan dengan node baru. Untuk mengetahui data terakhir perlu digunakan perulangan.
c. Teknik Menghapus Node di Depan Penghapusan node tidak boleh dilakukan jika keadaan node sedang ditunjuk oleh pointer, maka harus menggunakan pointer lain ( hapus ) yang digunakan untuk menunjuk node yang akan dihapus, barulah kemudian menghapus pointer, hapus dengan menggunakan perintah delete. Sebelum data terdepan dihapus, terlebih dahulu head harus menunjuk ke node berikutnya agar list tidak putus, sehingga node setelah head lama akan menjadi head baru. Jika head masih NULL, maka berarti data masih kosong.
d. Teknik Menghapus Node di Belakang Membutuhkan pointer bantu dan hapus. Pointer hapus digunakan untuk menunjuk node yang akan dihapus. Pointer bantu untuk menunjuk node sebelum node yang dihapus yang akan menjadi node terakhir. Pointer bantu digunakan untuk menunjuk ke nilai NULL. Pointer bantu selalu bergerak sampai sebelum node yang akan dihapus, kemudian pointer hapus diletakkan setelah pointer bantu. Selanjutnya pointer hapus akan dihapus, pointer bantu akan menunjuk ke NULL. Program linked list 3: /* * linekd3.cpp * * Created on: May 28, 2014 * Author: SAMSUNG */
/* * linkedlist03.cpp * * Created on: May 26, 2014 * Author: ElfanNet */
#include <iostream> #include <cstring>
class node { public: int x; node *next; };
using namespace std; int main() { int n,i; node *awal, *akhir, *temp; awal=new node; akhir=awal; cout<<"Input Data : "; cin>>n; for(i=1;i<=n;i++) { temp=new node; temp->next=NULL; cout<<"data"<<i<<"="; cin>>temp->x; akhir->next=temp; akhir=temp; } cout<<"seluruh data\n"; temp=awal->next; while(temp->next!=NULL) { cout<<temp->x<<endl; temp=temp->next; } while(temp!=NULL) { cout<<temp->x<<endl; temp=temp->next; } int p; cout<<"Hapus posisi ke "; cin>>p; node*temp1,*temp2; temp1=awal; for(i=1;i<p;++i) temp1=temp1->next; temp2=temp1->next; temp1->next=temp2->next; delete temp2; cout<<"Seluruh Data \n"; temp=awal->next; while(temp!=NULL) { cout<<temp->x<<endl; temp=temp->next; } return 0; }
Output program :
BAB II PENJELASAN PROGRAM Program linked list 01 dengan typedef #include <iostream> #include <malloc.h> #include <list> using namespace std; typedef int bug; typedef int life; int main() { bug i;
struct ListEntry{ life number; struct ListEntry *next; }start,*node;
Penjelasan list program linked list 01 dengan typedef : 1. Tanda yang diawali dengan /* dan diakhiri tanda */ adalah script untuk sebuah komentar atau perintah / teks, namun jika program di run tidak akan dibaca oleh compiler, tidak muncul di output. 2. #include adalah pengarah preprocessor yang berfungsi untuk menginstruksikan compiler. 3. <iostream> adalah header atau library file untuk proses input output nantinya. 4. <malloc> fungsi standart untuk mengalokasikan memori 5. Using namespace std adalah penyingkatan sebuah kode 6. typedef int bug; pendeklarasian tipe data yang baru typedef int life; pendeklrasian tipe data yang baru 7. int main() adalah badan program 8. bug i; pendeklarasian variable I dengan tipe data baru yaitu bug
9. struct ListEntry{ pendeklarasian struct (tipe data abstraK) life number; pendeklarasian variable number dengan tipe data yang baru (life) struct ListEntry *next; }start,*node; pemberian nama struct
start.next=NULL; node=&start; for(i=1;i<=10;i++) perulangan statement for, dimana variable i adalah 1,i kurang dari sama dengan 10, maka variable i di inkremen-kan { node->next=(struct ListEntry*)malloc(sizeof(struct ListEntry)); node=node->next; node->number=i; node->next=NULL; } node=start.next; while(node) { cout<<node->number<<" "; memunculkan output angka node=node->next; } return 0; akhir dari program }
Program linked list 02 dengan typedef #include <iostream> #include<stdlib.h> #include<malloc.h> #include <conio.h>
buatsenarai(&pel); cout<<"Masukkan Banyak Data = "; cin>>k; for(i=1;i<=k;i++) { cout<<"Masukkan Data Senarai ke-"<<i<<" = "; cin>>nilai; n=nodbaru(nilai); sisipsenarai(&pel,n,NULL);
} cetaksenarai(pel); return 0; }
Output program linked list 02 :
Penjelasan listing program linked list 02 : 1. Tanda yang diawali dengan /* dan diakhiri tanda */ adalah script untuk sebuah komentar atau perintah / teks, namun jika program di run tidak akan dibaca oleh compiler, tidak muncul di output. 2. #include adalah pengarah preprocessor yang berfungsi untuk menginstruksikan compiler. 3. <iostream> adalah header atau library file untuk proses input output nantinya. 4. <malloc> fungsi standart untuk mengalokasikan memori 5. Using namespace std adalah penyingkatan sebuah kode 6. #define nil NULL #define info(P)P->info sebuah tipe terdefinisi yang menyimpan informasi sebuah elemen list #define next(P)P->next next: address dari elemen berikutnya #define first(L)(L) 7. typedef int infotype; pendeklarasian tipe data yang baru typedef struct telmtlist *alamat; pendeklarasian tipedef struct 8. typedef struct telmtlist pendeklarasian tipedef struct { infotype info;pendeklarasian variable info dengan tipe data yang baru(infotype) alamat next; pendklarasian variable next dengan tipe data yang baru(alamat)
}elmtlist; nama struct
typedef alamat list; pendeklarasian tipe data yang baru
list nodbaru(int m) { list n; n=(list)malloc(sizeof(elmtlist)); if(n!=NULL) { info(n)=m; next(n)=nil; } return n; }
void sisipsenarai(list *L, list t, list p) prosedur sisipsenarai { if(p==nil) pemilihan dengan statement if { t->next=*L; *L=t; }
else { t->next=p->next; p->next=t; }
}
void cetaksenarai (list L) prosedur cetak senarai { list ps; for(ps=L;ps!=nil;ps=ps->next) perulangan dengan statement for { cout<<" "<<info(ps)<<" -->"; } cout<<" NULL"<<endl; menampilkan null
} BAB III KESIMPULAN 1. Linked list mengandung 3 buah simpul atau node. Sebuah pointer menunjuk simpul terkiri dan setiap simpul mempunyai pointer yang menunjuk ke simpul berikutnya. Pointer pada simpul teralhir tidak menunjuk ke mana-mana, maka berisi NULL. 2. Simpul pada linked list terdiri dari dua komponen utama, yaitu: Data, yaitu bisa berupa satu elemen data atau beberapa elemen data. Pointer yang menunjuk ke simpul lain. 3. PERBEDAAN ARRAY DAN LINKED LIST ARRAY LINKED LIST Penambahan atau penghapusan data terbatas Penambahan atau penghapusan data tidak terbatas Random access Sequential access Penghapusan array tidak mungkin Penghapusan linked list mudah Statis Dinamis 4.