Linked List X Header 35 20 4000 100020003000 2000 3000 55 X 4000 ptr Question: Search a value 40 in the linked list. Steps: ptr = Header->Link While(ptr.

Slides:



Advertisements
Similar presentations
Linked Lists.
Advertisements

Data Structures ADT List
Linked Lists Linked Lists Representation Traversing a Linked List
Data Structures Using C++
Data Structure Lecture-5
Data Structure Lecture-3 Prepared by: Shipra Shukla Assistant Professor Kaziranga University.
Foundation of Computing Systems Lecture 2 Linked Lists.
Data Structures: A Pseudocode Approach with C
COSC 1P03 Data Structures and Abstraction 5.1 Linear Linked Structures.
Lecture 4 Abstract Data Types (ADT). Usual Data Types Integer, Double, Boolean You do not know the implementation of these. There are some operations.
Insertion into a B+ Tree Null Tree Ptr Data Pointer * Tree Node Ptr After Adding 8 and then 5… 85 Insert 1 : causes overflow – add a new level * 5 * 158.
C++ Programming: Program Design Including Data Structures, Fifth Edition Chapter 17: Linked Lists.
Data Structures Using C++ 2E
Searching Searching: –Mainly used for: Fetching / Retrieving the Information such as, –Select query on a database. –Important thing is: Retrieval of Information.
Review Binary Tree Binary Tree Representation Array Representation Link List Representation Operations on Binary Trees Traversing Binary Trees Pre-Order.
UNIT-2. Singly Linked List Doubly Linked List Circular Linked List Representing Stack with Linked List. Representing Queue with Linked List.
Reference: Vinu V Das, Principles of Data Structures using C and C++
IT 60101: Lecture #151 Foundation of Computing Systems Lecture 15 Searching Algorithms.
Data Structures Using Java1 Chapter 4 Linked Lists.
CSC 211 Data Structures Lecture 13
Department of Computer Science Data Structures Using C++ 2E Chapter 5 Linked Lists.
Stack Any Other Data Structure Array Linked List
Copyright © 2007 Pearson Education, Inc. Publishing as Pearson Addison-Wesley Slide
Copyright © 2012 Pearson Education, Inc. Chapter 17: Linked Lists.
Queue Queue: –Like any other data structure (apart from Array and Linked List), Queue also can be implemented, –Either as an Array or, –As a Linked List.
Data Structures Using C++1 Chapter 5 Linked Lists.
Linked Lists Data Structures & Problem Solving Using JAVA Second Edition Mark Allen Weiss Chapter 17 © 2002 Addison Wesley.
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,
C++ Programming: Program Design Including Data Structures, Fourth Edition Chapter 17: Linked Lists (part 2)
Algorithms and Data Structures
C++ Programming: From Problem Analysis to Program Design, Fourth Edition Chapter 18: Linked Lists (part 2)
Binary Search Trees (BST)
2/21/20161 List Operations Advanced Programming Ananda Gunawardena.
Dale Roberts Department of Computer and Information Science, School of Science, IUPUI CSCI 240 Elementary Data Structures Linked Lists Linked Lists Dale.
Department of Computer Science 1 Some Practice Let’s practice for the final a little bit. OK?
 Array is a data structure were elements are stored in consecutive memory location.in the array once the memory is allocated.it cannot be extend any more.
Circular linked list A circular linked list is a linear linked list accept that last element points to the first element.
Chapter 17: Linked Lists. Objectives In this chapter, you will: – Learn about linked lists – Learn the basic properties of linked lists – Explore insertion.
1 CSC 211 Data Structures Lecture 11 Dr. Iftikhar Azim Niaz 1.
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:
Lecture 16 Linked Lists. In this lecture Fundamentals Applications Memory Allocation Creating a List Inserting Nodes.
Linked List.  Is a series of connected nodes, where each node is a data structure with data and pointer(s) Advantages over array implementation  Can.
Data Structure & Algorithms
Array 10 GB Hard Disk 2 GB 4 GB2 GB 3 GB DATA 4 GB Free Store data in the form of Array (Continuous memory locations) Solution-1: No Solution. Memory Insufficient.
C++ Programming: Program Design Including Data Structures, Fourth Edition Chapter 17: Linked Lists.
C++ Programming: From Problem Analysis to Program Design, Fourth Edition Chapter 18: Linked Lists.
CHAPTER 51 LINKED LISTS. Introduction link list is a linear array collection of data elements called nodes, where the linear order is given by means of.
UNIT-II Topics to be covered Singly linked list Circular linked list
LINKED LISTS.
© Oxford University Press All rights reserved. Data Structures Using C, 2e Reema Thareja.
© Oxford University Press All rights reserved. Data Structures Using C, 2e Reema Thareja.
LIST Unsorted 1.Set PTR := START 2.Repeat Step 3 while PTR=NULL 3.If ITEM = INFO[PTR], then : Set LOC := PTR and Exit else Set PTR:=LINK[PTR] [PTR points.
Chapter 16: Linked Lists.
C++ Programming:. Program Design Including
Data Structures Using C, 2e
Linked List :: Basic Concepts
Lectures linked lists Chapter 6 of textbook
Program based on queue & their operations for an application
UNIT – I Linked Lists.
Prepared by, Jesmin Akhter, Lecturer, IIT, JU
UNIT-3 LINKED LIST.
Linked-list.
Traversing a Linked List
Lectures Queues Chapter 8 of textbook 1. Concepts of queue
DATA STRUCTURE QUEUE.
Chapter 18: Linked Lists.
11-3 LINKED LISTS A linked list is a collection of data in which each element contains the location of the next element—that is, each element contains.
LINKED LIST.
LINKED LIST Dr. T. Kokilavani Assistant Professor
CMPT 225 Lecture 5 – linked list.
Presentation transcript:

Linked List X Header X 4000 ptr Question: Search a value 40 in the linked list. Steps: ptr = Header->Link While(ptr != NULL) AND (ptr->Data != 40), do ptr NULL EndWhile ptr = ptr->Link Steps: (cntd) If(ptr->Data == 40) print “Search successful.” print “Search unsuccessful.” Else EndIf Stop 1000 Circular Linked List While(ptr != Header) [Null Link Problem] ptr

Linked List Circular Linked List: –Advantages: Virtual traversal possible in both the directions. –Left to Right (Direct) –Right to Left (Indirect) Overcomes the NULL Link problem.

Circular Linked List Algorithm: InsertFront_CL, X = 10 NULL Header new ptr

Circular Linked List Algorithm: InsertEnd_CL, X = 10 NULL Header new ptr

Circular Linked List Algorithm: Merge_CL X Header X Header ptr ptr ptr Header

Linked List X Header NULL X Header Single Linked List Circular Linked List / Circular Single Linked List Null Link Problem: Yes 2-way traversal: No Null Link Problem: No 2-way traversal: Yes (Only virtual) Node Structure DATA LINK DATA RLINKLLINK NextPreviousNext

Linked List Node Structure DATA RLINKLLINK NextPrevious X X X 7000 Header Double Linked List / Doubly Linked List Left to Right Right to Left Traversal?

Algorithm: InsertFront_DL X X X 7000 Header Question: Insert a nodeAt the front.Value = new 9000 ptr Steps: new = GetNode(NODE) If(new == NULL), then Else print “Memory Insufficient.” ptr = Header->RLink new->Data = 35 new->LLink = Header new->RLink = ptr Header->RLink = new ptr->LLink = new EndIf Steps: (cntd) X

Trace Algorithm: InsertFront_DL, X = 35 X X X 1000 Header ptr Steps: new = GetNode(NODE) If(new == NULL), then Else print “Memory Insufficient.” ptr = Header->RLink new->Data = X new->LLink = Header new->RLink = ptr Header->RLink = new ptr->LLink = new EndIf Stop NULL If(ptr != NULL), then EndIf X 2000 new 2000

Linked List Algorithm: –InsertFront_DL Input: –Header: Pointer to the starting node of the linked list. –X: Data of the node to be inserted at front. Output: –Node with data X inserted at front of Double Linked List. Data Structure: –Double Linked List whose address of starting node is known from Header.

Algorithm: InsertFront_DL Steps: new = GetNode(NODE) If(new == NULL), then print “Memory Insufficient.” Else ptr = Header->RLink new->Data = X new->LLink = Header new->RLink = ptr Header->RLink = new If(ptr != NULL), then ptr->LLink = new EndIf Stop

Algorithm: InsertEnd_DL X X X 7000 Header Question: Insert a nodeAt the end.Value = X 9000 new 9000 ptr Steps: new = GetNode(NODE) If(new == NULL), then Else print “Memory Insufficient.” new->Data = 35 new->LLink = ptr new->RLink = NULL ptr->RLink = new EndIf Steps: (cntd) X ptr While(ptr->RLink != NULL) EndWhile ptr = ptr->RLink //new->RLink = ptr->RLink Stop ptr ptr = Header

new->LLink = ptr Trace Algorithm: InsertEnd_DL, X = 35 X X X 1000 Header Steps: new = GetNode(NODE) X 2000 new 2000 ptr If(new == NULL), then Else print “Memory Insufficient.” new->Data = X new->RLink = NULL ptr->RLink = new EndIf While(ptr->RLink != NULL) EndWhile ptr = ptr->RLink //new->RLink = ptr->RLink Stop ptr = Header

Linked List Algorithm: –InsertEnd_DL Input: –Header: Pointer to the starting node of the linked list. –X: Data of the node to be inserted at end. Output: –Node with data X inserted at end of Double Linked List. Data Structure: –Double Linked List whose address of starting node is known from Header.

Algorithm: InsertEnd_DL Steps: new = GetNode(NODE) If(new == NULL), then print “Memory Insufficient.” Else ptr = Header While(ptr->RLink != NULL) ptr = ptr->RLink EndWhile new->Data = X new->LLink = ptr new->RLink = NULL //new->RLink = ptr->RLink ptr->RLink = new EndIf Stop

Algorithm: InsertAny_DL Question: Insert a node.After node with value 25.Value = 35 X X Header 9000 ptr X ptr new X X Header ptr X 7000 ptr

Algorithm: InsertAny_DL Question: Insert a node. After node with value 25. Value = 35 Steps: ptr = Header While(ptr->RLink != NULL) AND (ptr->Data != 25) EndWhile ptr = ptr->RLink new = GetNode(NODE) If(new == NULL), then print “Memory Insufficient.” Else If(ptr->Data != 25), then print “25 not found in the linked list.” Else ptr1 = ptr->RLink new->Data = 35 new->LLink = ptr new->RLink = ptr1 EndIf ptr->RLink = new ptr1->LLink = new Stop X KEY

X X X 5000 Header 7000 ptr X 7000 new Trace Algorithm: InsertAny_DL Question: Insert a node. KEY = 25.X = 35 Steps: ptr = Header While(ptr->RLink != NULL) AND (ptr->Data != KEY) EndWhile ptr = ptr->RLink new = GetNode(NODE) If(new == NULL), then print “Memory Insufficient.” Else If(ptr->Data != KEY), then print “KEY not found in the linked list.” Else ptr1 = ptr->RLink new->Data = X new->LLink = ptr new->RLink = ptr1 EndIf ptr->RLink = new ptr1->LLink = new Stop Steps: (cntd) If(ptr1 != NULL) EndIf ptr1 NULL

Linked List Algorithm: –InsertAny_DL Input: –Header: Pointer to the starting node of the linked list. –KEY: Data of the node after which a new node is to be inserted. –X: Data of the node to be inserted. Output: –Node with data X inserted after node with data KEY if successful, a message otherwise. Data Structure: –Double Linked List whose address of starting node is known from Header.

Algorithm: InsertAny_DL Steps: new = GetNode(NODE) If(new == NULL), then print “Memory Insufficient.” Else ptr = Header While(ptr->RLink != NULL) AND (ptr->Data != KEY) ptr = ptr->RLink EndWhile If(ptr->Data != KEY), then print “KEY not found in the linked list.” Else ptr1 = ptr->RLink new->Data = X new->LLink = ptr new->RLink = ptr1 ptr->RLink = new If(ptr1 != NULL) ptr1->LLink = new EndIf

Algorithm: DeleteFront_DL Question: Delete a node.From the front of linked list. X X Header 5000 ptr ptr X X X X Header Steps: If(Header->RLink == NULL) print “Empty Linked List. Deletion not possible.” Else ptr = Header->RLink ptr1 = ptr->RLink Header->RLink = ptr1 ptr1->LLink = Header ReturnNode(ptr) EndIf

Trace Algorithm: DeleteFront_DL Question: Delete a node.From the front of linked list. X X X 3000 Header X ptr Steps: If(Header->RLink == NULL) print “Empty Linked List. Deletion not possible.” Else ptr = Header->RLink ptr1 = ptr->RLink Header->RLink = ptr1 ptr1->LLink = Header ReturnNode(ptr) EndIf Stop If(ptr1 != NULL) EndIf ptr1 NULL

Linked List Algorithm: –DeleteFront_DL Input: –Header: Pointer to the starting node of the linked list. Output: –Node from the front deleted from the linked list if it exists, a message otherwise. Data Structure: –Double Linked List whose address of starting node is known from Header.

Algorithm: DeleteFront_DL Steps: If(Header->RLink == NULL) print “Empty Linked List. Deletion not possible.” Else ptr = Header->RLink ptr1 = ptr->RLink Header->RLink = ptr1 If(ptr1 != NULL) ptr1->LLink = Header EndIf ReturnNode(ptr) EndIf Stop

Algorithm: DeleteEnd_DL Question: Delete a node.From the end of linked list. X X Header ptr X 7000 X X X 1000 Header Steps: If(Header->RLink == NULL) print “Empty Linked List. Deletion not possible.” Else ptr1 = ptr->LLink ptr1->RLink = NULL ReturnNode(ptr) EndIf ptr ptr1 While(ptr->RLink != NULL) EndWhile ptr = ptr->RLink X ptr ptr = Header // ptr1->RLink = ptr->RLink

Algorithm: DeleteEnd_DL Question: Delete a node.From the end of linked list. X X X Header ptr Steps: If(Header->RLink == NULL) print “Empty Linked List. Deletion not possible.” Else ptr1 = ptr->LLink ptr1->RLink = NULL ReturnNode(ptr) EndIf ptr1 While(ptr->RLink != NULL) EndWhile ptr = ptr->RLink X ptr ptr = Header // ptr1->RLink = ptr->RLink Stop

Linked List Algorithm: –DeleteEnd_DL Input: –Header: Pointer to the starting node of the linked list. Output: –Node from the end deleted from the linked list if it exists, a message otherwise. Data Structure: –Double Linked List whose address of starting node is known from Header.

Algorithm: DeleteEnd_DL Steps: If(Header->RLink == NULL) print “Empty Linked List. Deletion not possible.” Else ptr = Header While(ptr->RLink != NULL) ptr = ptr->RLink EndWhile ptr1 = ptr->LLink ptr1->RLink = NULL //ptr1->RLink = ptr->RLink ReturnNode(ptr) EndIf Stop

Algorithm: DeleteAny_DL Question: Delete a node.Value = 25 X X Header ptr ptr ptr X ptr2 X X Header ptr X 7000 ptr X X X 1000 Header

Algorithm: DeleteAny_DL Question: Delete a node.Value = 25 Steps: ptr = Header While(ptr->RLink != NULL) AND (ptr->Data != 25) ptr = ptr->RLink EndWhile If(ptr->Data != 25) ptr1 = ptr->LLink ptr2 = ptr->RLink ptr1->RLink = ptr2 ptr2->LLink = ptr1 ReturnNode(ptr) Else print “25 not found. Deletion not possible.” EndIf Stop KEY

Trace Algorithm: DeleteAny_DL KEY = 25 Steps: ptr = Header While(ptr->RLink != NULL) AND (ptr->Data != KEY) ptr = ptr->RLink EndWhile If(ptr->Data != KEY) ptr1 = ptr->LLink ptr2 = ptr->RLink ptr1->RLink = ptr2 ptr2->LLink = ptr1 ReturnNode(ptr) Else print “KEY not found. Deletion not possible.” EndIf Stop Steps: (cntd) If(ptr2 != NULL) EndIf X X X 5000 Header ptr ptr2 NULL ptr1 X

Linked List Algorithm: –DeleteAny_DL Input: –Header: Pointer to the starting node of the linked list. –KEY: Data of the node to be deleted. Output: –Node with data KEY deleted if it exists, a message otherwise. Data Structure: –Double Linked List whose address of starting node is known from Header.

Algorithm: DeleteAny_DL Steps: ptr = Header While(ptr->RLink != NULL) AND (ptr->Data != KEY) ptr = ptr->RLink EndWhile If(ptr->Data != KEY) print “KEY not found. Deletion not possible.” Else ptr1 = ptr->LLink ptr2 = ptr->RLink ptr1->RLink = ptr2 If(ptr2 != NULL), ptr2->LLink = ptr1 EndIf ReturnNode(ptr) EndIf Stop

Algorithm: Merge_DL Question: Merge 2 linked lists into a single double linked list. X X X 3000 Header1 ptr 8000 X X X 9000 Header2 ptr Steps: ptr = Header1 While(ptr->RLink != NULL) EndWhile ptr = ptr->RLink ptr1 = Header2->RLink Steps: (cntd) ptr->RLink = ptr1 ptr1->LLink = ptr Stop Header ReturnNode(Header2) Header = Header1 Needs to be conditional.

Trace Algorithm: Merge_DL Steps: ptr = Header1 While(ptr->RLink != NULL) EndWhile ptr = ptr->RLink ptr1 = Header2->RLink ptr->RLink = ptr1 ptr1->LLink = ptr Stop ReturnNode(Header2) Header = Header1 If(ptr1 != NULL) EndIf X X X 1000 Header1 ptr X X X 2000 Header2 Header ptr1 NULL X X Header1 ptr X X X 3000 Header2 Header ptr1 NULL X 2000 ptr

Linked List Algorithm: –Merge_DL Input: –Header1: Pointer to the starting node of the 1 st linked list. –Header2: Pointer to the starting node of the 2 nd linked list. Output: –Header: Pointer to the node of merged/combined/joined linked list. Data Structure: –Double Linked List whose address of starting node is known from Header.

Algorithm: Merge_DL Steps: ptr = Header1 While(ptr->RLink != NULL) ptr = ptr->RLink EndWhile ptr1 = Header2->RLink ptr->RLink = ptr1 If(ptr1 != NULL) ptr1->LLink = ptr EndIf ReturnNode(Header2) Header = Header1 Stop

Algorithm: Split_DL Question: Split a list into 2 separate lists. X X Header ptr X 5000 ptr1 From value = 35 X X Header1 X X Header X 4000 ptr X 6000

Algorithm: Split_DL Question: Split a list into 2 separate lists.From value = 35 Steps: ptr = Header While(ptr->RLink != NULL) AND (ptr->Data != 35) EndWhile ptr = ptr->RLink If(ptr->Data == 35) Header1 = GetNode(NODE) ptr1 = ptr->RLink Header1->Data = NULL Header1->LLink = NULL Header1->RLink = ptr1 ptr->RLink = NULL ptr1->LLink = Header1 Else print “35 not found. Split not possible.” EndIf KEY Needs to be conditional.

Trace Algorithm: Split_DL, KEY = 35 Steps: ptr = Header While(ptr->RLink != NULL) AND (ptr->Data != KEY) EndWhile ptr = ptr->RLink If(ptr->Data == KEY) Header1 = GetNode(NODE) ptr1 = ptr->RLink Header1->Data = NULL Header1->LLink = NULL Header1->RLink = ptr1 ptr->RLink = NULL ptr1->LLink = Header1 Else print “KEY not found. Split not possible.” EndIf If(ptr! != NULL) EndIf X X X 2000 Header ptr ptr1 NULL X X X 3000 Header1

Linked List Algorithm: –Split_DL Input: –Header: Pointer to the starting node of the linked list. –KEY: Data of the node after which the list is supposed to be split. Output: –Header1: Pointer to the starting node of the 2 nd linked list if split is successful or message otherwise. Data Structure: –Double Linked List whose address of starting node is known from Header.

Algorithm: Split_DL Steps: ptr = Header While(ptr->RLink != NULL) AND (ptr->Data != KEY) ptr = ptr->RLink EndWhile If(ptr->Data == KEY) Header1 = GetNode(NODE) ptr1 = ptr->RLink Header1->Data = NULL Header1->LLink = NULL Header1->RLink = ptr1 ptr->RLink = NULL If(ptr1 != NULL) ptr1->LLink = Header1 EndIf Else print “KEY not found. Split not possible.” EndIf Stop

Linked List Double Linked List X X X Header Circular Circular Doubly Linked List Null Link Problem: Yes

Applications of Linked List 5x 2 y 2 + 3x 2 y - 20y Polynomial in 2 variables Co-efficient Node Structure: CoefficientPower of xPower of yLink Next Node XXX X Header Representation of Polynomials

Applications of Linked List 10x 4 y 3 + 5xy - 50 Polynomial in 2 variables XXX X Header Representation of Polynomials

Applications of Linked List P(x) = 20x x x Polynomial in 1 variable Representation of Polynomials Node Structure: CoefficientPower of xLink Next Node Node Structure: CoefficientPower of xPower of yLink Next Node Power of z P(x,y,z) = 10x 3 y 2 z + 5xy 2 z Polynomial in 3 variables