Linked List

PROGRAM LINKED LIST





#include<iostream>
using namespace std;

struct data
{
    char merk[15];
    char ukuran[15]; //nama_field informasi yang besiri data
    char jumlah[15];
    char harga[15];
    data *next; // field tipe data pointer yang berisi alamat
};

data *head=NULL,*tail = NULL; // delkarasi nama pointer
data *baru;                  // delkarasi nama pointer

void tambah()
{
    baru = new data; // membuat alamat baru

    cout<<" merk   : ";
    cin>>baru->merk;
    cout<<" ukuran : ";
    cin>>baru->ukuran;    //input data dari depan
    cout<<" jumlah : ";
    cin>>baru->jumlah;
    cout<<" harga  : ";
    cin>>baru->harga;
    baru->next =NULL;
    if(head==NULL)
    {
        head  = baru;
        tail  =baru;
// proses dimana ketika tidak ada data sama sekali maka akan masuk ke if
        head->next = NULL; 
// kemudian head diisi dengan pointer baru kemudian mengosongkan variabel selanjutnya
    }
    else
    {
        baru->next=head;    
// ketika head tidak sama dengan 0 maka node selanjutnya akan diisi dengan nilai head
        head = baru;  // kemudian depan diisi dengan variabel baru
    }
}

void tambah_belakang()
{
    baru=new data;
    cout<<" merk   : ";
    cin>>baru->merk;
    cout<<" ukuran : ";
    cin>>baru->ukuran;    //input data
    cout<<" jumlah : ";
    cin>>baru->jumlah;
    cout<<" harga  : ";
    cin>>baru->harga;
    baru->next=NULL;
    if(head==NULL)
    {
        head = baru;
        tail = baru;       // pertukaran data dari baru ke dalam head
        head->next =NULL; // mengosongkan node selanjutnya
    }
    else
    {
        tail->next= baru;
 // ketika head tidak sama dengan 0 maka tail node selanjutnya akan diisi dengan data baru
        tail = baru;      // kemudian tail digeser ke baru
    }
}

void hapus_depan()
{
    data *hapus;
    hapus = head;

    if(head==NULL)
    {
        cout<<" list is empty "<<endl;  // proses ketika belum ada data yang masuk
    }
    else
    {
        cout<<" Data yang keluar \n";
        cout<<"___________________\n";
        cout<<" merk    : "<<head->merk<<endl;
        cout<<" ukuran  : "<<head->ukuran<<endl;
        cout<<" jumlah  : "<<head->jumlah<<endl;    //output data yang keluar dari depan
        cout<<" harga   : "<<head->harga<<endl;

        head = hapus->next; // proses pergeseran head ke data berikutnya
        hapus=NULL;        // kemudian data yang di head awal tadi dikosongkan
    }
}

void hapus_belakang()
{
    data *hapus;
    hapus = head;
    if(hapus==NULL)
    {
        cout<<" list is empty "<<endl;  // proses ketika belum ada data yang masuk
    }
    else
    {
        if(head->next==NULL)  
// proses ini digunakan ketika data yang masuk hanya satu data. dengan algotirma apakah data setelah head kosong?
        {
        cout<<" Data yang keluar \n";
        cout<<"___________________\n";
        cout<<" merk    : "<<hapus->merk<<endl;
        cout<<" ukuran  : "<<hapus->ukuran<<endl;     //output data yang keluar dari depan
        cout<<" jumlah  : "<<hapus->jumlah<<endl;
        cout<<" harga   : "<<hapus->harga<<endl;
        hapus=NULL;         //mengosongkan nilai
        head=NULL;
        }
        else
        {
        while(hapus->next->next!=NULL) 
// kemudian jika ada lebih dari 1 data maka, apakah data setelah setelahnya lagi kosong?
        {
            hapus = hapus->next;   
//jika kondisi memenuhi maka node hapus akan digeser ke sebelahnya.
        }   // kemudiam diulang sampai syarat tidak memenuhi
        cout<<" Data yang keluar \n";
        cout<<"___________________\n";
        cout<<" merk    : "<<hapus->next->merk<<endl;
        cout<<" ukuran  : "<<hapus->next->ukuran<<endl;
        cout<<" jumlah  : "<<hapus->next->jumlah<<endl; //  output data terakhir
        cout<<" harga   : "<<hapus->next->harga<<endl;
        tail = hapus;  // tail digeser ke belakang 1 . yaitu ke node hapus
        hapus->next = NULL;
 // mengosongkan data setelah hapus yaitu data terakhir
        }
    }
}
void view()
{
    baru = head;
    if(baru==NULL)  //proses pengujian apakah data masih kosong ?
    {
        cout<<" list is empty "<<endl;
    }
    else
    {
        while(baru !=NULL)  // pengujian apakah data tidak sama dengan null
        {
            cout<<" merk    : "<<baru->merk<<endl;
            cout<<" ukuran  : "<<baru->ukuran<<endl;
            cout<<" jumlah  : "<<baru->jumlah<<endl;    //output data
            cout<<" harga   : "<<baru->harga<<endl;
            cout<<"___________________\n";
            baru = baru->next;  // menggeser data ke data sebelahnya
        }
    }
}
main()
{

    int pilih;
    do
    {
      cout<<"\n1. input depan   \n";
        cout<<"2. input belakang\n";
        cout<<"3. hapus depan   \n";
        cout<<"4. hapus belakang\n";
        cout<<"5. view\n";
        cout<<"pilih : ";
        cin>>pilih;
        switch(pilih)
        {
        case 1:
            tambah();
            break;         
        case 2:
            tambah_belakang();
            break;
        case 3:
            hapus_depan();
            break;
        case 4:
            hapus_belakang();
            break;
        case 5:
            view();
            break;
        }
    }
    while(pilih<=5);
}

Hasil program :

 

Comments

  1. kalo bisa tambahin hapus tengah biar enak kita bisa memilih mana yang ingin dhapus

    ReplyDelete

Post a Comment

Popular posts from this blog

Program Perpustakaan Sederhana C++

Cara Membuat Pola Perkalian Menurun pada C++

Cara Membuat Pola Huruf Berurutan Dalam C++