Jumat, 20 Juli 2012

Struktur dan Linear

Struktur data adalah cara menyimpan atau merepresentasikan data didalam komputer agar bisa dipakai secara efisien. Sedangkan data adalah representasi dari fakta dunia nyata. Fakta atau keterangan tentang kenyataan yang disimpan, direkam atau direpresentasikan dalam bentuk tulisan, suara, gambar, sinyal atau simbol.
Secara garis besar type data dapat dikategorikan menjadi:
Type data sederhana.
  • Type data sederhana tunggal, misalnya Integer, real, boolean dan karakter.
  • Type data sederhana majemuk, misalnyaString
Struktur Data, meliputi:
Linier : Stack, Queue, sertaList dan Multilist
Non Linier : Pohon Biner dan Graph
Pemakaian struktur data yang tepat didalam proses pemrograman akan menghasilkan algoritma yang lebih jelas dan tepat, sehingga menjadikan program secara keseluruhan lebih efisien dan sederhana.
Struktur
data yang standar yang biasanya digunakan dibidang informatika adalah:
* List linier (Linked List) dan variasinya
* Multilist
* Stack (Tumpukan)
* Queue (Antrian)
* Tree ( Pohon)
* Graph ( Graf )
REVIEW RECORD (REKAMAN)
Disusun oleh satu atau lebih field. Tiap field menyimpan data dari tipe dasar tertentu atau dari tipe bentukan lain yang sudah didefinisikan sebelumnya. Nama rekaman ditentukan oleh pemrogram.
Rekaman disebut juga tipe terstruktur

DOUBLE LINKED LIST CIRCULAR (DLLC) 
Definisi
Double Linked List Circular adalah linked list dengan menggunakan pointer, dimana setiap node memiliki 3 field, yaitu 1 field pointer yang menunjuk pointer berikutnya (next), 1 field menunjuk pointer sebelumnya (prev), serta sebuah field yang berisi data untuk node tersebut. Double Linked List Circular pointer next dan prev-nya menunjuk ke dirinya sendiri secara circular.
 
Bentuk Node DLLC


Pengertian:
Double : field pointer-nya terdiri dari dua buah dan dua arah, yaitu prev dan next.
Linked List : node-node tersebut saling terhubung satu sama lain.
Circular : pointer next dan prev-nya menunjuk ke dirinya sendiri.


Ilustrasi Double Linked List Circular
 
Setiap node pada linked list mempunyai field yang berisi data dan pointer ke node berikutnya dan ke node sebelumnya.
Untuk pembentukan node baru, mulanya pointer next dan prev akan menunjuk ke dirinya sendiri.
Jika sudah lebih dari satu node, maka pointer prev akan menunjuk ke node sebelumnya, dan pointer next akan menunjuk ke node sesudahnya.
 
Pembuatan Double Linked List Circular
Deklarasi node, dibuat dari struct berikut ini:


Penjelasan:
Pembuatan struct bernama TNode yang berisi 3 field, yaitu field data bertipe integer dan field next dan prev yang bertipe pointer dari Tnode.
Setelah pembuatan struct, buat variabel haed yang bertipe pointer dari TNode yang berguna sebagai kepala linked list.

Pembuatan Node Baru:
Digunakan keyword new yang berarti mempersiapkan sebuah node baru berserta alokasi memorinya, pointer prev dan next menunju ke dirinya sendiri.

 
Double Linked List Circular Menggunakan Head 
Menggunakan 1 pointer head.
Head selalu menunjuk node pertama.



Deklarasi Pointer Head:
Manipulasi linked list tidak bisa dilakukan langsung ke node yang dituju, melainkan harus melalui node pertama dalam linked list. Deklarasinya sebagai berikut:

Penambahan Data
Penambahan Data di Depan:
Penambahan node baru akan dikaitan di node paling depan, namun pada saat pertama kali (data masih kosong), maka penambahan data dilakukan pada head-nya.

Pada prinsipnya adalah mengkaitkan data baru dengan head, kemudian head akan menunjuk pada data baru tersebut sehingga head akan tetap selalu menjadi data terdepan. Dibutuhkan pointer bantu yang digunakan untuk menunjuk node terakhir (headprev) yang akan digunakan untuk mengikat list dengan node terdepan.
 


