Single Linked List Non
Circular adalah Node terakhir akan menunjuk ke NULL yang akan digunakan sebagai
kondisi berhenti pada saat pembacaan isi linked list.
BENTUK NODE SINGLE
LINKLED LIST NON CIRCULAR
Single : field
pointer-nya hanya satu arah, pada akhir not pointer-nya menunjuk NULL
Linked List : Node -
node tersebut saling terhubung satu sama lain
setiap node pada linked
list mempunyai field yang berisi pointer ke node berikutnya, dan juga memiliki
field yang berisi data. Mode terakhir akan menunjuk NULL yang akan digunakan
sebagai kondisi berhenti pada saat pembacaan isi linked list.
SINGLE LINKED LIST NON
CIRCULAR MENGGUNAKAN HEAD
Dibutuhkan satu buah
variabel pointer : head yang akan selaku menunjuk pada node
pertama
Deklarasi Pointer
Penunjuk Head Single Linked List sebagai berikut :
TNode*head
Menambah Node Di Depan
Penambahan node baru
akan dikaitan di node paling depan, namun pada daat pertama kali (data
masih kosong), maka penambahan data dilakukan dengan cara : node head
ditunjukan ke node baru tersebut
Prinsipnya adalah
mengkaitkan node baru dengan head, kemudian head akan menunjuk pada data baru
tersebut sehingga head akan tetap sekaku menjadi data terdepan.
Menambah Node Di
Belakang
Penambahan dilakukan
di belakang, namin pada saat pertama kali, node langsung ditunjuk oleh
head, membutuhkan pointer bantu untuk mengetahui node terbelakang kemudian
dikaitkan dengan node baru, perlu digunakan perulangan.
Menghapus Node Di Depan
Penghapusan node tidak
boleh dilakukan jika keadaan node sedang ditunjuk oleh pointer, maka harus
dilakukan penggunaan suatu pointer lain (hapus) yang digunakan untuk menunjuk
node yang akan dihapus, barulah kemusian menghapus pointer menggunakan perintah
delete. Sebelum data terdepan terhapus, terlebih dahulu head harus menunhuk ke
alamat berikutnya agar list tidak putus, jika head masih NULL berarti data
masih kosong.
Menghapus Node Di
Belakang
Membutuhkan pointer
bantu dan hapus. Pointer hapus digunakan untuk menunjuk node yang akan dihapus,
Pointer bantu untuk menunjuk node sebelum node yang akan dihapus yang akan
menjadi node yang terakhir. Pointer bantu digunakan untuk menunjuk ke nilai
NULL selalu bergerak sampai sebelum node yang akan dihapus kemudian pointer
hapus diletakan setelah pointer bantu. Selanjutnya pointer hapus akan menunjuk
ke NULL.
SINGLE LINKED LIST NON
CIRCULAR MENGGUNAKAN HEAS DAN TAIL
Dibutuhkan dua variabel
pointer head dan tail. Head selalu menunjuk ke node pertama,
sedangkan tail selalu menunjuk ke node terakhir
Kelebihan dari single
liked list dengan heag dan tail adalah pada penambahan data di belakang, hanya
dibutuhkan tail yang mengikat node baru saja tanpa harus menggunakan perulangan
pointer bantu.
Menghapus Node Di Depan
(Dengan Head dan Tail)
Penghapusan node tidak
boleh dilakukan jika keadaan node sadang ditunjuk oleh pointer, maka harus
dilakukan penunjukan terlebih dahulu dengan pointer hapus pada head, kemudian
dilakukan pergeseran head ke node berikutnya sehingga data setelah head menjadi
head baru, kemudian menghapus pointer hapus dengan menggunakan perintak delete.
Jika tail masih NULL maka berarti list masih kosong.
Menghapus Node Di
Belakang(Dengan Head Dan Tail)
Penghapusan tidak boleh
dilakukan jika keasaan node dedang ditunjuk oleh pointer, maka harus dilakukan
penunjukan terlebih dahulu dengan mengginakan variabel hapus pada tail. JIka
Tail masih NULL maka berarti list masih kosong. Dibutuhkan pointer bantu untuk
membantu pergeseran dari head ke node berikutnya dampai debelim tail, sehingga
tail dapat ditunjukan ke bantu, dan bantu tersebut akan nenjadi tail yang baru.
Setelah itu hapus pointer hapus dengan menggunakan menggunakn perintah delete.
Contoh Program:
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
void insertBelakang();
void menu();
void createDepanHead();
void hapusBelakang();
void hapusDepan();
struct node{ //deklarasi linked list
int info; //data tipe integer
struct node *link;//pointer link
};
struct node *first=NULL,*last=NULL;
void createDepanHead();
void display();
int isEmpty();
void main()
{
menu();
}
void menu()
{
system("cls");
int choice;
printf("\n\nEnter the choice:\n");
printf("\n\t1. Tambah Depan\n\t2. Display ...\n\t3. Tambah Belakang\n\t4. Hapus Depan\n\t5. Hapus Belakang\n");
printf("\nchoose :");
scanf("%d",&choice);
switch(choice){
case 1: createDepanHead(); break;
case 2: display(); break;
case 3: insertBelakang();break;
case 4: hapusDepan();break;
case 5: hapusBelakang();break;
default: system("cls"); printf("\n\n\n\n\n\t\t\t !!! invalid choice!!!\n");
getch();
menu();
}
}
int isEmpty(){//fungsi untuk mengetahui
//apakah LL kosong atau ada isinya
if(first == NULL) return 1;//jika firts==
//NULL maka return=1
else return 0;//selain itu maka return 0
}
void createDepanHead(){
struct node *new1=malloc(sizeof(struct node));
printf("Enter the item tobe created: ");
scanf("%d", &new1->info);
new1->link=NULL; if(isEmpty()==1){
first=new1;
first->link = NULL;
} else {
new1->link = first;
first = new1;
} printf("Data masuk\n");getch();
{menu();
}
}
void display(){
struct node *bantu;
bantu = first;
if(isEmpty()==0){
while(bantu!=NULL){
printf(" %d-> ",bantu->info);
bantu=bantu->link;
}printf("NULL");
printf("\n");
} else printf("Masih kosong\n");
getch();
{
menu();
}
}
void insertBelakang()
{
struct node *bantu,*new1=malloc(sizeof(struct node));
printf("Enter the item tobe created: ");
scanf("%d", &new1->info);
new1->link=NULL;
if(isEmpty()==1){
first=new1;
first->link = NULL;
} else { bantu=first; while(bantu->link!=NULL){ bantu=bantu->link=new1;} bantu->link=new1; } printf("Data masuk\n");getch();
{menu();
}
}
void hapusDepan (){
struct node *hapus;
int d;
if (isEmpty()==0){
if(first->link != NULL){
hapus = first;
d = hapus->info;
first = first->link;
} else {
d = first->info;
first = NULL;
}
printf("Data %d terhapus\n",d);
} else printf("Masih kosong\n");getch();
{
menu();
}
}
void hapusBelakang(){
struct node *hapus,*bantu;
int d;
if (isEmpty()==0){
if(first->link != NULL){
bantu = first;
while(bantu->link->link!=NULL){
bantu = bantu->link;
}
hapus = bantu->link;
d = hapus->info;
bantu->link = NULL;
} else {
d = first->info;
first = NULL;
}
printf("%d terhapus\n",d);
} else printf("Masih kosong\n");getch();
{
menu();
}
}
#include <stdlib.h>
#include <conio.h>
void insertBelakang();
void menu();
void createDepanHead();
void hapusBelakang();
void hapusDepan();
struct node{ //deklarasi linked list
int info; //data tipe integer
struct node *link;//pointer link
};
struct node *first=NULL,*last=NULL;
void createDepanHead();
void display();
int isEmpty();
void main()
{
menu();
}
void menu()
{
system("cls");
int choice;
printf("\n\nEnter the choice:\n");
printf("\n\t1. Tambah Depan\n\t2. Display ...\n\t3. Tambah Belakang\n\t4. Hapus Depan\n\t5. Hapus Belakang\n");
printf("\nchoose :");
scanf("%d",&choice);
switch(choice){
case 1: createDepanHead(); break;
case 2: display(); break;
case 3: insertBelakang();break;
case 4: hapusDepan();break;
case 5: hapusBelakang();break;
default: system("cls"); printf("\n\n\n\n\n\t\t\t !!! invalid choice!!!\n");
getch();
menu();
}
}
int isEmpty(){//fungsi untuk mengetahui
//apakah LL kosong atau ada isinya
if(first == NULL) return 1;//jika firts==
//NULL maka return=1
else return 0;//selain itu maka return 0
}
void createDepanHead(){
struct node *new1=malloc(sizeof(struct node));
printf("Enter the item tobe created: ");
scanf("%d", &new1->info);
new1->link=NULL; if(isEmpty()==1){
first=new1;
first->link = NULL;
} else {
new1->link = first;
first = new1;
} printf("Data masuk\n");getch();
{menu();
}
}
void display(){
struct node *bantu;
bantu = first;
if(isEmpty()==0){
while(bantu!=NULL){
printf(" %d-> ",bantu->info);
bantu=bantu->link;
}printf("NULL");
printf("\n");
} else printf("Masih kosong\n");
getch();
{
menu();
}
}
void insertBelakang()
{
struct node *bantu,*new1=malloc(sizeof(struct node));
printf("Enter the item tobe created: ");
scanf("%d", &new1->info);
new1->link=NULL;
if(isEmpty()==1){
first=new1;
first->link = NULL;
} else { bantu=first; while(bantu->link!=NULL){ bantu=bantu->link=new1;} bantu->link=new1; } printf("Data masuk\n");getch();
{menu();
}
}
void hapusDepan (){
struct node *hapus;
int d;
if (isEmpty()==0){
if(first->link != NULL){
hapus = first;
d = hapus->info;
first = first->link;
} else {
d = first->info;
first = NULL;
}
printf("Data %d terhapus\n",d);
} else printf("Masih kosong\n");getch();
{
menu();
}
}
void hapusBelakang(){
struct node *hapus,*bantu;
int d;
if (isEmpty()==0){
if(first->link != NULL){
bantu = first;
while(bantu->link->link!=NULL){
bantu = bantu->link;
}
hapus = bantu->link;
d = hapus->info;
bantu->link = NULL;
} else {
d = first->info;
first = NULL;
}
printf("%d terhapus\n",d);
} else printf("Masih kosong\n");getch();
{
menu();
}
}
0 komentar:
Posting Komentar