Top Banner
C++ Programming: From Problem Analysis to Program Design, Second Edition Chapter 17: Linked Lists
81

C++ Programming: From Problem Analysis to Program Design, Second Edition

Jan 03, 2016

Download

Documents

omar-frederick

0. C++ Programming: From Problem Analysis to Program Design, Second Edition. Chapter 17: Linked Lists. 0. Objectives. In this chapter you will: Learn about linked lists Become aware of the basic properties of linked lists Explore the insertion and deletion operations on linked lists - PowerPoint PPT Presentation
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: C++ Programming:  From Problem Analysis to Program Design,  Second Edition

C++ Programming: From Problem Analysisto Program Design, Second Edition

Chapter 17: Linked Lists

Page 2: C++ Programming:  From Problem Analysis to Program Design,  Second Edition

C++ Programming: From Problem Analysis to Program Design, Second Edition 2

Objectives

In this chapter you will:• Learn about linked lists• Become aware of the basic properties of

linked lists• Explore the insertion and deletion operations

on linked lists• Discover how to build and manipulate a linked

list• Learn how to construct a doubly linked list

Page 3: C++ Programming:  From Problem Analysis to Program Design,  Second Edition

C++ Programming: From Problem Analysis to Program Design, Second Edition 3

Introduction

• Data can be organized and processed sequentially using an array, called a sequential list

• Problems with an array

− Array size is fixed

− Unsorted array: searching for an item is slow

− Sorted array: insertion and deletion is slow

Page 4: C++ Programming:  From Problem Analysis to Program Design,  Second Edition

C++ Programming: From Problem Analysis to Program Design, Second Edition 4

Linked Lists

• Linked list: collection of components (nodes)• Every node (except last) has address of next

node• Every node has two components• Address of the first node of the list is stored in

a separate location, called head or first

Page 5: C++ Programming:  From Problem Analysis to Program Design,  Second Edition

C++ Programming: From Problem Analysis to Program Design, Second Edition 5

A Linked List

• a linked list is a list in which the order of the components is determined by an explicit link member

in each node

• the nodes are structs--each node contains a component member and also a link member that gives the location of the next node in the list

head ‘X’ ‘C’ ‘L’

Page 6: C++ Programming:  From Problem Analysis to Program Design,  Second Edition

C++ Programming: From Problem Analysis to Program Design, Second Edition 6

Dynamic Linked List

head “Ted” “Irv” “Lee”

• in a dynamic linked list, nodes are linked together by pointers, and an external pointer (or head pointer) points to the first node in the list

Page 7: C++ Programming:  From Problem Analysis to Program Design,  Second Edition

C++ Programming: From Problem Analysis to Program Design, Second Edition 7

Nodes can be located anywhere in memory• the link member holds the memory address of the next

node in the list

head 3000 “Ted” 5000 “Irv” 2000 “Lee” NULL

3000 5000 2000

Page 8: C++ Programming:  From Problem Analysis to Program Design,  Second Edition

C++ Programming: From Problem Analysis to Program Design, Second Edition 8

// Type DECLARATIONS

struct NodeType {char info;NodeType* link;

}

// Variable DECLARATIONS

NodeType* head;NodeType* ptr;

8

Declarations for a Dynamic Linked List

. info . link

‘A’ 6000

Page 9: C++ Programming:  From Problem Analysis to Program Design,  Second Edition

C++ Programming: From Problem Analysis to Program Design, Second Edition 99

Pointer Dereferencing and Member Selection

. info . link

‘A’ 6000 ptr

ptr

ptr

. info . link

‘A’ 6000

*ptr

ptr

. info . link

(*ptr).info

ptr->info

‘A’ 6000

Page 10: C++ Programming:  From Problem Analysis to Program Design,  Second Edition

C++ Programming: From Problem Analysis to Program Design, Second Edition 1010

ptr is a pointer to a node

. info . link

‘A’ 6000 ptr

ptr

Page 11: C++ Programming:  From Problem Analysis to Program Design,  Second Edition

C++ Programming: From Problem Analysis to Program Design, Second Edition 1111

*ptr is the entire node pointed to by ptr

ptr

. info . link

‘A’ 6000

*ptr

Page 12: C++ Programming:  From Problem Analysis to Program Design,  Second Edition

