Wednesday, September 21, 2011

MEMASUKAN DATA (LinkedList)

Asslamualaikum,
Salam coding!!
Selamat pagi kawan-kawan, kali ini ane mau posting tentang bagaimana caranya memasukan data di c++. Tapi proses ini saya lakukan langsung di source code nya. Saya akan memasukan angka, setelah itu membalikkannya. Lalu saya akan menyisipkan angka tersebut dengan angka lain. Okelah... mari kita langsung saja. ini dia source code nya:


#include <iostream>
#include <stdlib.h>
using namespace std;
// Node Class
class Node
{
private:
    int data;
    Node *pNext;
    Node *pPrevious;
public:
    Node(int d):data(d),pNext(NULL),pPrevious(NULL){}
    int getData()const{return data;}
    void setData(int d){data=d;}
    Node * getNext()const{return pNext;}
    void setNext(Node *p){pNext=p;}
    Node * getPrevious()const {return pPrevious;}
    void setPrevious(Node *p){pPrevious=p;}
};
// LinkedList class
class LinkedList
{
protected:
    Node *pHead; //penunjuk (pointer) untuk node awal
    Node *pTail; //penunjuk (pointer) untuk node terakhir
    int nodeCounter; //menghitung jumlah angka pada node
    Node * makeNode(int data);  // membuat dan menukar node baru.
    void remove(Node *tmp);  // menghilangkan node dari data yang dihubungkan (linked list).
public:
    LinkedList();
    ~LinkedList();
// pengoperasian
    void addFirst(int data);
    void addLast(int data);
    void addBefore(int index,int data);
    void removeFirst();
    void removeLast();
    void displayInOrder()const;
    void displayInReverseOrder()const;
    void destroyList();
    int getSize()const{return nodeCounter;}
};
LinkedList::LinkedList():
pHead(NULL),pTail(NULL),nodeCounter(0)
{}
LinkedList::~LinkedList()
{
    destroyList();
}
void LinkedList::displayInOrder()const
{
    if( !pHead )
    {
        cout<<"\nNULL";
        return ;
    }
    for(Node *cur=pHead;cur!=NULL;cur=cur->getNext())
        cout<<cur->getData()<<" -> ";
    cout<<"NULL"<<endl;
}
void LinkedList::displayInReverseOrder()const
{
    if( !pHead )
    {
        cout<<"\nNULL";
        return ;
    }
    for(Node *cur=pTail;cur!=NULL;cur=cur->getPrevious())
        cout<<cur->getData()<<" -> ";
    cout<<"NULL"<<endl;
}
Node * LinkedList::makeNode(int data)
{
    nodeCounter++;
    return new Node(data);
}
void LinkedList::addFirst(int data)
{
    // membuat node baru
    Node *pNew=makeNode(data); //membuat node baru sebagai node partama atau awal pada data yang dihubungkan (linked list).
    if( !pHead )  // jika data yang dihubungkan atau yang dimasukkan tersebut kosong.
        pHead=pTail=pNew;
    else // jika terdapat beberapa node.
    {
        pNew->setNext(pHead);
        pHead->setPrevious(pNew);
        pHead=pNew;
    }
}
void LinkedList::addLast(int data)
{
    // membuat node baru
    Node *pNew=makeNode(data);
    // membuat node baru sebagai node terakhir pada data yang dihubungkan (linked list).
    //jika pada kondisi tidak terdapat node pada data yang dihubungkan (linked list), maka ditambah node lagi.
    //cara lain untuk memindahkan sebuah node baru ke tempat node yang terakhir.
    if( !pHead )
        pHead=pTail=pNew;
    else
    {
        pTail->setNext(pNew);
        pNew->setPrevious(pTail);
        pTail=pNew;
    }
}
void LinkedList::addBefore(int index,int data)
{
    // mengecek atau memeriksa index untuk mengetahui apakah data yang dimasukkan sesuai atau tidak.
    if( index <1 || index > getSize() )
    {
        cerr<<"\nError: index is too hight/low ";
        return;
    }
    if(index == 1)
    {
         addFirst(data);
         return ;
    }
    // Membuat node baru
    Node *pNew=makeNode(data);
    Node *pCur=pHead;
    for(int i=1;i<index -1;i++,pCur=pCur->getNext());
    pNew->setNext(pCur->getNext());
    pCur->setNext(pNew);
}
void LinkedList::removeFirst()
{
    if( !pHead )
    {
        cerr<<"\nTidak ada node yang akan dihilangkan!!";
        return ;
    }
    Node *pTmp=pHead;
    pHead=pHead->getNext();
    if(pHead)
        pHead->setPrevious(NULL);
    else
        pHead=pTail=NULL;
    remove(pTmp);
}
void LinkedList::remove(Node *tmp)
{
    delete tmp;
    nodeCounter--;
};
void LinkedList::removeLast()
{
    if( !pHead )
    {
        cerr<<"\nTidak ada node yang akan dihilangkan!!";
        return ;
    }
    Node *pTmp=pTail;
    pTail=pTail->getPrevious();
    if(pTail)
        pTail->setNext(NULL);
    else
        pTail=pHead=NULL;
    remove(pTmp);
}
void LinkedList::destroyList()
{
    Node *pTmp=pHead;
    Node *pCur;
    while( pTmp != NULL)
    {
        pCur=pTmp;
        pTmp=pTmp->getNext();
        remove(pCur);
    }
}

//fungsi utama
int main()
{
    LinkedList *p=new LinkedList;
   
    for(int i=0;i<5;i++)
        p->addLast(2*i+1);
    cout<<"\nNAMA    :    RIZQO\n";
    cout<<"\nNIM     :    52150874XX\n";
    cout<<"\nPRODI   :    Pend. Teknik Elektronika\n";
    cout<<"\ndata yang telah dihubungkan atau dimasukkan pada fungsi perintah:\n";
    p->displayInOrder();
    cout<<"\ndata yang telah dibalikkan pada fungsi perintah:\n";
    p->displayInReverseOrder();
    cout<<"\nmenambahkan 2 sebelum node ke dua (3). \n";
    p->addBefore(2,2);
    cout<<"\nmenembahkan 4 sebelum node ke empat (5). \n";
    p->addBefore(4,4);
    cout<<"\nmenambahkan 6 sebelum node ke enam (7). \n";
    p->addBefore(6,6);
    cout<<"\nmenambahkan 8 sebelum node ke delapan (9). \n";
    p->addBefore(8,8);
    cout<<"\ndata yang telah dihubungkan atau dimasukkan pada fungsi perintah: \n";
    p->displayInOrder();
    //return 0;
    system ("pause");
}
Kalau kamu benar maka hasilnya akan tampak seperti gambar di bawah ini:


Okeh kawan, sampai sini dulu yah....
Salam Coding
Asslamualaikum...
 

2 comments: