Linked Lists Definition of Linked Lists Examples of Linked Lists

Slides:



Advertisements
Similar presentations
Linked Lists Geletaw S..
Advertisements

Linked Lists.
Inserting a Node into a Specified Position of a Linked List To create a node for the new item newNode = new Node(item); To insert a node between two nodes.
Chapter 4 Linked Lists. © 2005 Pearson Addison-Wesley. All rights reserved4-2 Preliminaries Options for implementing an ADT List –Array has a fixed size.
Stacks, Queues, and Linked Lists
Linked Lists Chapter 4.
DATA STRUCTURES USING C++ Chapter 5
Linked Lists Linear collections.
Copyright © 2007 Pearson Education, Inc. Publishing as Pearson Addison-Wesley. Ver Chapter 4: Linked Lists Data Abstraction & Problem Solving with.
Linked List 1. Introduction to Linked List 2. Node Class 3. Linked List 4. The Bag Class with Linked List.
Linked lists CSCI 2170.
CS 1031 Graphs Definition of Graphs and Related Concepts Representation of Graphs The Graph Class Graph Traversal Graph Applications.
Algorithm Analysis.
David Weinberg presents Linked Lists: The Background  Linked Lists are similar to ArrayLists in their appearance and method of manipulation  They do.
Ics202 Data Structures. hh tail head (b) LinkedList head tail Element datum next 3 Integer Element datum next 1 Integer Element datum next 4 Integer.
© 2004 Goodrich, Tamassia Linked Lists1. © 2004 Goodrich, Tamassia Linked Lists2 Singly Linked List (§ 4.4.1) A singly linked list is a concrete data.
Linked Lists1 Part-B3 Linked Lists. Linked Lists2 Singly Linked List (§ 4.4.1) A singly linked list is a concrete data structure consisting of a sequence.
C++ Programming: Program Design Including Data Structures, Third Edition Chapter 17: Linked Lists.
CS 1031 Queues Definition of a Queue Examples of Queues Design of a Queue Class Different Implementations of the Queue Class.
Nirmalya Roy School of Electrical Engineering and Computer Science Washington State University Cpt S 122 – Data Structures Custom Templatized Data Structures.
Lists ADT (brief intro):  Abstract Data Type  A DESCRIPTION of a data type  The data type can be anything: lists, sets, trees, stacks, etc.  What.
1 Chapter 16-1 Linked Structures Dale/Weems. 2 Chapter 16 Topics l Meaning of a Linked List l Meaning of a Dynamic Linked List l Traversal, Insertion.
CS 1031 Linked Lists Definition of Linked Lists Examples of Linked Lists Operations on Linked Lists Linked List as a Class Linked Lists as Implementations.
ليست هاي پيوندي Linked Lists ساختمان داده ها و الگوريتم ها.
Chapter 1 Object Oriented Programming. OOP revolves around the concept of an objects. Objects are created using the class definition. Programming techniques.
A first look an ADTs Solving a problem involves processing data, and an important part of the solution is the careful organization of the data In order.
C++ Programming: From Problem Analysis to Program Design, Second Edition Chapter 17: Linked Lists.
1 Linked-list, stack and queue. 2 Outline Abstract Data Type (ADT)‏ Linked list Stack Queue.
Lists Chapter 8. 2 Linked Lists As an ADT, a list is –finite sequence (possibly empty) of elements Operations commonly include: ConstructionAllocate &
Chapter 5 Linked Lists II
1 Today’s Material List ADT –Definition List ADT Implementation: LinkedList.
1. Circular Linked List In a circular linked list, the last node contains a pointer to the first node of the list. In a circular linked list,
Chapter 5 Linked List by Before you learn Linked List 3 rd level of Data Structures Intermediate Level of Understanding for C++ Please.
Chapter Lists Dr. Bernard Chen Ph.D. University of Central Arkansas Spring 2010.
Copyright © 2012 Pearson Education, Inc. Chapter 20: Binary Trees.
Linked list: a list of items (nodes), in which the order of the nodes is determined by the address, called the link, stored in each node C++ Programming:
CSCS-200 Data Structure and Algorithms Lecture
Lists List Implementations. 2 Linked List Review Recall from CMSC 201 –“A linked list is a linear collection of self- referential structures, called nodes,
Copyright © 2009 Pearson Education, Inc. Publishing as Pearson Addison-Wesley Chapter 20: Binary Trees.
Arrays, Link Lists, and Recursion Chapter 3. Sorting Arrays: Insertion Sort Insertion Sort: Insertion sort is an elementary sorting algorithm that sorts.
Linked Lists A formal data structure. Linked Lists Collections of data items “lined up in a row” Inserts and deletes can be done anywhere in the list.
CS212: Data Structures and Algorithms Lecture # 4 Linked List.
Linked Data Structures
C++ Programming:. Program Design Including
Data Structure By Amee Trivedi.
Linked Lists Chapter 6 Section 6.4 – 6.6
CS2006- Data Structures I Chapter 5 Linked Lists I.
Data Structures and Algorithms
Sequences 8/2/ :13 AM Linked Lists Linked Lists.
Data Structures Linked list.
Chapter 4 Linked Lists
Chapter 20: Binary Trees.
LINKED LISTS CSCD Linked Lists.
Prof. Neary Adapted from slides by Dr. Katherine Gibson
Pointers and Linked Lists
Chapter 16-2 Linked Structures
Chapter 21: Binary Trees.
Chapter 4 Linked Lists.
Linked Lists.
Linked List (Part I) Data structure.
Cs212: Data Structures Computer Science Department Lab 7: Stacks.
Sequences 12/8/2018 3:02 AM Linked Lists Linked Lists.
Review & Lab assignments
Data Structures and Algorithms
Chapter 4 Linked Lists.
Chapter 16 Linked Structures
Data Structures & Algorithms
Queues Definition of a Queue Examples of Queues
EECE.3220 Data Structures Instructor: Dr. Michael Geiger Spring 2019
Sequences 08/30/17 08/30/17 Unit III. Linked Lists 1.
Presentation transcript:

