1 / 16

Linked lists

Linked lists. Prof. Noah Snavely CS1114 http://www.cs.cornell.edu/courses/cs1114. Administrivia. Assignment 3 due next Friday, 3/9 Prelim 1! This Thursday in class Topics through today (including running time, sorting, selection, graphs, linked lists) Closed book / closed notes

rleila
Télécharger la présentation

Linked lists

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Linked lists Prof. Noah Snavely CS1114 http://www.cs.cornell.edu/courses/cs1114

  2. Administrivia • Assignment 3 due next Friday, 3/9 • Prelim 1! This Thursday in class • Topics through today (including running time, sorting, selection, graphs, linked lists) • Closed book / closed notes • Review session Wednesday evening, 7pm, Upson 111

  3. 7 7 4 1 1 4 5 8 8 2 5 2 6 3 9 6 9 3 7 3 4 0 X 3 3 5 8 8 4 8 3 1 5 3 1 0 1 4 7 X Linked Lists -- Example

  4. 8 4 1 3 Inserting an element – linked lists • Create a new cell and splice it into the list • Splicing depends on where the cell goes: • How do we insert: • At the end? • In the middle? • At the beginning? M(1) 5

  5. Adding a header • We can represent the linked list just by the initial cell, but this is problematic • Problem with inserting at the beginning • Instead, we add a header – a few entries that are not cells, but hold information about the list • A pointer to the first element • A count of the number of elements

  6. 10 10 10 10 1 7 4 7 1 4 4 1 1 4 7 7 11 11 11 11 5 8 5 2 2 2 8 5 5 8 8 2 12 12 12 12 9 3 3 9 9 9 3 6 6 6 6 3 11 7 5 0 5 5 5 X 7 7 5 5 1 1 3 5 X 2 0 0 4 1 0 1 2 8 2 X 3 3 8 2 9 X 9 2 Linked list insertion 13 X X X X Initial list 13 First element starts at 5 Size of list is 2 X X X X Insert a 5 at end 13 Insert an 8 after the 1 13 3 X X X 3 6 5 X Insert a 6 at the start

  7. Linked list deletion • We can also delete cells • Simply update the header and change one pointers (to skip over the deleted element) • Deleting things is the source of many bugs in computer programs • You need to make sure you delete something once, and only once

  8. 10 10 10 10 1 4 7 4 4 4 7 7 7 1 1 1 11 11 11 11 5 2 2 2 8 8 2 5 5 8 8 5 12 12 12 12 6 3 9 9 3 6 3 9 3 9 6 6 5 5 0 5 0 7 5 5 3 5 0 5 1 1 1 0 3 0 2 0 0 4 1 1 8 2 3 2 8 3 2 9 8 8 2 9 Linked list deletion Initial list 13 3 X X X Delete the last cell 13 13 13 3 3 3 X X X X X X X X X Delete the 8 Delete the first cell

  9. Linked lists – running time • We can insert an item (at the front) in constant (O(1)) time • Just manipulating the pointers • As long as we know where to allocate the cell • We can delete an element (at the front) in constant time

  10. Linked lists – running time • What about inserting / deleting from the end of the list? • How can we fix this?

  11. 8 4 1 3 3 1 4 8 Doubly linked lists

  12. 1 4 7 5 8 2 3 9 6 0 4 4 7 8 4 7 2 0 8 4 A doubly-linked list in memory First element Size of list Last element

  13. Notes on doubly-linked lists • Inserting and deleting at both ends is fast, but the code is very easy to get wrong • Try it on all cases, especially trivial ones • Look for invariants: statements that must be true of any valid list • Debug your code by checking invariants • In C/C++, this is done via assert • Most languages have a facility like this built in • But if not, you can just write your own!

  14. Memory allocation • So far we just assumed that the hardware supplied us with a huge array M • When we need more storage, we just grab locations at the end • Keep track of next free memory location • What can go wrong? • Consider repeatedly adding, deleting an item • When we delete items from a linked list we change pointers so that the items are inaccessible • But they still waste space!

  15. Storage reclamation • Someone has to figure out that certain locations can be re-used (“garbage”) • If this is too conservative, your program will run slower and slower (“memory leak”) • If it’s too aggressive, your program will crash (“blue screen of death”)

  16. Questions?

More Related