#include <iostream.h>
#include <conio.h>
#include <stdio.h>
#include <alloc.h>

int pil;
void pilih();
void buat_baru();
void tambah_belakang();
void tambah_depan();
void hapus_belakang();
void hapus_depan();
void tampil();


struct simpul
{
    char nim[8], nama [20];
    int umur;
    struct simpul *kiri, *kanan;
} mhs, *baru, *awal=NULL, *akhir=NULL,*hapus,*bantu;

int main()
{
    do
    {
        clrscr();
        cout<<"MENU DOUBLE LINKEDLIST"<<endl;
        cout<<"1. Tambah Depan"<<endl;
        cout<<"2. Tambah Belakang"<<endl;
        cout<<"3. Hapus Depan"<<endl;
        cout<<"4. Hapus Belakang"<<endl;
        cout<<"5. Tampilkan"<<endl;
        cout<<"6. Selesai"<<endl;
        cout<<"Pilihan Anda : ";
        cin>>pil;
        pilih();
    } while(pil!=6);
    return 0;
}

void pilih()
{
    if(pil==1)
        tambah_depan();
    else if(pil==2)
        tambah_belakang();
    else if(pil==3)
        hapus_depan();
     else if(pil==4)
        hapus_belakang();
      else if(pil==5)
        tampil();
    else
        cout<<"selesai";
}

void buat_baru()
{
    baru=(simpul*)malloc(sizeof(struct simpul));
    cout<<"input nim   : ";cin>>baru->nim;
    cout<<"input nama  : ";cin>>baru->nama;
    cout<<"input umur  : ";cin>>baru->umur;
    baru->kiri=NULL;
    baru->kanan=NULL;
}

void tambah_belakang()
{
    buat_baru();
    if(awal==NULL)
    {
        awal=baru;
        akhir=baru;
    }
    else
    {
        akhir->kanan=baru;
        baru->kiri=akhir;
        akhir=baru;
    }
    cout<<endl<<endl;
    tampil();
}

void tambah_depan()
{
    buat_baru();
    if(awal==NULL)
    {
        awal=baru;
        akhir=baru;
    }
    else
    {
        baru->kanan=awal;
        awal->kiri=baru;
        awal=baru;
    }
    cout<<endl<<endl;
    tampil();
}

void hapus_depan()
{
    if (awal==NULL)
        cout<<"Kosong";
    else if (awal->kanan==NULL)
    {
      hapus=awal;
      awal=NULL;
      akhir=NULL;
      free(hapus);
    }
    else
    {
        hapus=awal;
        awal=hapus->kanan;
        awal->kiri=NULL;
        free(hapus);
    }
    cout<<endl<<endl;
    tampil();
}

void hapus_belakang()
{
    if (awal==NULL)
        cout<<"Kosong";
    else if (awal->kanan==NULL)
    {
      hapus=awal;
      awal=NULL;
      akhir=NULL;
      free(hapus);
    }
    else
    {
     hapus=akhir;
     akhir=hapus->kiri;
     akhir->kanan=NULL;
     free(hapus);
    }
    cout<<endl<<endl;
    tampil();
}

void tampil()
{
     if (awal==NULL)
          cout<<"Kosong";
     else
     {
         bantu=awal;
         while(bantu!=NULL)
         {
            cout<<"nim : "<<bantu->nim;
            cout<<"  nama : "<<bantu->nama;
            cout<<"  umur : "<<bantu->umur<<endl;
            bantu=bantu->kanan;
         }
     }
     getch();
}


Double Linked List Non Circular ( DLLNC )

DLLNC "Double linked list non circular" adalah Double Linked List yang memiliki 2 buah pointer yaitu pointer next dan prev.
Pointer next menunjuk pada node setelahnya dan pointer prev menunjuk pada node sebelumnya.
Pengertian:
Double : artinya field pointer-nya dua buah dan dua arah, ke node sebelum dan sesudahnya.
Linked List : artinya node-node tersebut saling terhubung satu sama lain.
Non Circular : artinya pointer prev dan next-nya akan menunjuk pada NULL.

Ilustrasi DLLNC