Linked Lists Definition of Linked Lists Examples of Linked Lists Operations on Linked Lists Linked List as a Class Linked Lists as Implementations of Stacks, Sets, etc. CS 103

Definition of Linked Lists A linked list is a sequence of items (objects) where every item is linked to the next. Graphically: data head_ptr tail_ptr CS 103

Definition Details Each item has a data part (one or more data members), and a link that points to the next item One natural way to implement the link is as a pointer; that is, the link is the address of the next item in the list It makes good sense to view each item as an object, that is, as an instance of a class. We call that class: Node The last item does not point to anything. We set its link member to NULL. This is denoted graphically by a self-loop CS 103

Examples of Linked Lists (A Waiting Line) A waiting line of customers: John, Mary, Dan, Sue (from the head to the tail of the line) A linked list of strings can represent this line: John Mary Dan Sue tail_ptr head_ptr CS 103

Examples of Linked Lists (A Stack of Numbers) A stack of numbers (from top to bottom): 10, 8, 6, 8, 2 A linked list of ints can represent this stack: 10 8 6 8 2 tail_ptr head_ptr CS 103

Examples of Linked Lists (A Set of Non-redundant Elements) A set of characters: a, b, d, f, c A linked list of chars can represent this set: a b d f c tail_ptr head_ptr CS 103

Examples of Linked Lists (A Sorted Set of Non-redundant Elements) A set of characters: a, b, d, f, c The elements must be arranged in sorted order: a, b, c, d, f A linked list of chars can represent this set: a b c d f tail_ptr head_ptr CS 103

Examples of Linked Lists (A Polynomial) A polynomial of degree n is the function Pn(x)=a0+a1x+a2x2+…+anxn. The ai’s are called the coefficients of the polynomial The polynomial can be represented by a linked list (2 data members and a link per item): a0,0 a1,1 a2,2 an,n head_ptr tail_ptr CS 103

Operations on Linked Lists Insert a new item At the head of the list, or At the tail of the list, or Inside the list, in some designated position Search for an item in the list The item can be specified by position, or by some value Delete an item from the list Search for and locate the item, then remove the item, and finally adjust the surrounding pointers size( ); isEmpty( ) CS 103

Insert– At the Head A Insert a new data A. Call new: newPtr List before insertion: After insertion to head: data data data data head_ptr tail_ptr A data tail_ptr head_ptr The link value in the new item = old head_ptr The new value of head_ptr = newPtr CS 103

Insert – at the Tail A Insert a new data A. Call new: newPtr List before insertion After insertion to tail: data data data data head_ptr tail_ptr data A tail_ptr head_ptr The link value in the new item = NULL The link value of the old last item = newPtr CS 103