C++ Programming: From Problem Analysis to Program Design, Second Edition 1212

ptr->info is a node member

ptr

. info . link

ptr->info

(*ptr).info // equivalent

‘A’ 6000

Page 13: C++ Programming:  From Problem Analysis to Program Design,  Second Edition

C++ Programming: From Problem Analysis to Program Design, Second Edition 1313

ptr->link is a node member

ptr

. info . link

ptr->link

(*ptr).link // equivalent

‘A’ 6000

Page 14: C++ Programming:  From Problem Analysis to Program Design,  Second Edition

C++ Programming: From Problem Analysis to Program Design, Second Edition 14

Traversing a Dynamic Linked List

//PRE: head points to a dynamic linked list

ptr = head ;

while (ptr != NULL) {

cout << ptr->info ;

// Or, do something else with node *ptr

ptr = ptr->link ;

}

ptr

3000 “Ted” 5000 “Irv” 2000 “Lee” NULL

3000 5000 2000

head

Page 15: C++ Programming:  From Problem Analysis to Program Design,  Second Edition

C++ Programming: From Problem Analysis to Program Design, Second Edition 15

//PRE: head points to a dynamic linked list

ptr = head ;

while (ptr != NULL) {

cout << ptr->info ;

// Or, do something else with node *ptr

ptr = ptr->link ;

}

ptr 3000

3000 “Ted” 5000 “Irv” 2000 “Lee” NULL

3000 5000 2000

head

Traversing a Dynamic Linked List

Page 16: C++ Programming:  From Problem Analysis to Program Design,  Second Edition

C++ Programming: From Problem Analysis to Program Design, Second Edition 16

//PRE: head points to a dynamic linked list

ptr = head ;

while (ptr != NULL) {

cout << ptr->info ;

// Or, do something else with node *ptr

ptr = ptr->link ;

}

ptr 3000

3000 “Ted” 5000 “Irv” 2000 “Lee” NULL

3000 5000 2000

head

Traversing a Dynamic Linked List

Page 17: C++ Programming:  From Problem Analysis to Program Design,  Second Edition

C++ Programming: From Problem Analysis to Program Design, Second Edition 17

//PRE: head points to a dynamic linked list

ptr = head ;

while (ptr != NULL) {

cout << ptr->info ;

// Or, do something else with node *ptr

ptr = ptr->link ;

}

ptr 3000

3000 “Ted” 5000 “Irv” 2000 “Lee” NULL

3000 5000 2000

head

Traversing a Dynamic Linked List

Page 18: C++ Programming:  From Problem Analysis to Program Design,  Second Edition

C++ Programming: From Problem Analysis to Program Design, Second Edition 18

//PRE: head points to a dynamic linked list

ptr = head ;

while (ptr != NULL) {

cout << ptr->info ;

// Or, do something else with node *ptr

ptr = ptr->link ;

}

ptr 5000

3000 “Ted” 5000 “Irv” 2000 “Lee” NULL

3000 5000 2000

head

Traversing a Dynamic Linked List

Page 19: C++ Programming:  From Problem Analysis to Program Design,  Second Edition

C++ Programming: From Problem Analysis to Program Design, Second Edition 19

//PRE: head points to a dynamic linked list

ptr = head ;

while (ptr != NULL) {

cout << ptr->info ;

// Or, do something else with node *ptr

ptr = ptr->link ;

}

ptr 5000

3000 “Ted” 5000 “Irv” 2000 “Lee” NULL

3000 5000 2000

head

Traversing a Dynamic Linked List

Page 20: C++ Programming:  From Problem Analysis to Program Design,  Second Edition

C++ Programming: From Problem Analysis to Program Design, Second Edition 20

//PRE: head points to a dynamic linked list

ptr = head ;

while (ptr != NULL) {

cout << ptr->info ;

// Or, do something else with node *ptr

ptr = ptr->link ;

}

ptr 5000

3000 “Ted” 5000 “Irv” 2000 “Lee” NULL

3000 5000 2000

head

Traversing a Dynamic Linked List

Page 21: C++ Programming:  From Problem Analysis to Program Design,  Second Edition

C++ Programming: From Problem Analysis to Program Design, Second Edition 21

//PRE: head points to a dynamic linked list

ptr = head ;

