Presentation is loading. Please wait.

Presentation is loading. Please wait.

LAB#4. Linked List : A linked list is a series of connected nodes. Each node contains at least: – A piece of data (any type) – Pointer to the next node.

Similar presentations


Presentation on theme: "LAB#4. Linked List : A linked list is a series of connected nodes. Each node contains at least: – A piece of data (any type) – Pointer to the next node."— Presentation transcript:

1 LAB#4

2 Linked List : A linked list is a series of connected nodes. Each node contains at least: – A piece of data (any type) – Pointer to the next node in the list Head: pointer to the first node. The last node points to NULL. A 0 Head BCA datapointer node Tail

3 SinglyLinked List : Singly Linked List : We use two classes: Node and List o Declare IntSLLNode class for the nodes class IntSLLNode { public: IntSLLNode() { next = 0; } IntSLLNode(int i, IntSLLNode *ptr = 0) { info = i; next = ptr; } int info; IntSLLNode *next; };

4 SinglyLinked List : Singly Linked List : o Declare IntSLList which contains : class IntSLList { public: IntSLList() {head = tail =0; } void AddToHead(int); void AddToTail(int); void DeleteFromHead(); void DeleteFromTail(); void DeleteNode(int); bool isInList(int) const; void DisplayList(); private: IntSLLNode *head, *tail; };

5 Linked Lists5 Inserting at the Head 1.Allocate a new node 2.Insert new element 3.Make new node point to old head 4.Update head to point to new node

6 SinglyLinked List : Singly Linked List : o Declare IntSLList Class member function: 1- void AddToHead(int); void IntSLList::AddToHead(int el) { head = new IntSLLNode(el,head); if (tail == 0) tail = head; }

7 Linked Lists7 Inserting at the Tail 1. Allocate a new node 2. Insert new element 3. Have new node point to null 4. Have old last node point to new node 5. Update tail to point to new node

