Anda di halaman 1dari 18

LAPORAN PRAKTIKUM RESMI

BAB XI LINKED LIST



Disusun oleh :
Christina Natalia Sunjaya
201301003

Dosen pengampu :
Yosef Murya Kusuma Ardhana.S.T., M.Kom

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;

start.next=NULL;
node=&start;
for(i=1;i<=10;i++)
{
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<<" ";
node=node->next;
}
return 0;
}

Output program:

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
*/


#include <iostream>
#include<stdlib.h>
#include<malloc.h>
#include <conio.h>

#define nil NULL
#define info(P)P->info
#define next(P)P->next
#define first(L)(L)

typedef int infotype;
typedef struct telmtlist *alamat;
using namespace std;

typedef struct telmtlist
{
infotype info;
alamat next;

}elmtlist;

typedef alamat list;

void buatsenarai (list *L)
{
first(*L)=nil;
}

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)
{
if(p==nil)
{
t->next=*L;
*L=t;
}

else
{
t->next=p->next;
p->next=t;
}

}

void cetaksenarai (list L)
{
list ps;
for(ps=L;ps!=nil;ps=ps->next)
{
cout<<" "<<info(ps)<<" -->";
}
cout<<" NULL"<<endl;

}
int main()
{
list pel;
list n;
int i,k,nilai;

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;

start.next=NULL;
node=&start;
for(i=1;i<=10;i++)
{
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<<" ";
node=node->next;
}
return 0;
}

Output program :

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>

#define nil NULL
#define info(P)P->info
#define next(P)P->next
#define first(L)(L)

typedef int infotype;
typedef struct telmtlist *alamat;
using namespace std;

typedef struct telmtlist
{
infotype info;
alamat next;

}elmtlist;

typedef alamat list;

void buatsenarai (list *L)
{
first(*L)=nil;
}

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)
{
if(p==nil)
{
t->next=*L;
*L=t;
}

else
{
t->next=p->next;
p->next=t;
}

}

void cetaksenarai (list L)
{
list ps;
for(ps=L;ps!=nil;ps=ps->next)
{
cout<<" "<<info(ps)<<" -->";
}
cout<<" NULL"<<endl;

}
int main()
{
list pel;
list n;
int i,k,nilai;

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

9. void buatsenarai (list *L) prosedur buatsenarai
{
first(*L)=nil;
}

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.

Anda mungkin juga menyukai