while (ptr != NULL) {

cout << ptr->info ;

// Or, do something else with node *ptr

ptr = ptr->link ;

}

ptr 2000

3000 “Ted” 5000 “Irv” 2000 “Lee” NULL

3000 5000 2000

head

Traversing a Dynamic Linked List

Page 22: C++ Programming:  From Problem Analysis to Program Design,  Second Edition

C++ Programming: From Problem Analysis to Program Design, Second Edition 22

//PRE: head points to a dynamic linked list

ptr = head ;

while (ptr != NULL) {

cout << ptr->info ;

// Or, do something else with node *ptr

ptr = ptr->link ;

}

ptr 2000

3000 “Ted” 5000 “Irv” 2000 “Lee” NULL

3000 5000 2000

head

Traversing a Dynamic Linked List

Page 23: C++ Programming:  From Problem Analysis to Program Design,  Second Edition

C++ Programming: From Problem Analysis to Program Design, Second Edition 23

//PRE: head points to a dynamic linked list

ptr = head ;

while (ptr != NULL) {

cout << ptr->info ;

// Or, do something else with node *ptr

ptr = ptr->link ;

}

ptr 2000

3000 “Ted” 5000 “Irv” 2000 “Lee” NULL

3000 5000 2000

head

Traversing a Dynamic Linked List

Page 24: C++ Programming:  From Problem Analysis to Program Design,  Second Edition

C++ Programming: From Problem Analysis to Program Design, Second Edition 24

//PRE: head points to a dynamic linked list

ptr = head ;

while (ptr != NULL) {

cout << ptr->info ;

// Or, do something else with node *ptr

ptr = ptr->link ;

}

ptr NULL

3000 “Ted” 5000 “Irv” 2000 “Lee” NULL

3000 5000 2000

head

Traversing a Dynamic Linked List

Page 25: C++ Programming:  From Problem Analysis to Program Design,  Second Edition

C++ Programming: From Problem Analysis to Program Design, Second Edition 25

//PRE: head points to a dynamic linked list

ptr = head ;

while (ptr != NULL) {

cout << ptr->info ;

// Or, do something else with node *ptr

ptr = ptr->link ;

}

ptr NULL

3000 “Ted” 5000 “Irv” 2000 “Lee” NULL

3000 5000 2000

head

Traversing a Dynamic Linked List

Page 26: C++ Programming:  From Problem Analysis to Program Design,  Second Edition

C++ Programming: From Problem Analysis to Program Design, Second Edition

Using Operator new

If memory is available in an area called the free store (or heap), operator new allocates the requested object, and returns a pointer to the memory allocated.

The dynamically allocated object exists until the delete operator destroys it.

26

Page 27: C++ Programming:  From Problem Analysis to Program Design,  Second Edition

C++ Programming: From Problem Analysis to Program Design, Second Edition 27

Inserting a Node at the Front of a List

char item = ‘B’;

NodeType* location;

location = new NodeType;

location->info = item;

location->link = head;

head = location;

head ‘X’ ‘C’ ‘L’

‘B’item

Page 28: C++ Programming:  From Problem Analysis to Program Design,  Second Edition

C++ Programming: From Problem Analysis to Program Design, Second Edition 28

Inserting a Node at the Front of a List

char item = ‘B’;

NodeType* location;

location = new NodeType;

location->info = item;

location->link = head;

head = location;

head ‘X’ ‘C’ ‘L’

‘B’item

location

Page 29: C++ Programming:  From Problem Analysis to Program Design,  Second Edition

C++ Programming: From Problem Analysis to Program Design, Second Edition 29

Inserting a Node at the Front of a List

char item = ‘B’;

NodeType* location;

location = new NodeType;

location->info = item;

location->link = head;

head = location;

head ‘X’ ‘C’ ‘L’

‘B’item

location

Page 30: C++ Programming:  From Problem Analysis to Program Design,  Second Edition

C++ Programming: From Problem Analysis to Program Design, Second Edition 30

Inserting a Node at the Front of a List

char item = ‘B’;

NodeType* location;

location = new NodeType;

location->info = item;

location->link = head;

head = location;

head ‘X’ ‘C’ ‘L’

‘B’item

location ‘B’

Page 31: C++ Programming:  From Problem Analysis to Program Design,  Second Edition

C++ Programming: From Problem Analysis to Program Design, Second Edition 31