Setiap node pada linked list mempunyai field yang berisi data dan pointer ke node berikutnya & ke node sebelumnya
Untuk pembentukan node baru , mulanya pointer next dan prev akan menunjuk ke nilai NULL
Selanjutnya pointer prev akan menunjuk ke node sebelumnya , dan pointer next akan menunjuk ke node selanjutnya pada list.


Deklarasi dan node baru DLLNC

Deklarasi node
Dibuat dari struct berikut ini :
typedef struct TNode {
int data ;
TNode *next ;
Tnode * prev ;
};

Pembentukan node baru
Digunakan keyword new yang berarti mempersiapkan sebuah node baru berserta alokasi memorinya .
TNode * baru ;
baru = new TNode ;
baru ->data = databaru ;
baru ->next = NULL;
baru -> prev = NULL; 

contoh :
#include "stdio.h"
#include "stdlib.h"
#include "conio.h"
struct node{
struct node *previous;
int info;
struct node *next;
};
typedef struct node *simpul;
void main()
{
simpul baru, awal=NULL, akhir=NULL, temp;
int pilih;
do
{
cout("MENU\n");
cout("1. Isi depan\n");
cout("2. tampil\n");
cout("3. cari\n");
cout("4. hapus Depan\n");
cout("PILIH: ");
scanf("%d", &pilih);
switch(pilih)
{
case 1:
int data;
cout("Data Masuk: ");
scanf("%i", &data);
baru = (simpul) malloc(sizeof (struct node));
baru->info = data;
baru->next = NULL;
baru->previous = NULL;
if (awal == NULL)
{
awal = baru;
akhir = baru;
}
else
{
baru->next = awal;
awal->previous = baru;
awal = baru;
}
break;
case 2:
clrscr();
cout("Dari AWAL\n");
temp = awal;
while(temp!=NULL)
{
cout("%i ", temp->info);
temp = temp->next;
}
cout("\nDari AKHIR\n");
temp = akhir;
while(temp!=NULL)
{
cout("%i ", temp->info);
temp = temp->previous;
}
cout("\n");
break;
case 3:
clrscr();
int cari;
cout("Cari Angka: ");
scanf("%i", &cari);
temp = awal;
while((temp!=NULL)&&(temp->info!=cari))
{
temp = temp->next;
}
if(temp != NULL && temp->info == cari)
cout("Data Ditemukan");
else
cout("Data Tidak Ditemukan");
cout("\n");
break;
case 4:
clrscr();
temp = awal;
awal = awal->next;
if (awal != NULL)
awal->previous = NULL;
if (awal == NULL)
akhir = NULL;
free(temp);
break;
}
}while (pilih!=5);
}


Single Linked List Circular
Single Linked List Circular (SLLC) adalah Single Linked List yang pointer nextnya menunjuk pada dirinya sendiri. Jika Single Linked List tersebut terdiri dari beberapa node, maka pointer next pada node terakhir akan menunjuk ke node terdepannya.
Pengertian:
Node : rangkaian beberapa simpul
Single : artinya field pointer-nya hanya satu buah saja dan satu arah.
Linked List : artinya node-node tersebut saling terhubung satu sama lain.
Circular : artinya pointer next-nya akan menunjuk pada dirinya sendiri sehingga berputar
picture1
Ilustrasi SLLC
Setiap node pada linked list mempunyai field yang berisi pointer ke node berikutnya, dan juga memiliki field yang berisi data. Pada akhir linked list, node terakhir akan menunjuk ke node terdepan sehingga linked list tersebut berputar.
picture2
Deklarasi:
Deklarasi node dibuat dari struct berikut ini:
typedef struct TNode{
int data;
TNode *next;
};
Pembentukan node baru
Digunakan keyword new yang berarti mempersiapkan sebuah node baru
berserta alokasi memorinya.
TNode *baru;
baru = new TNode;
baru->data = databaru;
baru->next = baru;
Dibutuhkan satu buah variabel pointer: head
Head akan selalu menunjuk pada node pertama
picture3
Penambahan data di depan
Penambahan node baru akan dikaitan di node paling depan, namun pada saat pertama kali (data masih kosong), maka penambahan data dilakukan pada head nya.
Pada prinsipnya adalah mengkaitkan data baru dengan head, kemudian head akan menunjuk pada data baru tersebut sehingga head akan tetap selalu menjadi data terdepan. Untuk menghubungkan node terakhir dengan node terdepan dibutuhkan pointer bantu.

