Presentasi sedang didownload. Silahkan tunggu

Presentasi sedang didownload. Silahkan tunggu

Single Linked List Yuliana Setiowati, S.Kom.

Presentasi serupa


Presentasi berjudul: "Single Linked List Yuliana Setiowati, S.Kom."— Transcript presentasi:

1 Single Linked List Yuliana Setiowati, S.Kom

2 Linked List tom p1 macao 10 mary p2 taipa 14 john p3 macao 22 ann p4
18 Misalnya kita buat banyak record student sebagai variabel dinamik, kita perlu mengorganisasi data kita, supaya efisien

3 Linked List p1 tom macao 10 mary taipa 14 john macao 22 ann macao 18
Salah satu cara adalah menghubungkan semua record student dengan pointer

4 Linked List Single linked list atau linked list
Tiap elemen terdiri dari dua bagian, yaitu sebuah data dan sebuah pointer yang disebut dengan pointer next.

5 Linked List linked list terpencar-pencar di memori
Pointer dari elemen ke elemen berarti sebagai penjamin bahwa semua elemen dapat diakses.

6 Representasi Simpul struct node{ int info ; struct node *next ; } ;
typedef struct node *NODEPTR; NODEPTR head , tail ;

7 Linked List b c struct Node { char data; Node *next; }; Node *head;

8 Linked List b c struct Node { char data; Node *next; }; Node *head;
head->data head->next->data head b c head->next->next struct Node { char data; Node *next; }; Node *head; head->next

9 Linked List b c Pointer berikutnya dari node paling akhir = NULL
p=head->next; p->next p head b c p->data Pointer berikutnya dari node paling akhir = NULL Node pertama ditunjuk oleh pointer yang disebut head

10 linked list kosong head Linked List yang masih kosong dinyatakan dengan pointer head = NULL. Ingat bahwa head menunjuk ke node pertama linked list. Jika list kosong node pertama tidak ada head

11 Contoh ? ? ? #include <stdlib.h>
struct Node { char data; Node *next; }; int main ( ) { Node *head; Node *p; p = (Node*) malloc(sizeof(Node)); p->data = 'a'; (A) head = p; (B) p->data = 'b'; (C) p (A) a ? head p (B) a ? head p (C) a ? head b

12 Contoh ? ? ? … (C) head->next = p; (D)
p = (Node*) malloc(sizeof(Node)); p->data = 'c'; (E) head->next->next = p; p->next = NULL; (F) } p (C) a ? head b p (D) a head b ? p (E) a head b ? c p (F) a head b c

13 Latihan Gambar diagramnya ! … int main ( ) { Node *head = NULL;
Node *p; p = (Node*) malloc(sizeof(Node)); p ->data = 'a'; (A) p->next = (Node*) malloc(sizeof(Node)); p->next->data = 'b'; p->next->next = NULL; (B) head = (Node*) malloc(sizeof(Node)); head->data = 'c'; head->next = p; (C) }

14 Alokasi Simpul NODEPTR getnode(int d){ NODEPTR p ;
p = (NODEPTR) malloc(sizeof(struct node)); p->info = d ; p->next = NULL ; return(p); }

15 Membebaskan memori void free_node(NODEPTR p) { free(p); p = NULL ; }

16 Penelurusan linked list , 1
b c head p p p Pointer p menunjuk ke node saat ini. Setelah pemrosesan, p menunjuk ke node berikutnya p = p->next;

17 Penelurusan linked list, 2
b c head Dimulai dari node pertama (ditunjuk oleh head) Lakukan looping sampai p menunjuk ke NULL p = head; while (p!=NULL) { printf("%c", p->data); p = p->next; } p = head; while (p) { p = p->next; } Pastikan program menangani linked list kosong

18 Operasi pada Linked List
menambahkan node (insert) menghapus node (delete).

19 Operasi Insert insert sebagai node awal (head) dari linked list
insert setelah node tertentu insert sebelum node tertentu insert sebagai node akhir (tail) dari linked list

20 Insert sebagai node awal (head) dari linked list
void insertashead(NODEPTR insert) { insert->next=head; head = insert; } Kondisi Awal 1 2 2 1

21 Insert sebagai node akhir (tail)
Kondisi Awal void insertastail(NODEPTR insert) { if (head==NULL){ head = insert ; tail = head ; } else { tail->next = insert ; tail = tail->next ; 1 2 1 2

22 Insert sebagai node akhir (tail)
Kondisi Awal 1 1. tail->next = insert ; 2. tail = tail->next ; 2

23 Insert setelah node tertentu
void insertafternode(int x, NODEPTR insert) { NODEPTR after ; after = head; while (after->info != x) after = after->next; insert->next = after->next; after->next = insert; }

24 1 2

25 3 4

26 Insert sebelum node tertentu
void insertbeforenode(int x, NODEPTR insert) { NODEPTR before, prevbefore; if (head->info == x) insertashead(insert); else { before = head; do { prevbefore = before; before = before->next; }while (before->info != x); insert->next = before; prevbefore->next = insert; } Jika data yang dicari berada pada awal Linked List Jika data yang dicari tidak berada pada awal Linked List

27 1 2

28 3 4

29 Operasi Delete delete sebagai simpul pertama(head) dari linked list
  delete pada simpul tertentu   delete simpul terakhir

30 Penghapusan Node Pertama
Pointer first diarahkan pada data ke-2 Pointer p diarahkan pada data ke-1 Bebaskan pointer p (secara otomatis data ke-1 terhapus)

31 Penghapusan Node Pertama

32 Penghapusan Simpul Terakhir
Telusuri simpul s/d first->next = NULL Arahkan pointer p ke first Bebaskan pointer p->next (Simpul Terakhir) Arahkan p->next ke NULL

33

34 Penghapusan pada Node Tertentu – Data di Tengah
4 first 1 3 2 p

35 jika data yang akan dihapus berada pada awal Linked List
void del_node(int data) { NODEPTR del, beforedel ; del = head ; beforedel = del ; if (del->info == data ) { if (del->next == NULL) { head = NULL ; free_node(del); } else { head = head -> next ; jika data yang akan dihapus berada pada awal Linked List jika data yang akan dihapus berada pada awal Linked List dan hanya ada satu data jika data yang akan dihapus berada pada awal Linked List dan Linked List lebih dari satu data

36 else { while(del->info != data) { beforedel = del ; del=del->next; } if (del->next == NULL) beforedel->next=NULL; free_node(del); beforedel->next = del->next; jika data yang akan dihapus bukan pada awal Linked List untuk mencari data yang akan dihapus Jika data yg akan dihapus pada akhir Linked List Jika data yg akan dihapus bukan pada akhir Linked List


Download ppt "Single Linked List Yuliana Setiowati, S.Kom."

Presentasi serupa


Iklan oleh Google