Presentation is loading. Please wait.

Presentation is loading. Please wait.

More Linking Up with Linked Lists

Similar presentations


Presentation on theme: "More Linking Up with Linked Lists"— Presentation transcript:

1 More Linking Up with Linked Lists
Chapter 11 Nyhoff, ADTs, Data Structures and Problem Solving with C++, Second Edition, © 2005 Pearson Education, Inc. All rights reserved

2 Chapter Contents 11.1 Some Variants of Singly-Linked Lists
11.2 Linked Implementation of Sparse Polynomials 11.3 Doubly-Linked Lists and the Standard C++ list 11.4 Case Study: Larger-Integer Arithmetic 11.5 Other Multiply-Linked Lists Nyhoff, ADTs, Data Structures and Problem Solving with C++, Second Edition, © 2005 Pearson Education, Inc. All rights reserved

3 Chapter Objectives Survey common variants of linked lists and why they are used Study in detail an application of linked lists to implement sparse polynomials Describe doubly-linked lists and how they are used to implement C++ STL list container Build a class that makes it possible to do arithmetic with large integers Look briefly at some other applications of multiply-linked lists Nyhoff, ADTs, Data Structures and Problem Solving with C++, Second Edition, © 2005 Pearson Education, Inc. All rights reserved

4 Linked Lists with Head Nodes
Consider linked lists from Chapter 6 First node is different from others Has no predecessor Thus insertions and deletions must consider two cases First node or not first node The algorithm is different for each Nyhoff, ADTs, Data Structures and Problem Solving with C++, Second Edition, © 2005 Pearson Education, Inc. All rights reserved

5 Linked Lists with Head Nodes
Dual algorithms can be reduced to one Create a "dummy" head node Serves as predecessor holding actual first element Thus even an empty list has a head node Nyhoff, ADTs, Data Structures and Problem Solving with C++, Second Edition, © 2005 Pearson Education, Inc. All rights reserved

6 Linked Lists with Head Nodes
For insertion at beginning of list Head node is predecessor for new node newptr->next = predptr->next; predptr->next = newptr; Nyhoff, ADTs, Data Structures and Problem Solving with C++, Second Edition, © 2005 Pearson Education, Inc. All rights reserved

7 Linked Lists with Head Nodes
For deleting first element from a list with a head node Head node is the predecessor predptr->next = ptr->next; delete ptr; Nyhoff, ADTs, Data Structures and Problem Solving with C++, Second Edition, © 2005 Pearson Education, Inc. All rights reserved

8 Circular Linked Lists Set the link in last node to point to first node
Each node now has both predecessor and successor Insertions, deletions now easier Special consideration required for insertion to empty list, deletion from single item list Nyhoff, ADTs, Data Structures and Problem Solving with C++, Second Edition, © 2005 Pearson Education, Inc. All rights reserved

9 Circular Linked Lists Traversal algorithm must be adjusted if (first != 0) // list not empty { ptr = first; do { // process ptr->data ptr = ptr->next; } while (ptr != first); } A do-while loop must be used instead of a while loop Why is this required? Nyhoff, ADTs, Data Structures and Problem Solving with C++, Second Edition, © 2005 Pearson Education, Inc. All rights reserved

10 Linked Implementation of Sparse Polynomials
Consider a polynomial of degree n Can be represented by a list For a sparse polynomial this is not efficient Nyhoff, ADTs, Data Structures and Problem Solving with C++, Second Edition, © 2005 Pearson Education, Inc. All rights reserved

11 Linked Implementation of Sparse Polynomials
We could represent a polynomial by a list of ordered pairs { (coef, exponent) … } Fixed capacity of array still problematic Wasted space for sparse polynomial Nyhoff, ADTs, Data Structures and Problem Solving with C++, Second Edition, © 2005 Pearson Education, Inc. All rights reserved

12 Linked Implementation of Sparse Polynomials
Linked list of these ordered pairs provides an appropriate solution Each node has form shown Now whether sparse or well populated, the polynomial is represented efficiently Nyhoff, ADTs, Data Structures and Problem Solving with C++, Second Edition, © 2005 Pearson Education, Inc. All rights reserved

13 Linked Implementation of Sparse Polynomials
Note start of Polynomial class template Type parameter CoefType Term and Node are inner classes Addition operator Adds coefficients of like degrees Must traverse the two addend polynomials Requires temporary pointers for each polynomial (the addends and the resulting sum) Nyhoff, ADTs, Data Structures and Problem Solving with C++, Second Edition, © 2005 Pearson Education, Inc. All rights reserved

14 Addition Operator Requires temporary pointers for each polynomial (the addends and the resulting sum) Nyhoff, ADTs, Data Structures and Problem Solving with C++, Second Edition, © 2005 Pearson Education, Inc. All rights reserved

