Linked List Materi Kuliah
Linked List Materi Kuliah
Apakah itu ?
Sejumlah Obyek yang di Link satu dengan lain hingga
membentuk list
Obyek merupakan gabungan beberapa elemen data
yang dikelompokkan (structure atau record)
Tiap elemen dapat memiliki tipe data sendiri-sendiri
Dibutuhkan pointer untuk menghubungkan obyek
satu dan yang lain
Contiguous dan Linked List
Contiguous List : Static
Kumpulan obyek yang bersambung atau bersisian
hingga membentuk sebuah list.
Alamat dalam memori saling bersambung
(contiguous)
Tipe data tiap elemen SAMA.
Contoh : Array satu dimensi
0 1 2 3 4 5 6
Contiguous dan Linked List
Linked List : Dynamic
Obyek yang terdapat dalam linked list : SIMPUL
Tiap SIMPUL terdiri dari 2 elemen
Elemen pertama berisi data, misal nilai numerik
Elemen kedua bertime pointer, berisi alamat simpul
berikut nya yang diilustrasikan dengan garis panah
Alamat simpul tidak saling bersambung
Alokasi dalam memori bersifat dinamis, artinya
SIMPUL dapat ditambah atau dihapus ketika proses
berlangsung
Ilustrasi
12
H800
25 10
H1000 H1100
17
H1400
Beberapa jenis struktur Linked List
Beberapa jenis struktur linked list adalah sebagai
berikut:
LINEAR SINGLY-LINKED LIST
LINEAR DOUBLY-LINKED LIST
CIRCULAR SINGLY-LINKED LIST
CIRCULAR DOUBLY-LINKED LIST
Jenis Struktur Linked List
1. LINEAR SINGLY-LINKED LIST
FIRST LAST
LIN
LIN
LIN
LIN
INF
INF
INF
INF
O
O
K
K
25 12 17 10
Jenis Struktur Linked List
2. LINEAR DOUBLY-LINKED LIST
FIRST LAST
RIGH
RIGH
RIGH
RIGH
LEF
LEF
LEF
LEF
INF
INF
INF
INF
O
O
T
T
25 25
12 25
17 25
10
Jenis Struktur Linked List
1. CIRCULAR SINGLY-LINKED LIST
FIRST LAST
LIN
LIN
LIN
LIN
INF
INF
INF
INF
O
O
K
K
25 12 17 10
Jenis Struktur Linked List
2. CIRCULAR DOUBLY-LINKED LIST
FIRST LAST
RIGH
RIGH
RIGH
RIGH
LEF
LEF
LEF
LEF
INF
INF
INF
INF
O
O
T
T
25 25
12 25
17 25
10
LINEAR SINGLY-LINKED LIST
FIRST LAST
LIN
LIN
LIN
LIN
INF
INF
INF
INF
O
O
K
K
25 12 17 10
LIN
LIN
LIN
LIN
INF
INF
INF
INF
O
O
K
K
25 12 17 10
Keterangan :
Ada 4 simpul, yaitu Simpul no (1) sampai dengan no (4)
Setiap simpul (record) terdiri dari dua elemen (field) yaitu :
Field INFO misal bertipe int untuk data/informasi
Field LINK bertipe pointer untuk alamat simpul berikutnya
Simpul no (1) ditunjuk oleh pointer FIRST
Simpul no (4) ditunjuk oleh pointer LAST
Mendeklarasikan struktur Simpul
typedef struct Node{
int INFO;
struct Node *LINK;
};
typedef struct Node Simpul;
Keterangan
Simpul adalah tipe data buatan kita yang berbentuk
structure atau record yang terdiri dari 2 elemen yaitu :
INFO yang bertipe int
LINK yang bertipe pointer
Inisialisasi Linked List
typedef struct Node{
Dengan FIRST = NULL
int INFO;
artinya pointer FIRST
struct Node *LINK;
};
akan berisi NULL
typedef struct Node Simpul;
Simpul *P, *FIRST, *LAST ; FIRST
\0
void initialize()
{
FIRST = NULL;
}
Membuat Simpul
Linked List adalah kumpulan simpul-simpul
Dibuat satu persatu
Jumlahnya tidak terbatas (tergantung memori)
Keberhasilan membuat simpul tergantung dari
pemeriksaan pointer P:
Jika pointer P berisi BUKAN NULL : berhasil
Jika pointer P berisi NULL : gagal
Membuat Simpul
void BUAT_SIMPUL(int x)
/*Kemudian dipanggil pada
{
program main misal seperti
P= (Simpul*)
ini :*/
malloc(sizeof(Simpul));
int main()
if(P!=Null)
{
{
P->INFO = X; -
} -
else scanf("%i", &x);
{ printf("pembuatan simpul BUAT_SIMPUL(x);
gagal"); -
} -
} }
Membuat Simpul (awal)
Sebuah program mungkin menggunakan lebih daru satu
Linked List dengan struktur record yang sama, misal struktur
Simpul tapi tetap hanya ada satu yang simpul awalnyanya
ditunjuk oleh pointer FIRST karena sebuah pointer tidak bisa
menunjuk lebih dari satu buah simpul
Secara sederhana, instruksi pembuatan simpul Awal dapat
diperlihatkan sebagai berikut
scanf(“%i”, &x)
P=(Simpul *……….)
P->INFO = x;
FIRST = P;
LAST = P;
P->LINK = NULL
Membuat Simpul (awal)
void BUAT_SIMPUL(int x)
void AWAL()
{ {
if(FIRST == NULL)
P= (Simpul*) malloc(sizeof(Simpul)); {
if(P!=NULL) FIRST = P;
{ LAST = P;
P->INFO = x; P->LINK = NULL;
} }
else else
{ printf("pembuatan simpul gagal"); { printf("Linked LIST sudah
} ada");}
}
}
INFO
LINK
25
Pada INFO :
Simpul ini ditunjuk oleh dua pointer yaitu P dan FIRST, maka elemen ini namanya ada dua:
P->INFO atau FIRST->INFO
Pada LINK juga ditunjuk oleh dua pointer P dan FIRST (atau P dan LAST) maka elemen ini
namanya :
P->LINK
FIRST-> LINK
Atau
LAST->LINK
Membuat Simpul (INSERT KANAN)
FIRST LAST
LIN
LIN
LIN
LIN
INF
INF
INF
INF
O
O
K
K
25 12 17 10
void InsertKanan()
void InsertKanan() {
if(LAST!=NULL)
{
{LAST->LINK = P;
LAST->LINK = P; LAST = P;
LAST = P; P->LINK = NULL;
}
P->LINK = NULL;
else
} { printf("LINKED LIST belum ada");}
}
Membuat Simpul (INSERT KIRI)
FIRST
LAST
p
LIN
LIN
LIN
LIN
LIN
INF
INF
INF
INF
INF
O
O
K
K
12 25 12 17 10
void InsertKiri()
{
if(FIRST!=NULL)
{
P->LINK = FIRST;
FIRST = P;
}
else
{
printf("LINKED LIST belum ada");
}
}
Menghapus Simpul (Delete)
Menggunakan instruksi :
free(nama pointer);
Contoh :
free(Q);
Menghapus Simpul (Delete Kiri)
void DeleteKiri() FIRST
{ Q
Q=FIRST;
INFO
INFO
LINK
LINK
FIRST=Q->LINK;
free(Q); 25 12
}
Menghapus Simpul (Delete Kiri)
FIRST
Instruksi Q=FIRST;
Q LINK
LINK
INF
INF
pointer Q ditempatkan
O
O
25 12 menunjuk simpul pertama
FIRST
Instruksi FIRST=Q->LINK;
Q
LINK
LINK
INF
O
Q Instruksi free(Q);
LINK
INF
12 pointer Q dihapus
Menghapus Simpul (Delete Kanan)
void DeleteKanan() FIRST LAST
{ Q
free(Q)
INFO
INFO
INFO
LINK
LINK
LINK
LAST = Q;
LAST->LINK =NULL; 25 12 10
}
Menghapus Simpul (Delete Kanan)
FIRST LAST
Q Instruksi free(LAST);
LINK
LINK
LINK
INF
INF
INF
simpul terakhir
O
O
25 12 10 berserta isinya dihapus
FIRST Q
Instruksi LAST=Q;
LINK
LINK
INF
INF
O
Q
LINK
INF
LIN
LIN
LIN
LIN
INF
INF
INF
INF
O
O
K
3
K
1
15 37 45 20
2 4 5
(11) (12) (13) (14)
INFO
INFO
INFO
INFO
INFO
INFO
INFO
LINK
LINK
LINK
LINK
LINK
LINK
LINK
LINK
75 67 50 65 57 85 60 72