Ds lect 06 - list adt-implementing linked list data stru
-
Upload
air-university-multan -
Category
Science
-
view
100 -
download
0
description
Transcript of Ds lect 06 - list adt-implementing linked list data stru
![Page 1: Ds lect 06 - list adt-implementing linked list data stru](https://reader035.fdocuments.in/reader035/viewer/2022062320/558e30611a28ab48618b46d7/html5/thumbnails/1.jpg)
Data Structures and Algorithms
Lecture 07
The List ADT – Implementing Linked Lists
Reading: Weiss, chap.3
Slides Ref. Dr. Sohail Aslam (VU)
![Page 2: Ds lect 06 - list adt-implementing linked list data stru](https://reader035.fdocuments.in/reader035/viewer/2022062320/558e30611a28ab48618b46d7/html5/thumbnails/2.jpg)
Linked List Create a structure called a Node.
object next
The object field will hold the actual list element. The next field in the structure will hold the
starting location of the next node. Chain the nodes together to form a linked list.
![Page 3: Ds lect 06 - list adt-implementing linked list data stru](https://reader035.fdocuments.in/reader035/viewer/2022062320/558e30611a28ab48618b46d7/html5/thumbnails/3.jpg)
Linked List Picture of our list (2, 6, 7, 8, 1) stored as a
linked list:
2 6 8 7 1
head
current
size=5
![Page 4: Ds lect 06 - list adt-implementing linked list data stru](https://reader035.fdocuments.in/reader035/viewer/2022062320/558e30611a28ab48618b46d7/html5/thumbnails/4.jpg)
Linked List
Note some features of the list: Need a head to point to the first node of the
list. Otherwise we won’t know where the start of the list is.
The current here is a pointer, not an index.
The next field in the last node points to nothing. We will place the memory address NULL which is guaranteed to be inaccessible.
![Page 5: Ds lect 06 - list adt-implementing linked list data stru](https://reader035.fdocuments.in/reader035/viewer/2022062320/558e30611a28ab48618b46d7/html5/thumbnails/5.jpg)
Linked List Actual picture in memory:
1051
1052
1055
1059
1060
1061
1062
1063
1064
1056
1057
1058
1053
1054 2
6
8
7
1
1051
1063
1057
1060
0
head 1054
1063current
2 6 8 7 1
head
current
1065
![Page 6: Ds lect 06 - list adt-implementing linked list data stru](https://reader035.fdocuments.in/reader035/viewer/2022062320/558e30611a28ab48618b46d7/html5/thumbnails/6.jpg)
Linked List Operations
add(9): Create a new node in memory to hold ‘9’
Node* newNode = new Node(9);
9newNode
![Page 7: Ds lect 06 - list adt-implementing linked list data stru](https://reader035.fdocuments.in/reader035/viewer/2022062320/558e30611a28ab48618b46d7/html5/thumbnails/7.jpg)
Linked List Operations add(9): Create a new node in memory to hold ‘9’
Node* newNode = new Node(9);
Link the new node into the list
9newNode
2 6 8 7 1
head
current
size=5 6
9
newNode
1
3
2
![Page 8: Ds lect 06 - list adt-implementing linked list data stru](https://reader035.fdocuments.in/reader035/viewer/2022062320/558e30611a28ab48618b46d7/html5/thumbnails/8.jpg)
C++ Code for Linked List
The Node class
class Node {
private:
int object;
Node *nextNode;
public:
int get() { return object; };
void set(int object) { this->object = object; };
Node *getNext() { return nextNode; };
void setNext(Node *nextNode)
{ this->nextNode = nextNode; };
};
![Page 9: Ds lect 06 - list adt-implementing linked list data stru](https://reader035.fdocuments.in/reader035/viewer/2022062320/558e30611a28ab48618b46d7/html5/thumbnails/9.jpg)
C++ Code for Linked List: List Class#include <stdlib.h>
#include "Node.cpp"
class List {
private:
int size;
Node *headNode;
Node *currentNode, *lastCurrentNode;
public:
// Constructor
List() {
headNode = new Node();
headNode->setNext(NULL);
currentNode = NULL;
size = 0;
};
![Page 10: Ds lect 06 - list adt-implementing linked list data stru](https://reader035.fdocuments.in/reader035/viewer/2022062320/558e30611a28ab48618b46d7/html5/thumbnails/10.jpg)
C++ Code for Linked List - Adding new node
void add(int addObject) {Node* newNode = new Node();
newNode->set(addObject);
if( currentNode != NULL ){
newNode->setNext(currentNode->getNext());
currentNode->setNext( newNode );
lastCurrentNode = currentNode;
currentNode = newNode;
}
else {
newNode->setNext(NULL);
headNode->setNext(newNode);
lastCurrentNode = headNode;
currentNode = newNode;
}
size++;
};
![Page 11: Ds lect 06 - list adt-implementing linked list data stru](https://reader035.fdocuments.in/reader035/viewer/2022062320/558e30611a28ab48618b46d7/html5/thumbnails/11.jpg)
Building a Linked List
headNode size=0List list;
![Page 12: Ds lect 06 - list adt-implementing linked list data stru](https://reader035.fdocuments.in/reader035/viewer/2022062320/558e30611a28ab48618b46d7/html5/thumbnails/12.jpg)
Building a Linked List
headNode
2headNode
currentNode
size=1
lastcurrentNode
size=0List list;
list.add(2);
![Page 13: Ds lect 06 - list adt-implementing linked list data stru](https://reader035.fdocuments.in/reader035/viewer/2022062320/558e30611a28ab48618b46d7/html5/thumbnails/13.jpg)
Building a Linked List
headNode
2headNode
currentNode
size=1
lastcurrentNode
2 6headNode
currentNode
size=2
lastcurrentNode
size=0List list;
list.add(2);
list.add(6);
![Page 14: Ds lect 06 - list adt-implementing linked list data stru](https://reader035.fdocuments.in/reader035/viewer/2022062320/558e30611a28ab48618b46d7/html5/thumbnails/14.jpg)
Building a Linked List
List.add(8); list.add(7); list.add(1);
2 6 7 1headNode
currentNode
size=5
lastcurrentNode
8
![Page 15: Ds lect 06 - list adt-implementing linked list data stru](https://reader035.fdocuments.in/reader035/viewer/2022062320/558e30611a28ab48618b46d7/html5/thumbnails/15.jpg)
C++ Code for Linked List: “Get” operation
int get() {
if (currentNode != NULL)
return currentNode->get();
};
![Page 16: Ds lect 06 - list adt-implementing linked list data stru](https://reader035.fdocuments.in/reader035/viewer/2022062320/558e30611a28ab48618b46d7/html5/thumbnails/16.jpg)
C++ Code for Linked List : “Next” operation
bool next() {
if (currentNode == NULL) return false;
lastCurrentNode = currentNode;
currentNode = currentNode->getNext();
if (currentNode == NULL || size == 0)
return false;
else
return true;
};
![Page 17: Ds lect 06 - list adt-implementing linked list data stru](https://reader035.fdocuments.in/reader035/viewer/2022062320/558e30611a28ab48618b46d7/html5/thumbnails/17.jpg)
C++ Code for Linked List: start() Operation
// position current before the first
// list element
void start() {
lastCurrentNode = headNode;
currentNode = headNode;
};
![Page 18: Ds lect 06 - list adt-implementing linked list data stru](https://reader035.fdocuments.in/reader035/viewer/2022062320/558e30611a28ab48618b46d7/html5/thumbnails/18.jpg)
C++ Code for Linked List: remove() Operation
void remove() {
if( currentNode != NULL && currentNode != headNode) {
lastCurrentNode->setNext(currentNode->getNext());
delete currentNode;
currentNode = lastCurrentNode->getNext();
size--;
}
2 6 7 1
headNode
currentNode
size=5
lastcurrentNode
8
![Page 19: Ds lect 06 - list adt-implementing linked list data stru](https://reader035.fdocuments.in/reader035/viewer/2022062320/558e30611a28ab48618b46d7/html5/thumbnails/19.jpg)
C++ Code for Linked List: remove() Operation
void remove() {
if( currentNode != NULL && currentNode != headNode) {
lastCurrentNode->setNext(currentNode->getNext());
delete currentNode;
currentNode = lastCurrentNode->getNext();
size--;
}};
2 6 7 1
headNode
currentNode
size=5
lastcurrentNode
8
1
1
![Page 20: Ds lect 06 - list adt-implementing linked list data stru](https://reader035.fdocuments.in/reader035/viewer/2022062320/558e30611a28ab48618b46d7/html5/thumbnails/20.jpg)
C++ Code for Linked List: remove() Operation
void remove() { if( currentNode != NULL && currentNode != headNode) {
lastCurrentNode->setNext(currentNode->getNext()); delete currentNode; currentNode = lastCurrentNode->getNext(); size--;
}};
2 7 1
headNode
currentNode
size=5
lastcurrentNode
8
1
1
2
2
![Page 21: Ds lect 06 - list adt-implementing linked list data stru](https://reader035.fdocuments.in/reader035/viewer/2022062320/558e30611a28ab48618b46d7/html5/thumbnails/21.jpg)
C++ Code for Linked List
void remove() { if( currentNode != NULL && currentNode != headNode) {
lastCurrentNode->setNext(currentNode->getNext()); delete currentNode; currentNode = lastCurrentNode->getNext(); size--;
}};
2 7 1
headNode
currentNode
size=4
lastcurrentNode
8
1
1
2
2
3
3
4
4
![Page 22: Ds lect 06 - list adt-implementing linked list data stru](https://reader035.fdocuments.in/reader035/viewer/2022062320/558e30611a28ab48618b46d7/html5/thumbnails/22.jpg)
C++ Code for Linked List: length() Operation
int length() {
return size; };
![Page 23: Ds lect 06 - list adt-implementing linked list data stru](https://reader035.fdocuments.in/reader035/viewer/2022062320/558e30611a28ab48618b46d7/html5/thumbnails/23.jpg)
Example of List Usage
#include <iostream>
#include <stdlib.h>
#include "List.cpp"
int main(int argc, char *argv[])
{
List list;
list.add(5); list.add(13); list.add(4);
list.add(8); list.add(24); list.add(48);
list.add(12);
list.start();
while (list.next())
cout << "List Element: "<< list.get()<<endl;
}
![Page 24: Ds lect 06 - list adt-implementing linked list data stru](https://reader035.fdocuments.in/reader035/viewer/2022062320/558e30611a28ab48618b46d7/html5/thumbnails/24.jpg)
Analysis of Linked List add
we simply insert the new node after the current node. So add is a one-step operation.
remove remove is also a one-step operation
find worst-case: may have to search the entire list
back moving the current pointer back one node requires
traversing the list from the start until the node whose next pointer points to current node.