15 Addition Operator As traversal takes place Compare exponents
If different, node with smaller exponent and its coefficient attached to result polynomial If exponents same, coefficients added, new corresponding node attached to result polynomial View source code Nyhoff, ADTs, Data Structures and Problem Solving with C++, Second Edition, © 2005 Pearson Education, Inc. All rights reserved

16 Doubly-Linked Lists Bidirectional lists
Nodes have data part, forward and backward link Facilitates both forward and backward traversal Requires pointers to both first and last nodes Nyhoff, ADTs, Data Structures and Problem Solving with C++, Second Edition, © 2005 Pearson Education, Inc. All rights reserved

17 Doubly-Linked Lists To insert a new node
Set forward and backward links to point to predecessor and successor Then reset forward link of predecessor, backward link of successor Nyhoff, ADTs, Data Structures and Problem Solving with C++, Second Edition, © 2005 Pearson Education, Inc. All rights reserved

18 Doubly-Linked Lists To delete a node
Reset forward link of predecessor, backward link of successor Then delete removed node Nyhoff, ADTs, Data Structures and Problem Solving with C++, Second Edition, © 2005 Pearson Education, Inc. All rights reserved

19 The STL list<T> Class Template
A sequential container Optimized for insertion and erasure at arbitrary points in the sequence. Implemented as a circular doubly-linked list with head node. Nyhoff, ADTs, Data Structures and Problem Solving with C++, Second Edition, © 2005 Pearson Education, Inc. All rights reserved

20 Comparing List<t> With Other Containers
Property Array vector<T> deque<T> list<T> Direct/random access ([]) + (exclnt) +  (good) X Sequential access + +  + Insert/delete at front -(poor) - + + Insert/delete in middle Insert/delete at end Overhead lowest low low/medium high Note : list<T> does not support direct access does not have the subscript operator [ ]. Nyhoff, ADTs, Data Structures and Problem Solving with C++, Second Edition, © 2005 Pearson Education, Inc. All rights reserved

21 list<t> Iterators
list<T>'s iterator is "weaker" than that for vector<T>. vector<T>: random access iterators list<T>: bidirectional iterators Operations in common ++ Move iterator to next element (like ptr = ptr-> next) -- Move iterator to preceding element (like ptr = ptr-> prev) * dereferencing operator (like ptr-> data) Nyhoff, ADTs, Data Structures and Problem Solving with C++, Second Edition, © 2005 Pearson Education, Inc. All rights reserved

22 list<t> Iterators
Operators in common = assignment (for same type iterators) it1 = it2 makes it1 positioned at same element as it2 == and != (for same type iterators) checks whether iterators are positioned at the same element See basic list operations, Table 11-2, pg 621 View demonstration of list operations, Fig. 11-1 Nyhoff, ADTs, Data Structures and Problem Solving with C++, Second Edition, © 2005 Pearson Education, Inc. All rights reserved

23 Example: Internet Addresses
Consider a program that stores IP addresses of users who make a connection with a certain computer We store the connections in an AddressCounter object Tracks unique IP addresses and how many times that IP connected View source code, Fig. 11.2 Note uses of STL list and operators Nyhoff, ADTs, Data Structures and Problem Solving with C++, Second Edition, © 2005 Pearson Education, Inc. All rights reserved

24 The STL list<T> Class Template
Node structure struct list_node { pointer next, prev; T data; } Nyhoff, ADTs, Data Structures and Problem Solving with C++, Second Edition, © 2005 Pearson Education, Inc. All rights reserved

25 The STL list<T> Class Template
But it's allo/deallo-cation scheme is complex Does not simply using new and delete operations. Using the heap manager is inefficient for large numbers of allo/deallo-cations Thus it does it's own memory management. Nyhoff, ADTs, Data Structures and Problem Solving with C++, Second Edition, © 2005 Pearson Education, Inc. All rights reserved

26 The STL list<T> Memory Management
When a node is allocated If there is a node on the free list, allocate it. This is maintained as a linked stack If the free list is empty: Call the heap manager to allocate a block of memory (a "buffer", typically 4K) Carve it up into pieces of size required for a node of a list<T>. Nyhoff, ADTs, Data Structures and Problem Solving with C++, Second Edition, © 2005 Pearson Education, Inc. All rights reserved

27 The STL list<T> Memory Management
When a node is deallocated Push it onto the free list. When all lists of this type T have been destroyed Return it to the heap Nyhoff, ADTs, Data Structures and Problem Solving with C++, Second Edition, © 2005 Pearson Education, Inc. All rights reserved

