Você está na página 1de 18

1) Singly Linked List class node { public: int data; node *next; node ( int d, node *n =0) { data

= d; next = n; } }; class SLL { private: node *head,*tail; public: SLL() { head=tail=0; } ~SLL(); voidadd_head(int el); voidadd_tail(int el); intdelete_head();

intdelete_tail(); voiddelete_node(int el); bool search(int el); void display(); void reverse(); intisEmpty(); }; SLL::~SLL() { node *p; while (!isEmpty()) { p = head->next; delete head; head = p; } } int SLL::isempty() { return (head == 0); } void SLL ::add_head(int el) { head = new node(el,head); if (tail == 0)

tail = head; } void SLL::add_tail(int el) { if (tail != 0) { tail->next= new node(el); tail= tail->next; } else head=tail= new node(el); } int SLL ::delete_head() {

int el = head->data; node *temp = head; if (head == tail) head=tail=0; else head=head->next; delete temp; return el; } int SLL ::delete_tail()

{ int el = tail->data; if (head == tail) { delete head; head=tail=0; } else { node *temp = head; for (temp=head;temp->next != tail;temp=temp->next) ; delete tail; tail=temp; tail->next = 0; } return el; } void SLL ::delete_node(intel) { If(head != 0) { if(head == tail && el== head->data) { delete head;

head=tail=0; } else if (el == head->data) { node *temp=head; head= head->next; delete temp; } else { node *prev, *temp; for (prev = head, temp = head->next; temp != 0 && !(temp->data == el); prev=prev->next, temp= temp->next) ; if (temp!=0) { prev->next = temp->next; if (temp == tail) tail=prev; delete temp; } } } } bool SLL ::search(int el) {

node *temp; for (temp = head; temp != 0 && !(temp->data == el); temp = temp->next) ; return (temp != 0); } void SLL ::display() { node *temp= head; while(temp != 0) { cout<<temp->data<<" "; temp=temp->next; } }

void SLL ::reverse() { if(head == tail) return; node *prev,*current,*cnext; current=head; prev=0; while(current != 0) { cnext = current->next;

current->next = prev; prev = current; current = cnext; } tail = head; head = prev; }

2) Doubly Linked List class node { public: int data; node *next; node *prev; node ( int d, node *p =0, node *n=0) { data=d; prev = p; next=n; } }; class DLL { private: node *head,*tail; public: DLL() { head=tail=0;

} ~DLL(); intisempty(); voidadd_head(int el); voidadd_tail(int el); intdelete_head(); intdelete_tail(); voiddelete_node(int el); bool search(int el); void display(); void reverse(); }; DLL::~DLL() { node *p; while (!isempty()) { p=head->next; delete head; head=p; } }

int DLL::isempty() { return (head == 0); } void DLL ::add_head(int el) { if (head != 0) { head = new node(el,0,head); head->next->prev= head; } else head= tail= new node (el);

} void DLL ::add_tail(int el) { if (tail != 0) { tail= new node(el,tail,0); tail->prev->next= tail; } else head=tail= new node(el); } int DLL ::delete_head() { int el = head->data; node<T> *temp = head; if (head == tail) head=tail=0; else { head=head->next; head->prev = 0; } delete temp; return el; } int DLL ::delete_tail() { int el = tail->data; if (head == tail) { delete head; head=tail=0; } else { tail = tail->prev; delete tail->next;

tail->next = 0; } return el; } void DLL::delete_node(int el) { If(head != 0) { if(head == tail && el== head->data) { delete head; head=tail=0; } else if (el == head->data) { node<T> *temp=head; head= head->next; head->prev=0; delete temp; } else { node *temp; for (temp = head->next; temp != 0 && !(temp->data == el);temp= temp>next) ; if (temp!=0) { if (temp == tail) { tail = tail->prev; tail->next = 0; } else { temp->prev->next = temp->next; temp->next->prev = temp->prev; } delete temp; }

} } } bool DLL ::search(int el) { node *temp; for (temp = head; temp != 0 && !(temp->data == el); temp = temp->next) ; return (temp != 0); }

void DLL::display() { node *temp = head; while(temp != 0) { cout<<temp->data<<" "; temp=temp->next; } }

void DLL ::reverse() { if(head==tail) return; node*curr = head; node *temp ; while(curr != 0) { temp = curr->prev; curr->prev = curr->next; curr->next = temp; curr = curr->prev; } temp =head ;

head = tail; tail = temp; }

3) Circular Linked List class node { public: int data; node *next; node ( int el, node *n =0) { data=el; next=n; } };

class CLL { private: node *tail; public: CLL() { tail=0; }

~CLL(); intisempty(); voidadd_head(int el); voidadd_tail(int el); intdelete_head(); intdelete_tail(); bool search(int el); voiddelete_node(int el); void display(); }; CLL::~CLL() { if(!isempty()) { node *p = tail->next; tail->next = 0; node *q; while(p != 0) { q = p->next; delete p; p=q; } } }

int CLL::isempty() { return (tail==0); } void CLL ::add_head(int el) { if (tail == 0) { tail = new node (el); tail->next = tail; } else { tail->next = new node(el,tail->next); } } void CLL ::add_tail(int el) { if ( tail == 0) { tail = new node(el); tail->next = tail; } else {

tail->next = new node(el,tail->next); tail= tail->next; } } int CLL ::delete_head() { node *temp = tail->next; intel = temp->data; if (tail->next == tail) tail=0; else tail->next=temp->next; delete temp; return el; }

int CLL ::delete_tail() { intel = tail->data; if (tail-> next == tail) { delete tail; tail=0; } else

{ node *temp = tail->next; for (;temp->next != tail;temp=temp->next) ; temp->next = tail->next; delete tail; tail=temp; } return el; } void CLL::delete_node(int el) { If(tail != 0) { if(tail == tail->next && el== tail->data) { delete tail; tail=0; } else if (el == tail->next->data) { node<T> *temp=tail->next; tail->next= temp->next; delete temp; }

else { node<T> *pred, *temp; for (pred=tail->next,temp = pred->next; temp != tail->next && !(temp->data == el); pred=pred->next, temp= temp->next) ; if(temp!= tail->next) { pred->next = temp->next; if (temp == tail) tail=pred; delete temp; } } } } bool CLL ::search(int el) { If(tail != 0) { node *temp = tail->next; do { if (temp->data == el) return true; else

temp=temp->next; } while(temp != tail->next); } return false; } void CLL ::display() { node *temp = tail->next; do { cout<<temp->data<<" "; temp=temp->next; } while(temp != tail->next); }

Você também pode gostar