HEAD Single Linked List Circular
Penambahan data di depan
picture4

Penambahan data di depan
void insertDepan(int databaru){
TNode *baru,*bantu;
baru = new TNode;
baru->data = databaru;
baru->next = baru;
if(isEmpty()==1){
head=baru;
head->next=head;
}
else {
bantu = head;
while(bantu->next!=head){
bantu=bantu->next;
}
baru->next = head;
head = baru;
bantu->next = head;
}
printf(“Data masuk\n“);
}
Penambahan data di belakang
Penambahan data dilakukan di belakang, namun pada saat pertama kali data langsung ditunjuk pada head-nya.
Penambahan di belakang lebih sulit karena kita membutuhkan pointer bantu untuk mengetahui data terbelakang, kemudian dikaitkan dengan data baru. Untuk mengetahui data terbelakang perlu digunakan perulangan.
picture5 picture6
Penambahan data di belakang
void insertBelakang (int databaru){
TNode *baru,*bantu;
baru = new TNode;
baru->data = databaru;
baru->next = baru;
if(isEmpty()==1){
head=baru;
head->next=head;
}
else {
bantu = head;
while(bantu->next != head){
bantu=bantu->next;
}
bantu->next = baru;
baru->next = head;
}
printf(“Data masuk\n“);
}

Operasi Penghapusan
Penghapusan node dilakukan dengan memutus rantai node kemudian menghapus node. Jika node berada di tengah rangkaian, rangkaian yang terputus perlu disambung kembali. Untuk memudahkan penghapusan simpul dibutuhkan dua cursor sebagai simpul bantu. Selain cursor juga dibutuhkan simpul head sebagai acuan awal simpul dalam rangkaian.

Berikut langkah langkah untuk menghapus simpul dalam rangkaian:
  • Buat cursor bantu yang menunjuk ke awal node(simpul).
  • Pindahkan cursor ke node berikutnya
  • Putus sambungan awal node dengan node berikutnya.
  • Hapus rangkaian
  • Jika berada di akhir rangkaian, putuskan dari rangkaian sebelumnya
  • Jika di tengah rangkaian, pindahkan penunjukan node berikutnya, atau di akhir, atau setelah node yang akan dihapus
