Anda di halaman 1dari 12

Praktikum Pemrograman Bahasa C

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 temp = first;

Simpan di variabel item

Jika first == NULL Ya Queue kosong

NODE insert_front(int item,NODE first) { NODE temp; temp=getnode(); temp->info=item; temp->link=first; return temp; }

Selama temp tidak sama dengan NULL

first=insert_front(item,first);
Cetak isi Queue

Letakkan elemen

Belum

Cetak output

Cek sudah NULL Sudah Berhenti

Berhenti

Praktikum Pemrograman Bahasa C

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

Kondisi setelah operasi 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 awal linked list adalah : Hubungkan baru->kanan agar menunjuk ke awal

Praktikum Pemrograman Bahasa C

Hubungkan awal->kiri agar menunjuk ke posisi pointer baru

Pindahkan pointer awal ke pointer baru

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

Kondisi setelah operasi 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.

Praktikum Pemrograman Bahasa C

Proses penambahan data di akhir linked list adalah : Hubungkan akhir->kanan agar menunjuk ke pointer baru

Hubungkan baru->kiri agar menunjuk ke posisi pointer akhir

Pindahkan pointer akhir ke pointer baru

3)

Menyisipkan simpul setelah simpul tertentu dari double linked list. Siapkan simpul yang hendak disisipkan

stl=head; while(stl->nama!=nama3) stl=stl->next;

Praktikum Pemrograman Bahasa C

sisip->before=stl; sisip->next=stl->next; stl->next->before=sisip; stl->next=sisip;

4) Menyisipkan simpul sebelum simpul tertentu dari double linked list.

sbl=head; while(sbl->nama!=nama3) sbl=sbl->next;

Praktikum Pemrograman Bahasa C

sisip->next=sbl; sisip->before=sbl->before; sbl->before->next=sisip; sbl->before=sisip;

Praktikum Pemrograman Bahasa C

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

nrp nama nilai prev next

nrp nama nilai prev next

nrp nama nilai prev next

tampung nrp nama nilai prev next

ujung

awal

awal = tampung

nrp nama awal nilai prev next

nrp nama nilai prev next

nrp nama nilai prev next

nrp nama nilai prev next

nrp nama nilai prev next

ujung->prev=tampung ujung->next=NULL tampung->next=ujung

tampung

ujung

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

awal

ujung = 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

awal

tampung = ujung

Praktikum Pemrograman Bahasa C


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

awal

tampung

nrp nama awal 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->prev

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

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=tampung->next

Program no 2
nrp nama nilai prev next nrp nama nilai prev next nrp nama nilai prev next

tampung

ujung

awal

nrp nama nilai prev next awal

nrp nama nilai prev next

nrp nama nilai prev next

nrp nama nilai prev next

nrp nama nilai prev next

ujung

Praktikum Pemrograman Bahasa C


nrp nama nilai prev next

awal = 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

ujung->prev=tampung ujung->next=NULL tampung->next=ujung

tampung

ujung

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

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

nrp nama nilai prev next

nrp nama nilai prev next


tempnrp

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

nrp nama nilai prev next

nrp nama nilai prev next

nrp nama nilai prev next

Praktikum Pemrograman Bahasa C

tempnrp

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

tempnama

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

tempnilai

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 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 nrp nama nilai prev next

nrp nama nilai prev next while(tampung!=NULL) tampung=tampung->next

nrp nama nilai prev next

nrp nama nilai prev next

nrp nama nilai prev next

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

Praktikum Pemrograman Bahasa C

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);

Praktikum Pemrograman Bahasa C

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

Anda mungkin juga menyukai