Presentasi sedang didownload. Silahkan tunggu

Presentasi sedang didownload. Silahkan tunggu

Single Linked List Yuliana Setiowati, S.Kom. Linked List tom p1 macao10mary p2 taipa14john p3 macao22ann p4 macao18 Misalnya kita buat banyak record student.

Presentasi serupa


Presentasi berjudul: "Single Linked List Yuliana Setiowati, S.Kom. Linked List tom p1 macao10mary p2 taipa14john p3 macao22ann p4 macao18 Misalnya kita buat banyak record student."— Transcript presentasi:

1 Single Linked List Yuliana Setiowati, S.Kom

2 Linked List tom p1 macao10mary p2 taipa14john p3 macao22ann p4 macao18 Misalnya kita buat banyak record student sebagai variabel dinamik, kita perlu mengorganisasi data kita, supaya efisien

3 Linked List tom p1 macao10 marytaipa14 johnmacao22 annmacao18 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 *head head c struct Node { char data; Node *next; }; Node *head; struct Node { char data; Node *next; }; Node *head;

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

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

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 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 = (Node*) malloc(sizeof(Node)); p->data = 'b'; (C) … #include 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 = (Node*) malloc(sizeof(Node)); p->data = 'b'; (C) … p (A) a ? head ? p (B) a ? head p (C) a ? head b ?

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

13 Latihan … 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) … } … 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) … } Gambar diagramnya !

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 head ca p Pointer p menunjuk ke node saat ini. Setelah pemrosesan, p menunjuk ke node berikutnya p = p->next; Pointer p menunjuk ke node saat ini. Setelah pemrosesan, p menunjuk ke node berikutnya p = p->next; pp

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

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

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

22 Insert sebagai node akhir (tail) 1. tail->next = insert ; 2. tail = tail->next ; Kondisi Awal 1 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 1.Telusuri simpul s/d first->next = NULL 2.Arahkan pointer p ke first 3.Bebaskan pointer p->next (Simpul Terakhir) 4.Arahkan p->next ke NULL

33

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

35 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 ; free_node(del); } 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); } else { beforedel->next = del->next; free_node(del); } 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. Linked List tom p1 macao10mary p2 taipa14john p3 macao22ann p4 macao18 Misalnya kita buat banyak record student."

Presentasi serupa


Iklan oleh Google