Ilustrasi Hapus Depan
picture7
Ilustrasi Hapus Depan
void hapusDepan (){
TNode *hapus,*bantu;
if (isEmpty()==0){
int d;
hapus = head;
d = head->data;
if(head->next != head){
bantu = head;
while(bantu->next!=head){
bantu=bantu->next;
}
head = head->next;
delete hapus;
bantu->next = head;
}else{
head=NULL;
}
printf(“%d terhapus\n“,d);
} else printf(“Masih kosong\n“);
}
Ilustrasi Hapus Belakang
picture8
Ilustrasi Hapus Belakang
void hapusBelakang(){
TNode *hapus,*bantu;
if (isEmpty()==0){
int d;
hapus = head;
if(head->next == head){
head = NULL;
}else{
bantu = head;
while(bantu->next->next != head){
bantu = bantu->next;
}
hapus = bantu->next;
d = bantu->data;
bantu->next = head;
delete hapus;
}
printf(“%d terhapus\n“,d);
} else printf(“Masih kosong\n“);
}
Contoh Coding Stack Dengan Linked List
#include <iostream.h>
#include <conio.h>
/* membuat linked list */
typedef struct myLinkedList {
char nim[10];
char nama[35];
int nilai;
myLinkedList *next;
};
myLinkedList *head;
/* keadaan awal */
void init() {
head = NULL;
}
/* fungsi untuk mengecek linked list
* apakah kosong atau tidak
* jika kosong maka bernilai 1
* jika tidak kosong maka bernilai 0
*/
int paKosong() {
if (head == NULL) return 1;
else return 0;
}
/**
* fungsi untuk menambahkan data dari depan node
*/
void tambahDepan() {
myLinkedList *baru;
baru = new myLinkedList;
cout << “Masukkan Data lengkap di bawah ini : ” << endl;
cout << “NIM : “; cin >> baru->nim;
cout << “Nama : “; cin >> baru->nama;
cout << “Nilai : “; cin >> baru->nilai;
baru->next = NULL;
if (paKosong() == 1) {
head = baru;
head->next = NULL;
} else {
baru->next = head;
head = baru;
}
}
/**
* fungsu untuk menambahkan data dari depan node
*/
void tambahBelakang() {
myLinkedList *baru, *bantu;
baru = new myLinkedList;
cout << “Masukkan Data lengkap di bawah ini : ” << endl;
cout << “NIM : “; cin >> baru->nim;
cout << “Nama : “; cin >> baru->nama;
cout << “Nilai : “; cin >> baru->nilai;
baru->next = NULL;
if (paKosong() == 1) {
head = baru;
head->next = NULL;
} else {
bantu = head;
while (bantu->next != NULL) {
bantu = bantu->next;
}
bantu->next = baru;
}
}
/**
* fungsi untuk menghapus dari depan node
*/
void hapusDepan() {
myLinkedList *hapus;
char *data;
if (paKosong() == 0) {
if (head->next != NULL) {
hapus = head;
data = hapus->nim;
head = head->next;
delete hapus;
} else {
data = head->nim;
head = NULL;
}
cout << data << ” sudah terhapus \n”;
} else {
cout << “Data Masih kosong..\n”;
}
cout << “Tekan Enter untuk kembali ke Menu!”;
getch();
}
/**
* fungsi untuk menghapus dari belakang node
*/
void hapusBelakang() {
myLinkedList *hapus, *bantu;
char *data;
if (paKosong() == 0) {
if (head->next != NULL) {
bantu = head;
while(bantu->next->next != NULL) {
bantu = bantu->next;
}
hapus = bantu->next;
data = hapus->nim;
bantu->next = NULL;
delete hapus;
} else {
data = head->nim;
head = NULL;
}
cout << data << ” sudah terhapus… ” << endl;
} else {
cout << “Data masih kosong…” << endl;
}
cout << “Tekan Enter untuk kembali ke Menu!”;
getch();
}
/**
* fungsi untuk menampilkan data linked list
*/
void tampilData() {
int no = 1;
myLinkedList *bantu;
bantu = head;
if (paKosong() == 0) {
while (bantu != NULL) {
cout << “No. : ” << no << endl;
cout << “NIM : ” << bantu->nim << endl;
cout << “Nama : ” << bantu->nama << endl;
cout << “Nilai : ” << bantu->nilai << endl << endl;
no++;
bantu = bantu->next;
}
cout << endl;
} else {
cout << “Data masih kosong ” << endl;
}
cout << “Tekan Enter untuk kembali ke menu!”;
getch();
}
/**
* fungsi Menu, Untuk menentukan linked list mana
* yang dipilih
*/
int menu() {
int pilihan;
cout << “+———————-+\n”;
cout << “| MENU PILIHAN |\n”;
cout << “+———————-+\n”;
cout << “| 1. Tambah Depan |\n”;
cout << “| 2. Tambah Belakang |\n”;
cout << “| 3. Hapus Depan |\n”;
cout << “| 4. Hapus Belakang |\n”;
cout << “| 5. Tambah Tengah |\n”;
cout << “| 6. Hapus Tengah |\n”;
cout << “| 7. TampilData |\n”;
cout << “| 8. Keluar |\n”;
cout << “+———————-+\n”;
cout << “| PILIHAN ANDA ? [ ] |\n”;
cout << “+———————-+\n”;
cin >> pilihan;
return pilihan;
}
/**
* fungsi operasi data
*/
void operasiData() {
int pilih;
do {
pilih = menu();
switch (pilih) {
case 1 :
tambahDepan();
break;
case 2 :
tambahBelakang();
break;
case 3 :
hapusDepan();
break;
case 4 :
hapusBelakang();
break;
case 5 :
tampilData();
break;
case 6:
cout << “Terima kasih coy!!!”;
break;
}
} while (pilih != 6);
}
/**
* PROGRAM UTAMA
*/
void main() {
init();
operasiData();
}

