Double Linked List 1
Double Linked List 1
PENDAHULUAN LINKED LIST III 1. Buatlah flowchart untuk implementasi stack dengan linked list 2. Buatlah flowchart untuk implementasi queue dengan linked list
1)
Mulai /*Implementasi push pada stack*/ struct node { int info; struct node *link; }; typedef struct node *NODE; NODE x;
2)
Mulai /*Implementasi menampilkan queue*/ struct node { int info; struct node *link; }; typedef struct node *NODE; NODE x;
Masukkan elemen
NODE insert_front(int item,NODE first) { NODE temp; temp=getnode(); temp->info=item; temp->link=first; return temp; }
first=insert_front(item,first);
Cetak isi Queue
Letakkan elemen
Belum
Cetak output
Berhenti
PENDAHULUAN DOUBLE LINKED LIST I 1. Buatlah algoritma untuk menyisipkan simpul sebagai simpul awal dari double linked list. 2. Buatlah algoritma untuk menyisipkan simpul sebagai simpul akhir dari double linked list. 3. Buatlah algoritma untuk menyisipkan simpul setelah simpul tertentu dari double linked list. 4. Buatlah algoritma untuk menyisipkan simpul sebelum simpul tertentu dari double linked list. 1) Menyisipkan simpul sebagai simpul awal dari double linked list. Operasi ini berguna untuk menambahkan elemen baru di posisi pertama. Langkah pertama untuk penambahan data adalah pembuatan elemen baru dan pengisian nilai infonya. Pointer yang menunjuk ke data tersebut dipanggil dengan nama baru. Kondisi di setelah ada pembuatan elemen baru tersebut adalah : Ada 2 kondisi yang harus diperhatikan dalam penambahan data di awal yaitu : a. Ketika linked list masih kosong Kalau kondisi linked list masih kosong, maka elemen baru akan menjadi awal dan akhir linked list. Perhatikan gambar di bawah ini : Kondisi sebelum disisipkan
Operasi penambahan awal ketika linked list masih kosong adalah dengan mengisikan alamat pointer baru ke pointer awal dan pointer akhir. Lihat gambar di bawah ini. b. Ketika linked list sudah mempunyai data Kondisi linked list ketika sudah mempunyai data elemen dan elemen yang baru telah dibuat, dapat dilihat di gambar di bawah ini.
Proses penambahan data di awal linked list adalah : Hubungkan baru->kanan agar menunjuk ke awal
2) Menyisipkan simpul sebagai simpul akhir dari double linked list. Operasi ini berguna untuk menambahkan elemen baru di posisi akhir. Langkah pertama untuk penambahan data adalah pembuatan elemen baru dan pengisian nilai infonya. Pointer yang menunjuk ke data tersebut dipanggil dengan nama baru. Kondisi di setelah ada pembuatan elemen baru tersebut adalah : Ada 2 kondisi yang harus diperhatikan dalam penambahan data di akhir yaitu : a. Ketika linked list masih kosong Kalau kondisi linked list masih kosong, maka elemen baru akan menjadi awal dan akhir linked list. Perhatikan gambar di bawah ini : Kondisi sebelum penambahan
Operasi penambahan awal ketika linked list masih kosong adalah dengan mengisikan alamat pointer baru ke pointer awal dan pointer akhir. Lihat gambar di bawah ini. b. Ketika linked list sudah mempunyai data Kondisi linked list ketika sudah mempunyai data elemen dan elemen yang baru telah dibuat, dapat dilihat di gambar di bawah ini.
Proses penambahan data di akhir linked list adalah : Hubungkan akhir->kanan agar menunjuk ke pointer baru
3)
Menyisipkan simpul setelah simpul tertentu dari double linked list. Siapkan simpul yang hendak disisipkan
DOUBLE LINKED LIST 4.3. Soal-soal Tugas Pemrograman 1. Untuk latihan program no 1 dan 2 buatlah bagan dari proses dari double linked list, untuk setiap memasukkan data baru, membaca data dan pertukaran data. Jangan lupa juga memasukkan juga perubahan nilai pointernya. 2. Buatlah program dengan menggunakan double linked list untuk mengurutkan nilai secara descending, dapat menggunakan latihan program no 2 Penyelesaian 1) Program no 1
ujung
awal
awal = tampung
tampung
ujung
awal
ujung = tampung
awal
tampung = ujung
awal
tampung
tampung nrp nama nilai prev next nrp nama nilai prev next nrp nama nilai prev next nrp nama nilai prev next nrp nama nilai prev next
tampung=awal
Program no 2
nrp nama nilai prev next nrp nama nilai prev next nrp nama nilai prev next
tampung
ujung
awal
ujung
awal = tampung
tampung
ujung
awal
nrp nama nilai prev next b=a nrp nama nilai prev next nrp nama nilai prev next nrp nama nilai prev next
ujung = tampung
nrp nama nilai prev next
if(strcmp(a->nrp,b->nrp)>0) b=a b=b->next nrp nama nilai prev next a nrp nama nilai prev next b nrp nama nilai prev next nrp nama nilai prev next nrp nama nilai prev next
tempnrp
tempnrp
tempnama
tempnilai
tampung=awal nrp nama nilai prev next nrp nama nilai prev next nrp nama nilai prev next nrp nama nilai prev next nrp nama nilai prev next
tampung
tampung
2) Source : #include<stdio.h> #include<stdlib.h> #include<string.h> #include<conio.h> struct dtnilai { char nrp[10]; char nama[20]; double nilai; struct dtnilai *prev; struct dtnilai *next; }; 10
main() { char jawab[100]; char strnilai[10]; struct dtnilai *tampung; struct dtnilai *ujung; struct dtnilai *awal; struct dtnilai *a; struct dtnilai *b; int j=0; double tempnilai; while(1) { if(j==0) { awal=(struct dtnilai*)malloc(sizeof(struct dtnilai)); printf("\n\n PROGRAM DESCENDING NILAI\n"); printf(" ===DOUBLE LINKED LIST===\n"); printf("\n\n Nilai = ");gets(strnilai);awal->nilai=atof(strnilai); awal->prev=NULL; awal->next=NULL; tampung=awal; } else { ujung=(struct dtnilai*)malloc(sizeof(struct dtnilai)); printf("\n\n tampung->next=ujung; ujung->prev=tampung; ujung->next=NULL; tampung=ujung; } printf(" Ada data lagi (y/t) = ");gets(jawab); if((strcmp(jawab,"Y")==0||strcmp(jawab,"y")==0)) { j++;continue; } else if((strcmp(jawab,"T")==0||strcmp(jawab,"t")==0)) break; } //=============================================== 11 Nilai = ");gets(strnilai);ujung->nilai=atof(strnilai);
a=awal; do { b=a; b=b->next; while(b!=NULL) { if (a->nilai<b->nilai) { tempnilai=a->nilai; a->nilai=b->nilai; b->nilai=tempnilai; } else b=b->prev; } a=a->next; } while(a!=NULL); tampung=awal; while(tampung!=NULL) { printf(" tampung=tampung->next; } } Preview :
%6.2f\n",tampung->nilai);
12