RANGKUMAN STRUKTUR DATA

Taufik Akhmad Setiadi

Single Linked List Non Circular

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

}


0 komentar:

Posting Komentar