Inserting a Node at the Front of a List

char item = ‘B’;

NodeType* location;

location = new NodeType;

location->info = item;

location->link = head;

head = location;

head ‘X’ ‘C’ ‘L’

‘B’item

location ‘B’

Page 32: C++ Programming:  From Problem Analysis to Program Design,  Second Edition

C++ Programming: From Problem Analysis to Program Design, Second Edition 32

Inserting a Node at the Front of a List

char item = ‘B’;

NodeType* location;

location = new NodeType;

location->info = item;

location->link = head;

head = location;

head ‘X’ ‘C’ ‘L’

‘B’item

location ‘B’

Page 33: C++ Programming:  From Problem Analysis to Program Design,  Second Edition

C++ Programming: From Problem Analysis to Program Design, Second Edition

The object currently pointed to by the pointer is deallocated, and the pointer is considered undefined. The object’s memory is returned to the free store.

Using Operator delete

33

Page 34: C++ Programming:  From Problem Analysis to Program Design,  Second Edition

C++ Programming: From Problem Analysis to Program Design, Second Edition 34

Deleting the First Node from the List

NodeType* tempPtr;

item = head->info;

tempPtr = head;

head = head->link;

delete tempPtr;

head

item

‘B’ ‘X’ ‘C’ ‘L’

tempPtr

Page 35: C++ Programming:  From Problem Analysis to Program Design,  Second Edition

C++ Programming: From Problem Analysis to Program Design, Second Edition 35

Deleting the First Node from the List

NodeType * tempPtr;

item = head->info;

tempPtr = head;

head = head->link;

delete tempPtr;

head

item

‘B’ ‘X’ ‘C’ ‘L’

tempPtr

‘B’

Page 36: C++ Programming:  From Problem Analysis to Program Design,  Second Edition

C++ Programming: From Problem Analysis to Program Design, Second Edition 36

Deleting the First Node from the List

NodeType * tempPtr;

item = head->info;

tempPtr = head;

head = head->link;

delete tempPtr;

head

item

‘B’ ‘X’ ‘C’ ‘L’

tempPtr

‘B’

Page 37: C++ Programming:  From Problem Analysis to Program Design,  Second Edition

C++ Programming: From Problem Analysis to Program Design, Second Edition 37

Deleting the First Node from the List

NodeType * tempPtr;

item = head->info;

tempPtr = head;

head = head->link;

delete tempPtr;

head

item

‘B’ ‘X’ ‘C’ ‘L’

tempPtr

‘B’

Page 38: C++ Programming:  From Problem Analysis to Program Design,  Second Edition

C++ Programming: From Problem Analysis to Program Design, Second Edition 38

Deleting the First Node from the List

NodeType * tempPtr;

item = head->info;

tempPtr = head;

head = head->link;

delete tempPtr;

head

item

‘X’ ‘C’ ‘L’

tempPtr

‘B’

Page 39: C++ Programming:  From Problem Analysis to Program Design,  Second Edition

C++ Programming: From Problem Analysis to Program Design, Second Edition 39

What is a List?

• a list is a varying-length, linear collection of homogeneous elements

• linear means each list element (except the first) has a unique predecessor, and each element (except the last) has a unique successor

Page 40: C++ Programming:  From Problem Analysis to Program Design,  Second Edition

C++ Programming: From Problem Analysis to Program Design, Second Edition 40

// SPECIFICATION FILE DYNAMIC-LINKED SORTED LIST( slist2.h )

struct NodeType{

char item ; // Data (char to keep example simple)NodeType* link ; // link to next node in list

} ;

40

struct NodeType

Page 41: C++ Programming:  From Problem Analysis to Program Design,  Second Edition

C++ Programming: From Problem Analysis to Program Design, Second Edition 41

// SPECIFICATION FILE DYNAMIC-LINKED SORTED LIST( slist2.h )

class SortedList2{public :

bool IsEmpty ( ) const ;

void Print ( ) const ;

void InsertTop ( /* in */ char item ) ;

void Insert ( /* in */ char item ) ;

void DeleteTop ( /* out */ char& item ) ;

void Delete ( /* in */ char item );

SortedList2 ( ) ; // Constructor~SortedList2 ( ) ; // DestructorSortedList2 ( const SortedList2& otherList ) ; // Copy-constructor

private :

NodeType* head;} ;

