Managing Inventory Records with Linked Lists
190 likes | 293 Vues
Explore the advantages of using linked lists for dynamic inventory management. Learn insertion, deletion, and other actions in the context of singly and doubly linked lists.
Managing Inventory Records with Linked Lists
E N D
Presentation Transcript
Example • We would like to keep a list of inventory records – but only as many as we need • An array is a fixed size • Instead – use a linked list • What are the disadvantages of using a linked list?
Linked List Object Object Object next next next Ø • Node – one element of the linked list • Object – data stored in the node – examples? • next – a reference to the next node in the list • last node points to NULL
Linked List tail Object Object Object head next next next Ø • head keeps track of the head of the list • tail keeps track of the last node in the list • tail not always used
Insertion at Head tail new_node Object1 Object2 head next next Ø Object3 Insert here next
Insertion at Head tail new_node Object1 Object2 head next next Ø Object3 next • Create new_node • store object in new_node • Point new_node next to the node head points to
Insertion at Head tail new_node Object1 Object2 head next next Ø Object3 next • Create new_node • store object in new_node • Point new_node next to the node head points to • Point head to new_node
Insertion at Head tail Object3 Object1 Object2 head next next next Ø • Does this algorithm work for the list below? new_node tail Ø head Object3 next
Insertion at Head • Create new_node • store object in new_node • Point new_node next to the node head points to • Point head to new_node • If tail points to NULL • point tail to new_node
Insertion at Head new_node tail • Create new_node • store object in new_node • Point new_node next to the node head points to • Point head to new_node • If tail points to NULL • point tail to new_node Ø head Object3 next
Insertion at Tail tail Object1 Object2 head next next Ø Object3 Insert here new_node next new_node tail Ø head Object3 next
Find tail 5 12 3 head next next next Ø • find(3) • find(16) - always remember to deal with special cases
Deletion tail Object3 Object1 Object2 head next next next Ø • Deletion of head • Complexity? • Deletion of tail • Complexity?
Insertion/Deletion in Middle tail Object3 Object1 Object2 head next next next Ø • Insert between Object1 and Object2 • Delete Object1
Exercises • Implement a method to recursively count number of nodes in a linked list • Implement a method to reverse a linked list • Implement a method that takes as input two integers representing node positions and swaps the specified nodes
Doubly Linked Lists Object1 Object2 Object3 header prev prev prev trailer next next next • Each node keeps a pointer to the next node and to the previous node • Makes some operations (such as insertion at end) more efficient • Costs? • At the beginning and end of the list are sentinel nodes • Simplify insertion/deletion algorithm
Doubly Linked Lists Object1 Object2 Object3 header prev prev prev trailer next next next • Insertion and deletion at beginning/end • Insertion and deletion in middle header trailer
new_node Doubly Linked Lists Object4 prev insert here next Object1 Object2 Object3 header prev prev prev trailer next next next • Insertion
new_node Doubly Linked Lists Object4 prev insert here next Object1 Object2 Object3 header prev prev prev trailer next next next • Insertion at head • Set next of new_node to point to what header’s next points to • Set prev of node that header’s next points to to point to new_node • Set prev of new_node to point to header • Set header’s next to point to new_node • Number 1 must come before number 4 • Insertion at trailer? • Deletion?