8 SinglyLinked List : Singly Linked List : o Declare IntLList Class member function: 2- void AddToTail(int); void IntSLList::AddToTail(int el) { if (tail != 0) // if list not empty; { tail->next = new IntSLLNode(el); tail = tail->next; } else head = tail = new IntSLLNode(el); }

9 Linked Lists9 Removing at the Head 1.Update head to point to next node in the list 2.Allow garbage collector to reclaim the former first node

10 SinglyLinked List : Singly Linked List : o Declare IntLList Class member function: 3- void DeleteFromHead(); void IntSLList::DeleteFromHead(){ if(head !=0) { IntSLLNode *tmp =head; if (head == tail) //if only one node in the list head = tail = 0; else head = head ->next; delete tmp;} }

11 Linked Lists11 Removing at the Tail Removing at the tail of a singly linked list cannot be efficient! There is no constant- time way to update the tail to point to the previous node

12 SinglyLinked List : Singly Linked List : 4- void DeleteFromTail(); void IntSLList::DeleteFromTail() {if(head != 0) {if (head == tail) //if only one node in the list {delete head; head=tail=0;} else { IntSLLNode *tmp; //find the predecessor of tail for(tmp=head; tmp->next != tail; tmp = tmp->next); delete tail; tail=tmp; tail->next=0;}} }

13 SinglyLinked List : Singly Linked List : o Declare IntLList Class member function: 5- int DeleteNode(int el);

14

15 SinglyLinked List : Singly Linked List : o Declare IntLList Class member function: 6- bool isInList(int) const; bool IntSLList:: isInList(int el) const { IntSLLNode *tmp; for (tmp=head; tmp != 0 && !(tmp->info == el); tmp = tmp->next); return tmp !=0; }

16 SinglyLinked List : Singly Linked List : o Declare IntSLList Class member function: 7- void DisplayList(); void IntSLList::DisplayList() {IntSLLNode *current; current = head; cout << "head = " << head << "\n"; while(current != 0) {cout info << " " << current << "\n"; current=current->next;} cout << "tail = " << tail << "\n"; cout << "----------------------" << "\n";}

17 SinglyLinked List : Singly Linked List : Using List : void main() {IntSLList myllist; myllist.AddToHead(50); myllist.AddToHead(90); myllist.AddToHead(60); myllist.AddToHead(68); myllist.DisplayList(); myllist.DeleteFromHead(); myllist.DeleteNode(60); if (myllist.isInList(60)== 0) cout<<"60 isn't in the list" << endl; cout<<"60 is in the list" << endl; myllist.DisplayList();}

18 Linked Lists18 Doubly Linked List A doubly linked list is often more convenient! Nodes store: – element – link to the previous node – link to the next node Special trailer and header nodes prevnext elem trailer header nodes/positions elements node

19 DoublyLinked List : Doubly Linked List : o Declare IntDLLNode which contains : class IntDLLNode{ public: IntDLLNode() {next=prev=0;} IntDLLNode(int el,IntDLLNode *n=0,IntDLLNode *p=0){ info = el; next=n; prev =p; } Int info; IntDLLNode *next, *prev; };

20 DoublyLinked List : Doubly Linked List : o Declare IntDLList which contains : class IntDLList{ public: IntDLList(){ Head=tail=0;} void addToDLLTail(int el); void deleteFromDLLTail(); void IntDLList::DisplayFromHead(); protected: IntDLLNode *head,*tail; };

21 Linked Lists21 Insertion We visualize operation insertAfter(p, X), which returns position q ABXC ABC p ABC p X q pq

22 Linked Lists22 Insertion Algorithm Algorithm insertAfter(p,e): Create a new node v v.setElement(e) v.setPrev(p){link v to its predecessor} v.setNext(p.getNext()){link v to its successor} (p.getNext()).setPrev(v){link p’s old successor to v} p.setNext(v){link p to its new successor, v} return v{the position for the element e}

23 DoublyLinked List : Doubly Linked List : o Declare IntDLList Class member function: 1- void addToDLLTail(int el); void IntDLList:: addToDLLTail(int el) {if (tail!=0){ tail=new IntDLLNode(el,0,tail); tail->prev->next=tail;} else head=tail=new IntDLLNode(el); }

24 Linked Lists24 Deletion We visualize remove(p), where p == last() ABCD p ABC D p ABC

25 Linked Lists25 Deletion Algorithm Algorithm remove(p): t = p.element{a temporary variable to hold the return value} (p.getPrev()).setNext(p.getNext()){linking out p} (p.getNext()).setPrev(p.getPrev()) p.setPrev(null){invalidating the position p} p.setNext(null) return t

26 DoublyLinked List : Doubly Linked List : o Declare IntDLList Class member function: 2- void deleteFromDLLTail() void IntDLList:: deleteFromDLLTail() {if(tail !=0){ if(head==tail) { //if only one node in the list delete head; head = tail =0;} else { tail = tail->prev; delete tail->next; tail->next = 0;}}}

27 DoublyLinked List : Doubly Linked List : o Declare IntDLList Class member function: 2- void IntDLList::DisplayFromHead(); void IntDLList::DisplayFromHead() { IntDLLNode *current; for( current = head ; current != 0 ; current = current->next ) cout info<<endl; cout<<"--------------------------------"<<endl; }

28 Exercise # 1: Complete, compile and run the following program. #include using namespace std; //------ class IntSLLNode for creating new node ---------------// class IntSLLNode { public: IntSLLNode() { next = 0; } IntSLLNode(int i, IntSLLNode *ptr = 0) { info = i; next = ptr; } int info; IntSLLNode *next; }; //------ class IntSLList for dealing with nodes ---------------// class IntSLList { public: IntSLList() {head = tail =0; } void AddToHead(int); void AddToTail(int); void DisplayList();

29 private: IntSLLNode *head, *tail; }; void IntSLList::AddToHead(int el) { } void IntSLList::AddToTail(int el) { } void IntSLList::DisplayList() { }

30 void main() { IntSLList myllist; myllist.AddToHead(50); myllist.AddToHead(90); myllist.AddToHead(60); myllist.DisplayList(); myllist.AddToTail(88); myllist.AddToTail(77); myllist.AddToHead(66); myllist.AddToHead(50); myllist.DisplayList(); }

31 TheAnswer# #include using namespace std; //------ class IntSLLNode for creating new node ---------------// class IntSLLNode { public: IntSLLNode() { next = 0; } IntSLLNode(int i, IntSLLNode *ptr = 0) { info = i; next = ptr; } int info; IntSLLNode *next; }; //------ class IntSLList for dealing with nodes ---------------// class IntSLList { public: IntSLList() {head = tail =0; } void AddToHead(int); void AddToTail(int); void DisplayList(); private: IntSLLNode *head, *tail; };

32 void IntSLList::AddToHead(int el) { head= new IntSLLNode (el,head); If (tail==0) Tail= head; } void IntSLList::AddToTail(int el) { if (tail !=0 ) // if list not empty { tail-> next = new IntSLLNode (el); tail=tail->next; }

33 void IntSLList::DisplayList() { IntSLLNode *current; current = head; cout << "head = " << head << "\n"; while(current != 0) {cout info << " " << current << "\n"; current=current->next;} cout << "tail = " << tail << "\n"; cout << "----------------------" << "\n";} } void main() { IntSLList myllist; myllist.AddToHead(50); myllist.AddToHead(90); myllist.AddToHead(60); myllist.DisplayList(); myllist.AddToTail(88); myllist.AddToTail(77); myllist.AddToHead(66); myllist.AddToHead(50); myllist.DisplayList(); }

34 Exercise # 2: Edit the previous program to: Add (30) to the head. Add (22) to the tail. Display all nodes.

35 #include using namespace std; //------ class IntSLLNode for creating new node ---------------// class IntSLLNode { public: IntSLLNode() { next = 0; } IntSLLNode(int i, IntSLLNode *ptr = 0) { info = i; next = ptr; } int info; IntSLLNode *next; }; //------ class IntSLList for dealing with nodes ---------------// class IntSLList { public: IntSLList() {head = tail =0; } void AddToHead(int); void AddToTail(int); void DisplayList(); private: IntSLLNode *head, *tail; };

36 void IntSLList::AddToHead(int el) { head= new IntSLLNode (el,head); if (tail==0) tail= head; } void IntSLList::AddToTail(int el) { tail-> next = new IntSLLNode (el); tail=tail->next; }

37 void IntSLList::DisplayList() {IntSLLNode *current; current = head; cout << "head = " << head << "\n"; while(current != 0) {cout info << " " << current << "\n"; current=current->next;} cout << "tail = " << tail << "\n"; cout << "----------------------" << "\n"; } void main() { IntSLList myllist; myllist.AddToHead(30); myllist.DisplayList(); myllist.AddToTail(22); myllist.DisplayList(); }

38

39 Evolution question Create empty linked list and then add a new node with data 50

40 Answer of Evolution question


Download ppt "LAB#4. Linked List : A linked list is a series of connected nodes. Each node contains at least: – A piece of data (any type) – Pointer to the next node."

Similar presentations


Ads by Google