Berat Juga Ini kerjaan nya..
Hehehe..
Tapi saya Senang Karena Bisa memecahkan Source yang Cukup Ribet Ini..
langsung saja Dibawah Ini Source Code Nya..
copy code ini menjadi 3 baigna
- main.cpp
- List.h
- Node.h
// Start main Program
#include
#include
#include
#include"Node.h"
#include"List.h"
//Implementasi Node
Node::Node(int x, Node *p){
data=x;
next=p;
};
int Node::getData(){return data;};
Node *Node::getNext(){return next;};
void Node::setData(int x){data=x;};
void Node::setNext(Node *ptr){next=ptr;};
//Implementasi List
List::List(){
head_ptr=NULL;
tail_ptr=NULL;
numOfItems=0;
};
int List::size(){return numOfItems;};
Node *List::getHead(){return head_ptr;};
Node *List::getTail(){return tail_ptr;};
bool List::isEmpty(){return(numOfItems==0);};
Node *List::search(int x){
Node * currentPtr=getHead();
while(currentPtr!=NULL){
if(currentPtr->getData()==x)
return currentPtr;
else
currentPtr=currentPtr->getNext();
}
return NULL; //Now x is not, so return NULL
};
Node *List::itemAt(int position){
if(position<0||position>=numOfItems)
return NULL;
Node * currentPtr=getHead();
for(int k=0;k!=position;k++)
currentPtr=currentPtr->getNext();
return currentPtr;
};
void List::removeHead(){
if(numOfItems==0)
return;
Node * currentPtr = getHead();
head_ptr=head_ptr->getNext();
delete currentPtr;
numOfItems--;
};
void List::removeTail(){
if(numOfItems==0)
return;
if(head_ptr==tail_ptr){
head_ptr=NULL;tail_ptr=NULL;
numOfItems=0;return;
}
Node *beforeLast=itemAt(numOfItems-2);
beforeLast->setNext(NULL);//beforeLast becomes last
delete tail_ptr;//deletes the last object
tail_ptr=beforeLast;
numOfItems--;
};
void List::remove(int x){
if(numOfItems==0)return;
if(head_ptr==tail_ptr&&head_ptr->getData()==x){
head_ptr=NULL;
tail_ptr=NULL;
numOfItems=0;
return;
}
Node *beforePtr=head_ptr;//beforePtr trails currentPtr
Node *currentPtr=head_ptr->getNext();
Node *tail=getTail();
while(currentPtr!=tail)
if(currentPtr->getData()==x){//x is found.Do the bypass
beforePtr->setNext(currentPtr->getNext());
delete currentPtr;
numOfItems--;
}
else{//x is not found yet. Forward beforePtr & currentPtr.
beforePtr=currentPtr;
currentPtr=currentPtr->getNext();
}
};
void List::insertHead(int x){
Node *newHead=new Node(x, head_ptr);
head_ptr=newHead;
if(tail_ptr==NULL)//only one item in list
tail_ptr=head_ptr;
numOfItems++;
};
void List::insertTail(int x){
if(isEmpty())
insertHead(x);
else{
Node *newTail=new Node(x);
tail_ptr->setNext(newTail);
tail_ptr=newTail;numOfItems++;
}
};
//inserts item x after the item pointed to by p
void List::insert(Node *p, int x){
Node *currentPtr=head_ptr;
while(currentPtr != NULL && currentPtr != p)
currentPtr=currentPtr->getNext();
if(currentPtr!=NULL){//p is found
Node *newNd=new Node(x,p->getNext());
p->setNext(newNd);
numOfItems++;
}
};
//end main program
2. Ini bagian List
//Start List Program
class List{
private:
Node *head_ptr;Node *tail_ptr;int numOfItems;
public:
List();//constructor
int size();
Node *getHead();
Node *getTail();
bool isEmpty();
Node *search(int x);
Node *itemAt(int position);
void removeHead();
void removeTail();
void remove(int x); //delete leftmost item having x
void insertHead(int x);
void insertTail(int x);
void insert(Node *p,int x);
};
//end List
3. Ini Bagian Node
//Start Node
class Node{
private:
int data; //different data type for other apps
Node *next;//the link pointer to next item
public:
Node(int x=0,Node * ptr=NULL);//constructor
int getData();
Node *getNext();
void setData(int x);
void setNext(Node *ptr);
};
//end Node
NB
- simpan Program ini dalam polder yang sama, sesuai dengan sama yang saya jelaskan diatas
semoga program Ini berman faat,
0 Comments:
Post a Comment