Simpul *P;
Simpul *HEAD;
Simpul *TAIL;
void inisialisasi(){
HEAD == NULL;
}
void buatSimpul(int X)
{
P = (Simpul *) malloc(sizeof(Simpul));
if (P != NULL)
{
P->data = X;
} else
printf("Pembuatan simpul gagal. \n");
}
~1~
void awal()
{
if (HEAD == NULL)
{
HEAD = P;
TAIL = P;
P->next = NULL;
P->prev = NULL;
}
else
printf("Linked List sudah ada");
}
void insertBelakang() {
TAIL
->next = P;
P->prev = TAIL;
TAIL = P; P->next = NULL;
}
void insertDepan()
{
if (HEAD != NULL)
{
P->next = HEAD;
HEAD->prev = P;
HEAD = P;
P->prev = NULL;
}
else
printf("Linked list belum ada");
}
void insertSetelah(int x)
{
Simpul *Q;
Q = HEAD;
do
Q = Q->next;
while (Q->data != x);
P->next = Q->next;
Q->next = P;
P->prev = Q;
}
void insertSebelum(int x)
{
Simpul *Q, *sebelumQ;
if (HEAD->data == x)
insertDepan();
~2~
else
{
Q = HEAD;
do{
sebelumQ = Q;
Q = Q->next;}
while (Q->data != x);
P->next = Q;
sebelumQ->next = P;
P->prev = sebelumQ;
}
}
void deleteDepan()
{
Simpul *Q;
Q = HEAD;
HEAD = Q->next;
free(Q);
HEAD->prev = NULL;
}
void deleteBelakang() {
Simpul *Q;
Q = HEAD;
while(Q->next != TAIL)
Q = Q->next;
free(TAIL);
TAIL = Q;
Q->next = NULL;
TAIL->prev=Q->prev;
}
void deleteSimpul(int x)
{
Simpul *Q, *sebelumQ;
if (HEAD == NULL)
printf("Linked list kosong\n");
else if (HEAD->data == x){
deleteDepan();
} else
{
Q = HEAD;
do {
sebelumQ = Q;
Q = Q->next;
} while (Q->data != x);
sebelumQ->next = Q->next;
Q->prev = sebelumQ;
free(Q);
~3~
}
}
void tampil(){
Simpul *Q, *R;
int pil;
Q=HEAD;
top:
system("cls");
R=HEAD;
printf("DAFTAR LINKED LIST : ");
while (R->next != NULL){
printf("%d, ", R->data);
R = R->next;
};
printf("%d\n", R->data);
printf("Sekarang simpul: ");
printf("%d\n", Q->data);
printf("1.Next\n2.Prev\n3.Menu\nMasukkan Pilihan: ");
scanf("%d", &pil);
switch (pil) {
case 1 :
if (Q->next != NULL){
Q = Q->next;
printf("%d, ", Q->data);
goto top;
break;
}
else
printf("Simpul Tidak ada");
getch();
goto top;
break;
case 2 :
if (Q->prev != NULL){
Q = Q->prev;
printf("%d, ", Q->data);
goto top;
break;
}else
printf("Simpul Tidak ada");
getch();
goto top;
break;
case 3 :
break;
default:
printf("pilihan tidak ada\n");
break;
}
~4~
}
int main(){
int x,y;
int pil;
inisialisasi();
switch(pil){
case 1 :
printf("\nMasukkan Simpul Depan: ");
scanf ("%d", &x);
buatSimpul(x);
insertDepan();
goto mulai;
break;
case 2 :
printf("\nMasukkan Simpul Tengah: ");
scanf ("%d", &x);
buatSimpul(x);
printf("\nSetelah Simpul: ");
scanf ("%d", &y);
insertSetelah(y);
goto mulai;
break;
case 3 :
printf("\nMasukkan Simpul Tengah: ");
scanf ("%d", &x);
~5~
buatSimpul(x);
printf("\nSebelum Simpul: ");
scanf ("%d", &y);
insertSebelum(y);
goto mulai;
break;
case 4 :
printf("\nMasukkan Simpul Belakang: ");
scanf ("%d", &x);
buatSimpul(x);
insertBelakang();
goto mulai;
break;
case 5 :
printf("\nHapus Depan\n");
deleteDepan();
goto mulai;
break;
case 6 :
printf("\nHapus Simpul: ");
scanf ("%d", &x);
deleteSimpul(x);
goto mulai;
break;
case 7 :
printf("\nHapus Belakang\n");
deleteBelakang();
goto mulai;
break;
case 8 :
tampil();
goto mulai;
break;
case 9 :
break;
default:
printf("pilihan tidak ada\n");
goto mulai;
}
Buatlah rangkuman mengenai apa saja perbedaan antara program minggu ini dengan
program pada minggu 8.
Pada program minggu 8 hanya menggunakan satu pointer yaitu pointer next,
sedangkan pada minggu ini menggunakan 2 pointer yaitu terdapat pointer prev
~6~
2. Buatlah sebuah program yang meniru cara kerja program pembuat slide. Dengan
mengasumsikan 1 halaman slide adalah 1 simpul doubly-linked list, buatlah deklarasi
struktur simpul linked list yang dapat memuat data 1 halaman slide yang berisi: no,
judul, isi. Salin deklarasi struktur yang Anda buat di sini.
typedef struct Node Simpul;
typedef struct {
int no;
char title[50];
char isi [500];
}slide;
typedef struct Node{
struct Node *prev;
slide data;
struct Node *next;
}Node;
Simpul *P;
Simpul *HEAD;
Simpul *TAIL;
void inisialisasi(){
HEAD = NULL;
~7~
}
void awal(){
if (HEAD == NULL){
HEAD = P;
TAIL = P;
P->next = NULL;
P->prev = NULL;
}
else
printf("Linked List sudah ada. \n");
}
void insertBelakang(){
TAIL->next = P;
P->prev = TAIL;
TAIL = P;
P->next = NULL;
}
~8~
P->prev = Q;
}
insertSebelum (slide x)
{
Simpul *Q, *sebelumQ;
if (HEAD->data.no == x.no)
insertDepan();
else
{
Q=HEAD;
do{
sebelumQ = Q;
Q=Q->next;
}
while (Q->data.no !=x.no);
P->next = Q;
sebelumQ->next = P;
P->prev = sebelumQ;
}
}
void deleteDepan(){
Simpul *Q;
Q=HEAD;
HEAD=Q->next;
free(Q);
HEAD->prev = NULL;
}
void deleteBelakang()
{
Simpul *Q;
Q=HEAD;
while(Q->next != TAIL)
Q=Q->next;
free(TAIL);
TAIL=Q;
Q->next = NULL;
TAIL->prev = Q->prev;
}
void deleteSimpul(slide x)
{
Simpul *Q, *sebelumQ;
if (HEAD == NULL)
printf("Linked list kosong\n");
else if (HEAD->data.no == x.no){
deleteDepan();
} else
~9~
{
Q = HEAD;
do {
sebelumQ = Q;
Q = Q->next;
} while (Q->data.no != x.no);
sebelumQ->next = Q->next;
Q->prev = sebelumQ;
free(Q);
}
}
void tampil(){
Simpul *Q, *R;
int pil;
Q=HEAD;
top:
system("cls");
R=HEAD;
switch (pil) {
case 1 :
if (Q->next != NULL){
Q = Q->next;
printf("%d\n", Q->data);
goto top;
break;
}
else
printf("Simpul Tidak Ada");
getch();
goto top;
break;
case 2 :
break;
default:
printf("Pilihan Tidak Ada\n");
break;
}
}
int main(){
int pil;
slide x, y;
~ 10 ~
inisialisasi();
x.no = 1;
printf("Program Slide \n");
printf("------------------- \n");
printf("Slide ke-%d \n", x.no);
printf("Masukkan Judul : ");
scanf ("%s", &x.title);
printf("Masukkan Isi Slide : ");
scanf ("%s", &x.isi);
buatSimpul(x);
awal();
mulai:
system("cls");
printf("MENU OPERASI PROGRAM SLIDE\n");
printf("++++++++++++++++++++++++++\n");
printf("1. Tambah Slide\n");
printf("2. Hapus Slide\n");
printf("3. Tampil Slide\n");
printf("4. Keluar\n");
printf("++++++++++++++++++++++++++\n");
printf("Masukkan Pilihan Anda : ");
scanf("%d", &pil);
switch(pil){
case 1 :
printf("\nTambah Slide \n");
x.no++;
printf("Slide ke-%d \n", x.no);
printf("Masukkan Judul : ");
scanf ("%s", &x.title);
printf("Masukkan Isi Slide : ");
scanf ("%s", &x.isi);
buatSimpul(x);
insertBelakang();
goto mulai;
break;
case 2 :
printf("\nHapus Slide\n");
printf("Masukkan Nomor Slide : ");
scanf ("%d", &x.no);
x.no--;
deleteSimpul(x);
goto mulai;
break;
case 3 :
tampil();
goto mulai;
break;
}
}
~ 11 ~
Tampilkan dan jelaskan hasil running program di sini.
~ 12 ~
Jika kita memilih next maka akan menampilkan slide berikutnya
EKSTRA NILAI
Buat prosedur tampil slide yang dapat menampilkan slide tidak hanya ke arah belakang
(menampilkan slide berikutnya), tetapi juga dapat menampilkan slide sebelumnya dengan
menekan tombol yang berbeda.
Salin kode C Anda di sini.
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
Simpul *P;
Simpul *HEAD;
Simpul *TAIL;
void inisialisasi(){
HEAD = NULL;
}
~ 13 ~
void awal(){
if (HEAD == NULL){
HEAD = P;
TAIL = P;
P->next = NULL;
P->prev = NULL;
}
else
printf("Linked List sudah ada. \n");
}
void insertBelakang(){
TAIL->next = P;
P->prev = TAIL;
TAIL = P;
P->next = NULL;
}
insertSebelum (slide x)
{
Simpul *Q, *sebelumQ;
if (HEAD->data.no == x.no)
insertDepan();
else
{
Q=HEAD;
do{
~ 14 ~
sebelumQ = Q;
Q=Q->next;
}
while (Q->data.no !=x.no);
P->next = Q;
sebelumQ->next = P;
P->prev = sebelumQ;
}
}
void deleteDepan(){
Simpul *Q;
Q=HEAD;
HEAD=Q->next;
free(Q);
HEAD->prev = NULL;
}
void deleteBelakang()
{
Simpul *Q;
Q=HEAD;
while(Q->next != TAIL)
Q=Q->next;
free(TAIL);
TAIL=Q;
Q->next = NULL;
TAIL->prev = Q->prev;
}
void deleteSimpul(slide x)
{
Simpul *Q, *sebelumQ;
if (HEAD == NULL)
printf("Linked list kosong\n");
else if (HEAD->data.title == x.title){
deleteDepan();
} else
{
Q = HEAD;
do {
sebelumQ = Q;
Q = Q->next;
} while (Q->data.title != x.title);
sebelumQ->next = Q->next;
Q->prev = sebelumQ;
free(Q);
}
}
~ 15 ~
void tampil(){
Simpul *Q, *R;
int pil;
Q=HEAD;
top:
system("cls");
R=HEAD;
switch (pil) {
case 1 :
if (Q->next != NULL){
Q = Q->next;
printf("%d\n", Q->data);
goto top;
break;
}
else
printf("Simpul Tidak Ada");
getch();
goto top;
break;
case 2 :
if (Q->prev != NULL){
Q = Q->prev;
printf("%d\n", Q->data);
goto top;
break;
}else
printf("Simpul Tidak Ada");
getch();
goto top;
break;
case 3 :
break;
default:
printf("Pilihan Tidak Ada\n");
break;
}
}
int main(){
int pil;
slide x, y;
inisialisasi();
~ 16 ~
x.no = 1;
printf("Program Slide \n");
printf("------------------- \n");
printf("Slide ke-%d \n", x.no);
printf("Masukkan Judul : ");
scanf ("%s", &x.title);
printf("Masukkan Isi Slide : ");
scanf ("%s", &x.isi);
buatSimpul(x);
awal();
mulai:
system("cls");
printf("MENU OPERASI PROGRAM SLIDE\n");
printf("++++++++++++++++++++++++++\n");
printf("1. Tambah Slide\n");
printf("2. Hapus Slide\n");
printf("3. Tampil Slide\n");
printf("4. Keluar\n");
printf("++++++++++++++++++++++++++\n");
printf("Masukkan Pilihan Anda : ");
scanf("%d", &pil);
switch(pil){
case 1 :
printf("\nTambah Slide \n");
x.no++;
printf("Slide ke-%d \n", x.no);
printf("Masukkan Judul : ");
scanf ("%s", &x.title);
printf("Masukkan Isi Slide : ");
scanf ("%s", &x.isi);
buatSimpul(x);
insertBelakang();
goto mulai;
break;
case 2 :
printf("\nDelete Simpul\n");
printf("Masukkan Nomor Slide : ");
scanf ("%d", &x.no);
x.no--;
deleteSimpul(x);
goto mulai;
break;
case 3 :
tampil();
goto mulai;
break;
}
}
~ 17 ~
Tampil dan jelaskan hasil running program di sini.
Jika kita memilih next maka akan menampilkan slide selanjutnya, jika kita memilih previous
maka akan menampilkan silde sebelumnya, dan jika kita memilih close maka slide akan
berhenti ditampilkan.
~ 18 ~