41

Page 42: C++ Programming:  From Problem Analysis to Program Design,  Second Edition

C++ Programming: From Problem Analysis to Program Design, Second Edition 42

class SortedList2

Print

~SortedList2

Insert

InsertTop

SortedList2

IsEmpty

Delete

‘C’ ‘L’ ‘X’

Private data:

head

DeleteTop

Page 43: C++ Programming:  From Problem Analysis to Program Design,  Second Edition

C++ Programming: From Problem Analysis to Program Design, Second Edition 43

Insert Algorithm

• what will be the algorithm to Insert an item into its proper place in a sorted linked list?

• that is, for a linked list whose elements are maintained in ascending order?

Page 44: C++ Programming:  From Problem Analysis to Program Design,  Second Edition

C++ Programming: From Problem Analysis to Program Design, Second Edition 44

Insert algorithm for SortedList2

• find proper position for the new element in the sorted list using two pointers prevPtr and currPtr, where prevPtr trails behind currPtr

• obtain a node for insertion and place item in it

• insert the node by adjusting pointers

Page 45: C++ Programming:  From Problem Analysis to Program Design,  Second Edition

C++ Programming: From Problem Analysis to Program Design, Second Edition 45

Implementing SortedList2Member Function Insert

// DYNAMIC LINKED LIST IMPLEMENTATION (slist2.cpp)

void SortedList2 :: Insert ( /* in */ char item )

// PRE: item is assigned && List components in ascending order

// POST: item is in List && List components in ascending order{

.

.

.

}

Page 46: C++ Programming:  From Problem Analysis to Program Design,  Second Edition

C++ Programming: From Problem Analysis to Program Design, Second Edition 46

Inserting ‘S’ into a Sorted List

‘C’ ‘L’ ‘X’

Private data:

head

prevPtr currPtr

Page 47: C++ Programming:  From Problem Analysis to Program Design,  Second Edition

C++ Programming: From Problem Analysis to Program Design, Second Edition 47

Finding Proper Position for ‘S’

‘C’ ‘L’ ‘X’

Private data:

head

prevPtr currPtr

NULL

Page 48: C++ Programming:  From Problem Analysis to Program Design,  Second Edition

C++ Programming: From Problem Analysis to Program Design, Second Edition 48

‘C’ ‘L’ ‘X’

Private data:

head

prevPtr currPtr

Finding Proper Position for ‘S’

Page 49: C++ Programming:  From Problem Analysis to Program Design,  Second Edition

C++ Programming: From Problem Analysis to Program Design, Second Edition 49

‘C’ ‘L’ ‘X’

Private data:

head

prevPtr currPtr

Finding Proper Position for ‘S’

Page 50: C++ Programming:  From Problem Analysis to Program Design,  Second Edition

C++ Programming: From Problem Analysis to Program Design, Second Edition 50

‘C’ ‘L’ ‘X’

Private data:

head

prevPtr currPtr

Inserting ‘S’ into Proper Position

‘S’

Page 51: C++ Programming:  From Problem Analysis to Program Design,  Second Edition

C++ Programming: From Problem Analysis to Program Design, Second Edition 51

// IMPLEMENTATION DYNAMIC-LINKED SORTED LIST (slist2.cpp)

SortedList2 ::SortedList2 ( ) // Constructor

// Post: head == NULL

{

head = NULL ;

}

SortedList2 :: ~SortedList2 ( ) // Destructor

// Post: All linked nodes deallocated

{

char temp ;

// keep deleting top node

while ( !IsEmpty )

DeleteTop ( temp );

}

51

Page 52: C++ Programming:  From Problem Analysis to Program Design,  Second Edition

C++ Programming: From Problem Analysis to Program Design, Second Edition 52

void SortedList2 :: Insert( /* in */ char item ) // Pre: item is assigned && list components in ascending order// Post: new node containing item is in its proper place // && list components in ascending order{ NodeType* currPtr ;

NodeType* prevPtr ;NodeType* location ;

location = new NodeType ; location->info = item;prevPtr = NULL ;currPtr = head ;while ( currPtr != NULL && item > currPtr->info ) { prevPtr = currPtr ; // advance both pointers

currPtr = currPtr->link ;}