Insert – inside the List data Insert a new data A. Call new: newPtr List before insertion: After insertion in 3rd position: data data data data head_ptr tail_ptr data data A data data tail_ptr head_ptr The link-value in the new item = link-value of 2nd item The new link-value of 2nd item = newPtr CS 103

Delete – the Head Item List before deletion: List after deletion of the head item: data data data data data tail_ptr head_ptr data data data data data head_ptr tail_ptr The new value of head_ptr = link-value of the old head item The old head item is deleted and its memory returned CS 103

Delete – the Tail Item List before deletion: List after deletion of the tail item: data data data data data tail_ptr head_ptr data data data data data tail_ptr head_ptr New value of tail_ptr = link-value of the 3rd from last item New link-value of new last item = NULL. CS 103

Delete – an inside Item List before deletion: List after deletion of the 2nd item: data data data data data tail_ptr head_ptr data data data data data tail_ptr head_ptr New link-value of the item located before the deleted one = the link-value of the deleted item CS 103

size() and isEmpty() We need to scan the items in the list from the head_ptr to the last item marked by its link-value being NULL Count the number of items in the scan, and return the count. This is the size(). Alternatively, keep a counter of the number of item, which gets updated after each insert/delete. The function size( ) returns that counter If head_ptr is NULL, isEmpty() returns true; else, it returns false. CS 103

Searching for an Item Suppose you want to find the item whose data value is A You have to search sequentially starting from the head item rightward until the first item whose data member is equal to A is found. At each item searched, a comparison between the data member and A is performed. CS 103

Time of the Operations Time to search() is O(L) where L is the relative location of the desired item in the List. In the worst case. The time is O(n). In the average case it is O(N/2)=O(n). Time for remove() is dominated by the time for search, and is thus O(n). Time for insert at head or at tail is O(1). Time for insert at other positions is dominated by search time, and thus O(n). Time for size() is O(1), and time for isEmpty() is O(1) CS 103

Implementation of an Item Each item is a collection of data and pointer fields, and should be able to support some basic operations such as changing its link value and returning its member data Therefore, a good implementation of an item is a class The class will be called Node CS 103

Class Node Design for Item The member variables of Node are: The data field(s) The link pointer, which will be called next The functions are: Function Action Why Needed getNext( ) returns the link. for navigation getData( ) returns the data for search setNext(Node *ptr) sets link to ptr for insert/delete setData(type x) sets data to x. to modify data contents CS 103

Class Node Type 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); }; CS 103

Class Node Implementation 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;}; CS 103

Implementation of Linked List A linked list is a collection of Node objects, and must support a number of operations Therefore, it is sensible to implement a linked list as a class The class name for it is List CS 103

Class Design for List The member variables are: Member functions Node *head_ptr; Node *tail_ptr; int numOfItems; Member functions Node * search(int x); Node * itemAt(int position); void removeHead(); void removeTail(); void remove(int x); void insertHead(int x); void insertTail(int x); void insert(Node *p, int x) // inserts item after the item // pointed to by p int size( ); Node *getHead( ); Node getTail( ); bool isEmpty( ); CS 103

Class List Type 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); }; CS 103

Implementation of Class 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 (numOfItem==0);}; CS 103

Implementation of search( ) 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 }; CS 103

Implementation of itemAt( ) 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; }; CS 103

Implementation of removeHead( ) void List::removeHead( ){ if (numOfItems == 0) return; Node * currentPtr = getHead( ); head_ptr=head_ptr->getNext( ); delete currentPtr; numOfItems--; }; CS 103

Implementation of removeTail( ) 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--; }; CS 103

Implementation of remove( ) 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(); } }; CS 103

Implementation of insertHead( ) 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++; }; CS 103

Implementation of insertTail( ) void List::insertTail(int x){ if (isEmpty()) insertHead(x); else{ Node * newTail = new Node(x); tail_ptr->setNext(newTail); tail_ptr = newTail; numOfItems++; } }; CS 103

Implementation of insert( ) // 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++; } }; CS 103

For your Work in the Lab Make the necessary modifications to the List class implementations so that no two Nodes have the same data value. This is useful when using linked lists to implement sets. Make the necessary changes to the List class so that the Nodes are in increasing order of data values. In particular, replace all the insert methods, and replace them with insert(int x), which inserts x in the right position so that the List remains sorted. CS 103