28 Case Study: Large-Integer Arithmetic
Recall that numeric representation of numbers in computer memory places limits on their size 32 bit integers, two's complement max We will design a BigInt class Process integers of any size For simplicity, nonnegative integers only Nyhoff, ADTs, Data Structures and Problem Solving with C++, Second Edition, © 2005 Pearson Education, Inc. All rights reserved

29 BigInt Design First step : select a storage structure
We choose a linked list Each node sores a block of up to 3 consecutive digits Doubly linked list for traversing in both directions Nyhoff, ADTs, Data Structures and Problem Solving with C++, Second Edition, © 2005 Pearson Education, Inc. All rights reserved

30 BigInt Design Input in blocks of 3 integers, separated by spaces
As each new block entered, node added at end Output is traversal, left to right Nyhoff, ADTs, Data Structures and Problem Solving with C++, Second Edition, © 2005 Pearson Education, Inc. All rights reserved

31 BigInt Design Addition adds the groupings right to left
Keeping track of carry digits Nyhoff, ADTs, Data Structures and Problem Solving with C++, Second Edition, © 2005 Pearson Education, Inc. All rights reserved

32 BigInt Implementation
Standard list type provides all the tools we need Note class declaration, Fig. 11.3A View class definition, Fig. 11.3B Driver program to demonstrate use of the class, Fig 11.4 Nyhoff, ADTs, Data Structures and Problem Solving with C++, Second Edition, © 2005 Pearson Education, Inc. All rights reserved

33 Multiply-Ordered Lists
Ordered linked list Nodes arranged so data items are in ascending/descending order Straightforward when based on one data field However, sometimes necessary to maintain links with a different ordering Possible solution Separate ordered linked lists – but wastes space Nyhoff, ADTs, Data Structures and Problem Solving with C++, Second Edition, © 2005 Pearson Education, Inc. All rights reserved

34 Multiply-Ordered Lists
Better approach Single list Multiple links Nyhoff, ADTs, Data Structures and Problem Solving with C++, Second Edition, © 2005 Pearson Education, Inc. All rights reserved

35 Sparse Matrices Usual storage is 2D array or 2D vector
If only a few nonzero entries Can waste space Stored more efficiently with linked structure Similar to sparse polynomials Each row is a linked list Store only nonzero entries for the row Nyhoff, ADTs, Data Structures and Problem Solving with C++, Second Edition, © 2005 Pearson Education, Inc. All rights reserved

36 Sparse Matrices For we represent with A =
Nyhoff, ADTs, Data Structures and Problem Solving with C++, Second Edition, © 2005 Pearson Education, Inc. All rights reserved

37 Sparse Matrices This still may waste space Alternative implementation
Consider if many rows were all zeros Alternative implementation Single linked list Each node has row, column, entry, link Resulting list Nyhoff, ADTs, Data Structures and Problem Solving with C++, Second Edition, © 2005 Pearson Education, Inc. All rights reserved

38 Sparse Matrices However … this loses direct access to rows
Could replace array of pointers with Linked list of row head nodes Each contains pointer to non empty row list Nyhoff, ADTs, Data Structures and Problem Solving with C++, Second Edition, © 2005 Pearson Education, Inc. All rights reserved

39 Sparse Matrices If columnwise processing is desired
Use orthogonal list Each node stores row, column, value, pointer to row successor, pointer to column successor Nyhoff, ADTs, Data Structures and Problem Solving with C++, Second Edition, © 2005 Pearson Education, Inc. All rights reserved

40 Sparse Matrices Note the resulting representation of the matrix A =
Nyhoff, ADTs, Data Structures and Problem Solving with C++, Second Edition, © 2005 Pearson Education, Inc. All rights reserved

41 This is an example of a generalized list
Generalized Lists Examples so far have had atomic elements The nodes are not themselves lists Consider a linked list of strings The strings themselves can be linked lists of characters This is an example of a generalized list Nyhoff, ADTs, Data Structures and Problem Solving with C++, Second Edition, © 2005 Pearson Education, Inc. All rights reserved

42 Generalized Lists Commonly represented as linked lists where
Nodes have a tag field along with data and link Tag used to indicate whether data field holds Atom Pointer to a list Nyhoff, ADTs, Data Structures and Problem Solving with C++, Second Edition, © 2005 Pearson Education, Inc. All rights reserved

43 Generalized Lists Lists can be shared
To represent (2, (4,6), (4,6)) For polynomials in two variables P(x,y) = 3 + 7x + 14y2 + 25y7 – 7x2y7 + 18x6y7 Nyhoff, ADTs, Data Structures and Problem Solving with C++, Second Edition, © 2005 Pearson Education, Inc. All rights reserved


Download ppt "More Linking Up with Linked Lists"

Similar presentations


Ads by Google