location->link = currPtr ; // insert new node hereif ( prevPtr == NULL )

head = location ;else

prevPtr->link = location ;}

52

Page 53: C++ Programming:  From Problem Analysis to Program Design,  Second Edition

C++ Programming: From Problem Analysis to Program Design, Second Edition 53

void SortedList2 :: DeleteTop ( /* out */ char& item )

// Pre: list is not empty && list elements in ascending order

// Post: item == element of first list node @ entry

// && node containing item is no longer in linked list

// && list elements in ascending order

{

NodeType* tempPtr = head ;

// obtain item and advance head

item = head->info ;

head = head->link ;

delete tempPtr ;

}

53

Page 54: C++ Programming:  From Problem Analysis to Program Design,  Second Edition

C++ Programming: From Problem Analysis to Program Design, Second Edition 54

void SortedList2 :: Delete ( /* in */ char item ) // Pre: list is not empty && list elements in ascending order

// && item == component member of some list node

// Post: item == element of first list node @ entry

// && node containing first occurrence of item is no longer

// in linked list && list elements in ascending order

{ NodeType* delPtr ;

NodeType* currPtr ; // Is item in first node?

if ( item == head->info )

{ delPtr = head ; // If so, delete first node

head = head->link ;}

else { // search for item in rest of list

currPtr = head ;

while ( currPtr->link->info != item )

currPtr = currPtr->link ;

delPtr = currPtr->link ;

currPtr->link = currPtr->link->link ;}

delete delPtr ;

}54

Page 55: C++ Programming:  From Problem Analysis to Program Design,  Second Edition

C++ Programming: From Problem Analysis to Program Design, Second Edition 55

class SortedList2

Print

~SortedList2

Insert

InsertTop

SortedList2

IsEmpty

Delete

‘C’ ‘L’ ‘X’

Private data:

head

DeleteTop

Page 56: C++ Programming:  From Problem Analysis to Program Design,  Second Edition

C++ Programming: From Problem Analysis to Program Design, Second Edition 56

Another Linked List

• Linked list above has four nodes• Address of first node is stored in head• Each node has two components:

− Info: stores the info− Link: stores address of the next node

Page 57: C++ Programming:  From Problem Analysis to Program Design,  Second Edition
Page 58: C++ Programming:  From Problem Analysis to Program Design,  Second Edition

C++ Programming: From Problem Analysis to Program Design, Second Edition 58

Doubly Linked Lists

• Doubly linked list: every node has next and back pointers

• Can be traversed in either direction

Page 59: C++ Programming:  From Problem Analysis to Program Design,  Second Edition

C++ Programming: From Problem Analysis to Program Design, Second Edition 59

Struct for Doubly Linked List