Program Single Linked List non Circular
#include <iostream.h> //File Header Iostream
#include <conio.h> //File Header Conio 
typedef struct TNode { //Deklarasi Linked List
int data;   //data bertipe integer
TNode *next; //pointer Next
};  //penutup deklarasi
TNode *head;  //disini menggunakan head sebagai pointer utama dari linked list
void init(){  //Fungsi untuk inisialisasi awal linked list
head=NULL;  //Untuk pertama kali, head bernilai NULL
}
int IsEmpty(){  //Fungsi untuk mengetahui apakah Linked list kosong atau ada isinya
if(head==NULL)  // apabila head==NULL, maka return 1
return 1;
else
return 0;  // Selain itu maka Return 0
}
void insertdepan(int n){ //Fungsi untuk menambahkan data baru (n didapat dari input di program utama (main))
TNode *baru;  //Disini menggunakan baru sebagai pointer TNode nya
baru=new TNode; 
baru->data=n;  //pointer baru->data berisi nilai variabel n
baru->next=NULL;  // pointer baru->next berisi NULL
if(IsEmpty()==1){ //periksa apakah linked list bernilai, jika return 1(tidak bernilai), maka akan mengeksekusi perintah hingga ‘}’
head=baru; //Nilai head= Nilai baru
head->next=NULL; 
}
else {   // Jika return 0(linked list bernilai), maka akan mengeksekusi perintah berikut hingga ‘}’
baru->next=head;
head=baru;
}
cout<<”Data Terisi”;
}
void insertbelakang(int n){    //Fungsi untuk insert Belakang(Menambahkan data di belakang data lama)
TNode *baru,*bantu;  //Pointer yang digunakan yaitu baru dan bantu
baru=new TNode; 
baru->data=n;
baru->next=NULL;
if(IsEmpty()==1){
head=baru;
head->next=NULL;
}
else {
bantu=head;
while(bantu->next!=NULL){
bantu=bantu->next;
}
bantu->next=baru;
}
cout<<”Data Terisi”;
}
void tampil(){   //Fungsi untuk menampilkan linked list yang telah di input / di delete
TNode *bantu;  //pointer yang digunakan yaitu bantu
bantu=head;  // Nilai bantu= Nilai yang ada di head
if(IsEmpty()==0){  // periksa apakah return 0(bernilai)
while(bantu!=NULL){ //Selama bantu tidak sama dengan NULL, maka di eksekusi
cout<<bantu->data<<endl;  // tampilkan di monitor nilai bantu->data
bantu=bantu->next;  //Nilai bantu= nilai bantu selanjutnya
}
}
else
cout<<”Masih Kosong”<<endl;
}
void hapusdepan(){ //Fungsi untuk menghapus Nilai paling depan
TNode *hapus;
int d;
if(IsEmpty()==0){  //periksa apakah return 0(ada nilai)
if(head!=NULL){ // jika head tidak sama dengan Null maka :
hapus=head;  // pointer hapus= head
d=hapus->data;  //nilai dari d = nilai dari hapus->data
head=hapus->next;  // Nilai head sekarang berisi nilai hapus->next
delete hapus;  //fungsi untuk menghapus nilai yang ada  di pointer hapus
}
cout<<d<<” Terhapus”<<endl;
}
else
cout<<”Masih Kosong”<<endl;
}
main(){  // Fungsi Utama dari program
int pil;
do{
clrscr();
int n;
cout<<”1.Insert Depan”<<endl;
cout<<”2.Insert Belakang”<<endl;
cout<<”3.Display”<<endl;
cout<<”4.Delete”<<endl;
cout<<”5.Exit”<<endl;
cout<<”Masukan Pilihan Anda :”;pil=getche();
switch(pil){
case’1′: clrscr();
cout<<”Masukan data :”;cin>>n;
IsEmpty();
insertdepan(n);
break;
case’2′: clrscr();
cout<<”Masukan data :”;cin>>n;
IsEmpty();
insertbelakang(n);
break;
case’3′: clrscr();
IsEmpty();
tampil();
break;
case’4′: clrscr();
IsEmpty();
hapusdepan();
break;
}
getch();
}while(pil!=’5′);
return 0;
}



contoh yang ke 2 :

/* membuat linked list */
typedef struct myLinkedList {
char nim[10];
char nama[35];
int nilai;
myLinkedList *next;
};
myLinkedList *head;
/* keadaan awal */
void init() {
head = NULL;
}
/* fungsi untuk mengecek linked list
* apakah kosong atau tidak
* jika kosong maka bernilai 1
* jika tidak kosong maka bernilai 0
*/
int paKosong() {
if (head == NULL) return 1;
else return 0;
}
/**
* fungsi untuk menambahkan data dari depan node
*/
void tambahDepan() {
myLinkedList *baru;
baru = new myLinkedList;
cout << “Masukkan Data lengkap di bawah ini : ” <<>> baru->nim;
cout << “Nama : “; cin >> baru->nama;
cout << “Nilai : “; cin >> baru->nilai;
baru->next = NULL;
if (paKosong() == 1) {
head = baru;
head->next = NULL;
} else {
baru->next = head;
head = baru;
}
}
/**
* fungsu untuk menambahkan data dari depan node
*/
void tambahBelakang() {
myLinkedList *baru, *bantu;
baru = new myLinkedList;
cout << “Masukkan Data lengkap di bawah ini : ” <<>> baru->nim;
cout << “Nama : “; cin >> baru->nama;
cout << “Nilai : “; cin >> baru->nilai;
baru->next = NULL;
if (paKosong() == 1) {
head = baru;
head->next = NULL;
} else {
bantu = head;
while (bantu->next != NULL) {
bantu = bantu->next;
}
bantu->next = baru;
}
}
/**
* fungsi untuk menghapus dari depan node
*/
void hapusDepan() {
myLinkedList *hapus;
char *data;
if (paKosong() == 0) {
if (head->next != NULL) {
hapus = head;
data = hapus->nim;
head = head->next;
delete hapus;
} else {
data = head->nim;
head = NULL;
}
cout <<>
/**
* fungsi untuk menghapus dari belakang node
*/
void hapusBelakang() {
myLinkedList *hapus, *bantu;
char *data;
if (paKosong() == 0) {
if (head->next != NULL) {
bantu = head;
while(bantu->next->next != NULL) {
bantu = bantu->next;
}
hapus = bantu->next;
data = hapus->nim;
bantu->next = NULL;
delete hapus;
} else {
data = head->nim;
head = NULL;
}
cout <<>
cout << “Tekan Enter untuk kembali ke Menu!”; getch(); }
/**
* fungsi untuk menampilkan data linked list
*/
void tampilData() {
int no = 1;
myLinkedList *bantu;
bantu = head;
if (paKosong() == 0) {
while (bantu != NULL) {
cout << “No. : ” <<>nim <<>nama <<>nilai <<>
no++;
bantu = bantu->next;
}
cout <<>
} else {
cout << “Data masih kosong ” <<>
/**
* fungsi Menu, Untuk menentukan linked list mana
* yang dipilih
*/
int menu() {
int pilihan;
cout << “+———————-+\n”; cout << “| MENU PILIHAN |\n”; cout << “+———————-+\n”; cout << “| 1. Tambah Depan |\n”; cout << “| 2. Tambah Belakang |\n”; cout << “| 3. Hapus Depan |\n”; cout << “| 4. Hapus Belakang |\n”; cout << “| 5. Tambah Tengah |\n”; cout << “| 6. Hapus Tengah |\n”; cout << “| 7. TampilData |\n”; cout << “| 8. Keluar |\n”; cout << “+———————-+\n”; cout << “| PILIHAN ANDA ? [ ] |\n”; cout << “+———————-+\n”;
cin >> pilihan;
return pilihan;
}
/**
* fungsi operasi data
*/
void operasiData() {
int pilih;
do {
pilih = menu();
switch (pilih) {
case 1 :
tambahDepan();
break;
case 2 :
tambahBelakang();
break;
case 3 :
hapusDepan();
break;
case 4 :
hapusBelakang();
break;
case 5 :
tampilData();
break;
case 6:
cout << “Terima kasih coy!!!”; break; } } while (pilih != 6); }
/**
* PROGRAM UTAMA
*/
void main() {
init();
operasiData();
}



Tidak ada komentar:

Posting Komentar