struct NodeType{

int item ; // Data NodeType* next; // link to next node in list

NodeType* back; // link to previous node in list} ;

Page 60: C++ Programming:  From Problem Analysis to Program Design,  Second Edition

C++ Programming: From Problem Analysis to Program Design, Second Edition 60

Delete a Node

• Consider the list shown in the figure below

Page 61: C++ Programming:  From Problem Analysis to Program Design,  Second Edition
Page 62: C++ Programming:  From Problem Analysis to Program Design,  Second Edition

C++ Programming: From Problem Analysis to Program Design, Second Edition 62

Programming Example

• A new video store in your neighborhood is about to open

• However, it does not have a program to keep track of its videos and customers

• The store managers want someone to write a program for their system so that the video store can operate

Page 63: C++ Programming:  From Problem Analysis to Program Design,  Second Edition

C++ Programming: From Problem Analysis to Program Design, Second Edition 63

Programming Example (continued)

• The program should be able to perform the following operations:− Rent a video; that is, check out a video− Return, or check in, a video− Create a list of videos owned by the store− Show the details of a particular video− Print a list of all videos in the store− Check whether a particular video is in the store− Maintain a customer database− Print list of all videos rented by each customer

Page 64: C++ Programming:  From Problem Analysis to Program Design,  Second Edition

C++ Programming: From Problem Analysis to Program Design, Second Edition 64

Programming Example (continued)

• There are two major components of the video store:

− A video

− A customer

• You need to maintain two lists:

1. A list of all videos in the store

2. A list of all customers of the store

Page 65: C++ Programming:  From Problem Analysis to Program Design,  Second Edition

C++ Programming: From Problem Analysis to Program Design, Second Edition 65

Part 1: Video Component (continued)

• The common things associated with a video are:

− Name of the movie

− Names of the stars

− Name of the producer

− Name of the director

− Name of the production company

− Number of copies in store

Page 66: C++ Programming:  From Problem Analysis to Program Design,  Second Edition
Page 67: C++ Programming:  From Problem Analysis to Program Design,  Second Edition
Page 68: C++ Programming:  From Problem Analysis to Program Design,  Second Edition

C++ Programming: From Problem Analysis to Program Design, Second Edition 68

Video List

• This program requires us to − Maintain a list of all videos in the store

− Add a new video to our list

• Use a linked list to create a list of videos

Page 69: C++ Programming:  From Problem Analysis to Program Design,  Second Edition
Page 70: C++ Programming:  From Problem Analysis to Program Design,  Second Edition
Page 71: C++ Programming:  From Problem Analysis to Program Design,  Second Edition

C++ Programming: From Problem Analysis to Program Design, Second Edition 71

Part 2: Customer Component

• Primary characteristics of a customer:

− First name

− Last name

− Account number

− List of rented videos

Page 72: C++ Programming:  From Problem Analysis to Program Design,  Second Edition
Page 73: C++ Programming:  From Problem Analysis to Program Design,  Second Edition

C++ Programming: From Problem Analysis to Program Design, Second Edition 73

Basic Operations

• Basic operations on personType:

− Print the name

− Set the name

− Show the first name

− Show the last name

Page 74: C++ Programming:  From Problem Analysis to Program Design,  Second Edition

C++ Programming: From Problem Analysis to Program Design, Second Edition 74

Basic Operations (continued)

• Basic operations on an object of the type customerType are:

− Print name, account #, and number of rentals

− Set name, account #, and number of rentals

− Rent a video, add video to the list

− Return a video, delete video from the list

− Show account #

Page 75: C++ Programming:  From Problem Analysis to Program Design,  Second Edition

C++ Programming: From Problem Analysis to Program Design, Second Edition 75

Main Program

• The data in the input file is in the form:video titlemovie star1movie star2movie producermovie directormovie production co.number of copies...

Page 76: C++ Programming:  From Problem Analysis to Program Design,  Second Edition

C++ Programming: From Problem Analysis to Program Design, Second Edition 76

Algorithm of the Main Function

• Open the input file, exit if not found

• createVideoList: create the list of videos

• displayMenu: show the menu

• While not done, perform various tasks

Page 77: C++ Programming:  From Problem Analysis to Program Design,  Second Edition

C++ Programming: From Problem Analysis to Program Design, Second Edition 77

CreateVideoList

1. Read data and store in a video object

2. Insert video in list

3. Repeat steps 1 and 2 for each video in file

Page 78: C++ Programming:  From Problem Analysis to Program Design,  Second Edition

C++ Programming: From Problem Analysis to Program Design, Second Edition 78

displayMenu

Select one of the following

1. Check whether a particular video is in the store

2. Check out a video

3. Check in a video

4. Check whether a particular video is in the store

5. Print the titles of all videos

6. Print a list of all videos

9. Exit

Page 79: C++ Programming:  From Problem Analysis to Program Design,  Second Edition

C++ Programming: From Problem Analysis to Program Design, Second Edition 79

Summary

• A linked list is a list of items (nodes)

• Order of the nodes is determined by the address, called a link, stored in each node

• The pointer to a linked list is called head or first

• A linked list is a dynamic data structure

• The list length is the number of nodes

Page 80: C++ Programming:  From Problem Analysis to Program Design,  Second Edition

C++ Programming: From Problem Analysis to Program Design, Second Edition 80

Summary

• Insertion and deletion does not require data movement; only the pointers are adjusted

• A (single) linked list is traversed in only one direction

• Search of a linked list is sequential

• The head pointer is fixed on first node

• Traverse: use a pointer other than head

Page 81: C++ Programming:  From Problem Analysis to Program Design,  Second Edition

C++ Programming: From Problem Analysis to Program Design, Second Edition 81

Summary

• Doubly linked list− Every node has two links: next and previous

− Can be traversed in either direction

− Item insertion and deletion require the adjustment of two pointers in a node