3 adt unsorted list. list definitions linear relationship each element except the first has a unique...

65
3 ADT Unsorted List

Upload: dinah-lyons

Post on 04-Jan-2016

230 views

Category:

Documents


1 download

TRANSCRIPT

Page 1: 3 ADT Unsorted List. List Definitions Linear relationship Each element except the first has a unique predecessor, and each element except the last has

3ADT Unsorted List

Page 2: 3 ADT Unsorted List. List Definitions Linear relationship Each element except the first has a unique predecessor, and each element except the last has

List Definitions

Linear relationship Each element except the first has a unique predecessor, and each element except the last has a unique successor.

Length The number of items in a list; the length can vary over time.

Page 3: 3 ADT Unsorted List. List Definitions Linear relationship Each element except the first has a unique predecessor, and each element except the last has

List Definitions

Unsorted list A list in which data items are placed in no particular order; the only relationship between data elements is the list predecessor and successor relationships.

Sorted list A list that is sorted by the value in the key; there is a semantic relationship among the keys of the items in the list.

Key The attributes that are used to determine the logical order of the list.

Page 4: 3 ADT Unsorted List. List Definitions Linear relationship Each element except the first has a unique predecessor, and each element except the last has

Abstract Data Type (ADT)

• A data type whose properties (domain and operations) are specified independently of any particular implementation.

Page 5: 3 ADT Unsorted List. List Definitions Linear relationship Each element except the first has a unique predecessor, and each element except the last has

What

How

• Application (or user) level: modeling real-life data in a specific context.

• Logical (or ADT) level: abstract view of the domain and operations.

• Implementation level: specific representation of the structure to hold the data items, and the coding for operations.

Data from 3 different levels

Page 6: 3 ADT Unsorted List. List Definitions Linear relationship Each element except the first has a unique predecessor, and each element except the last has

Sorted and Unsorted Lists

UNSORTED LIST

Elements are placed into the list in no particular order.

SORTED LIST

List elements are in an order that is sorted in some way -- either numerically or alphabetically by the elements themselves, or by a component of the element (called a KEY member) .

Page 7: 3 ADT Unsorted List. List Definitions Linear relationship Each element except the first has a unique predecessor, and each element except the last has

Unsorted List ADT Operations

• Constructor: Called when an instance of this data type is created.

• Transformers: MakeEmpty, PutItem, and DeleteItem

• Observer: IsFull, GetLength, GetItem• Iterator: ResetList, GetNextItem

Page 8: 3 ADT Unsorted List. List Definitions Linear relationship Each element except the first has a unique predecessor, and each element except the last has

ADT Unsorted List Operations

Transformers • MakeEmpty • PutItem • DeleteItem

Observers • IsFull• GetLength

• GetItem

Iterators • ResetList • GetNextItem

change state

observe state

process all

Page 9: 3 ADT Unsorted List. List Definitions Linear relationship Each element except the first has a unique predecessor, and each element except the last has

What is a Generic Data Type?

A generic data type is a type for which the operations are defined but the types of the items being manipulated are not defined.

One way to simulate such a type for our UnsortedList ADT is via a user-defined class ItemType with member function ComparedTo returning an enumerated type value LESS, GREATER, or EQUAL.

Page 10: 3 ADT Unsorted List. List Definitions Linear relationship Each element except the first has a unique predecessor, and each element except the last has

// SPECIFICATION FILE ( unsorted.h )#include “ItemType.h”

class UnsortedType // declares a class data type{public : // 8 public member functions void UnsortedType ( ); bool IsFull ( ) const; int GetLength ( ) const ; // returns length of list ItemType GetItem ( ItemType item, bool& found); void PutItem ( ItemType item ); void DeleteItem ( ItemType item ); void ResetList ( ); ItemType GetNextItem ();

private : // 3 private data members int length; ItemType info[MAX_ITEMS]; int currentPos;};

Page 11: 3 ADT Unsorted List. List Definitions Linear relationship Each element except the first has a unique predecessor, and each element except the last has

Class Constructor

A special member function of a class

that is implicitly invoked when a class

object is defined.

Page 12: 3 ADT Unsorted List. List Definitions Linear relationship Each element except the first has a unique predecessor, and each element except the last has

Class Constructor Rules

1 A constructor cannot return a function value, and has no return value type.

2 A class may have several constructors. The compiler chooses the appropriate constructor by the number and types of parameters used.

3 Constructor parameters are placed in a parameter list in the declaration of the class object.

4 The parameterless constructor is the default constructor.

5 If a class has at least one constructor, and an array of class objects is declared, then one of the constructors must be the default constructor, which is invoked for each element in the array.

Page 13: 3 ADT Unsorted List. List Definitions Linear relationship Each element except the first has a unique predecessor, and each element except the last has

Class Interface Diagram

UnsortedType class

IsFull

GetLength

ResetList

DeleteItem

PutItem

UnsortedType

GetItem

GetNextItem

Private data:

length

info [ 0 ] [ 1 ] [ 2 ]

[MAX_ITEMS-1]

currentPos

Page 14: 3 ADT Unsorted List. List Definitions Linear relationship Each element except the first has a unique predecessor, and each element except the last has

14

// IMPLEMENTATION FILE ARRAY-BASED LIST ( unsorted.cpp )#include “itemtype.h”

void UnsortedType::UnsortedType ( ) // Pre: None.// Post: List is empty.{

length = 0;}

void UnsortedType::InsertItem ( ItemType item )// Pre: List has been initialized. List is not full. // item is not in list.// Post: item is in the list.{

info[length] = item;length++;

}

Page 15: 3 ADT Unsorted List. List Definitions Linear relationship Each element except the first has a unique predecessor, and each element except the last has

Before Inserting Hsing into anUnsorted List

length 3

info [ 0 ] Maxwell

[ 1 ] Bradley

[ 2 ] Asad

[ 3 ] .

. .

[MAX_ITEMS-1]

The item willbe placed intothe length location,and length will beincremented.

Page 16: 3 ADT Unsorted List. List Definitions Linear relationship Each element except the first has a unique predecessor, and each element except the last has

After Inserting Hsing into anUnsorted List

length 4

info [ 0 ] Maxwell

[ 1 ] Bradley

[ 2 ] Asad

[ 3 ] Hsing .

. . [MAX_ITEMS-1]

Page 17: 3 ADT Unsorted List. List Definitions Linear relationship Each element except the first has a unique predecessor, and each element except the last has

17

int UnsortedType::GetLength( ) const// Pre: List has been inititalized.// Post: Function value == ( number of elements in// list ).{

return length; }

bool UnsortedType::IsFull ( ) const// Pre: List has been initialized.// Post: Function value == ( list is full ).{

return ( length == MAX_ITEMS );}

Page 18: 3 ADT Unsorted List. List Definitions Linear relationship Each element except the first has a unique predecessor, and each element except the last has

18

ItemType UnsortedType::GetItem ( ItemType item, bool& found ) // Pre: Key member of item is initialized.// Post: If found, item’s key matches an element’s key in the list// and a copy of that element is returned; // otherwise, input item is returned.{ bool moreToSearch; int location = 0;

found = false;moreToSearch = ( location < length );while ( moreToSearch && !found ){ switch ( item.ComparedTo( info[location] ) )

{ case LESS : case GREATER : location++;

moreToSearch = ( location < length ); break;

case EQUAL : found = true; item = info[ location ];

break; } } return item}

Page 19: 3 ADT Unsorted List. List Definitions Linear relationship Each element except the first has a unique predecessor, and each element except the last has

Getting Ivan from an Unsorted List

moreToSearch: true

found: false

location: 0

length 4

info [ 0 ] Maxwell

[ 1 ] Bradley

[ 2 ] Asad

[ 3 ] Hsing .

.

[MAX_ITEMS-1]

Page 20: 3 ADT Unsorted List. List Definitions Linear relationship Each element except the first has a unique predecessor, and each element except the last has

Getting Ivan from an Unsorted List

length 4

info [ 0 ] Maxwell

[ 1 ] Bradley

[ 2 ] Asad

[ 3 ] Hsing .

.

[MAX_ITEMS-1]

moreToSearch: true

found: false

location: 1

Page 21: 3 ADT Unsorted List. List Definitions Linear relationship Each element except the first has a unique predecessor, and each element except the last has

Getting Ivan from an Unsorted List

length 4

info [ 0 ] Maxwell

[ 1 ] Bradley

[ 2 ] Asad

[ 3 ] Hsing .

. .

[MAX_ITEMS-1]

moreToSearch: true

found: false

location: 2

Page 22: 3 ADT Unsorted List. List Definitions Linear relationship Each element except the first has a unique predecessor, and each element except the last has

Getting Ivan from an Unsorted List

length 4

info [ 0 ] Maxwell

[ 1 ] Bradley

[ 2 ] Asad

[ 3 ] Hsing .

. .

[MAX_ITEMS-1]

moreToSearch: true

found: false

location: 3

Page 23: 3 ADT Unsorted List. List Definitions Linear relationship Each element except the first has a unique predecessor, and each element except the last has

Getting Ivan from an Unsorted List

length 4

info [ 0 ] Maxwell

[ 1 ] Bradley

[ 2 ] Asad

[ 3 ] Hsing .

. .

[MAX_ITEMS-1]

moreToSearch: false

found: false

location: 4

Page 24: 3 ADT Unsorted List. List Definitions Linear relationship Each element except the first has a unique predecessor, and each element except the last has

void UnsortedType::DeleteItem ( ItemType item ) // Pre: item’s key has been inititalized.// An element in the list has a key that matches item’s.// Post: No element in the list has a key that matches item’s.{

int location = 0 ; while (item.ComparedTo (info [location] ) != EQUAL )

location++;

// move last element into position where item was located

info [location] = info [length - 1 ] ;length-- ;

}

Page 25: 3 ADT Unsorted List. List Definitions Linear relationship Each element except the first has a unique predecessor, and each element except the last has

Deleting Bradley from an Unsorted List

location: 0 length 4

info [ 0 ] Maxwell

[ 1 ] Bradley

[ 2 ] Asad

[ 3 ] Hsing .

. .

[MAX_ITEMS-1]

Key Bradley hasnot been matched.

Page 26: 3 ADT Unsorted List. List Definitions Linear relationship Each element except the first has a unique predecessor, and each element except the last has

Deleting Bradley from an Unsorted List

location: 1

Key Bradley hasbeen matched.

length 4

info [ 0 ] Maxwell

[ 1 ] Bradley

[ 2 ] Asad

[ 3 ] Hsing .

. .

[MAX_ITEMS-1]

Page 27: 3 ADT Unsorted List. List Definitions Linear relationship Each element except the first has a unique predecessor, and each element except the last has

Deleting Bradley from an Unsorted List

location: 1

length 4

info [ 0 ] Maxwell

[ 1 ] Hsing

[ 2 ] Asad

[ 3 ] Hsing .

. .

[MAX_ITEMS-1]

Placed copy oflast list elementinto the position where the key Bradley was before.

Page 28: 3 ADT Unsorted List. List Definitions Linear relationship Each element except the first has a unique predecessor, and each element except the last has

Deleting Bradley from anUnsorted List

location: 1

length 3

info [ 0 ] Maxwell

[ 1 ] Hsing

[ 2 ] Asad

[ 3 ] Hsing .

. .

[MAX_ITEMS-1]

Decremented length.

Page 29: 3 ADT Unsorted List. List Definitions Linear relationship Each element except the first has a unique predecessor, and each element except the last has

void UnsortedType::ResetList ( )

// Pre: List has been inititalized.

// Post: Current position is prior to first element in list.

{

currentPos = -1;

}

ItemType UnsortedType::GetNextItem ()

// Pre: List has been initialized. Current position is defined.

// Element at current position is not last in list.

// Post: Current position is updated to next position.

// item is a copy of element at current position.

{

currentPos++;

item = info [currentPos];

}

Page 30: 3 ADT Unsorted List. List Definitions Linear relationship Each element except the first has a unique predecessor, and each element except the last has

// SPECIFICATION FILE ( itemtype.h )

const int MAX_ITEM = 5 ;enum RelationType { LESS, EQUAL, GREATER };

class ItemType // declares class data type{public : // 3 public member functions

RelationType ComparedTo ( ItemType ) const; void Print ( ) const;

void Initialize ( int number ) ;

private : // 1 private data memberint value ; // could be any different

// type, including a class} ;

Specifying class ItemType

Page 31: 3 ADT Unsorted List. List Definitions Linear relationship Each element except the first has a unique predecessor, and each element except the last has

// IMPLEMENTATION FILE ( itemtype.cpp )// Implementation depends on the data type of value.

#include “itemtype.h”#include <iostream>

RelationType Itemtype::ComparedTo(ItemType otherItem) const

{if ( value < otherItem.value )

return LESS;else if ( value > otherItem.value )

return GREATER;else return EQUAL;

} void ItemType::Print ( ) const {

using namespace std;cout << value << endl;

}void ItemType::Initialize ( int number ){

value = number; }

Page 32: 3 ADT Unsorted List. List Definitions Linear relationship Each element except the first has a unique predecessor, and each element except the last has

Private data

value

ComparedTo

Print

Initialize

class ItemType

ItemType Class Interface Diagram

Page 33: 3 ADT Unsorted List. List Definitions Linear relationship Each element except the first has a unique predecessor, and each element except the last has

What is a pointer variable?• A pointer variable is a variable whose value is the address of a

location in memory.

• To declare a pointer variable, you must specify the type of value that the pointer will point to. For example,

int* ptr; // ptr will hold the address of an int

char* q; // q will hold the address of a char

Page 34: 3 ADT Unsorted List. List Definitions Linear relationship Each element except the first has a unique predecessor, and each element except the last has

Using a pointer variable

int x; x = 12;

int* ptr; ptr = &x;

NOTE: Because ptr holds the address of x, we say that ptr “points to” x

2000

12

x

3000

2000

ptr

Page 35: 3 ADT Unsorted List. List Definitions Linear relationship Each element except the first has a unique predecessor, and each element except the last has

2000

12

x

3000

2000

ptr

int x; x = 12;

int* ptr; ptr = &x;

std::cout << *ptr;

NOTE: The value pointed to by ptr is denoted by *ptr

Unary operator * is the deference (indirection) operator

Page 36: 3 ADT Unsorted List. List Definitions Linear relationship Each element except the first has a unique predecessor, and each element except the last has

int x; x = 12;

int* ptr; ptr = &x;

*ptr = 5; // changes the value // at address ptr to 5

Using the dereference operator

2000

12 5

x

3000

2000

ptr

Page 37: 3 ADT Unsorted List. List Definitions Linear relationship Each element except the first has a unique predecessor, and each element except the last has

char ch;

ch = ‘A’;

char* q; q = &ch;

*q = ‘Z’;

char* p; p = q; // the right side has value 4000

// now p and q both point to ch

Another Example

4000

A Z

ch

5000 6000

4000 4000

q p

Page 38: 3 ADT Unsorted List. List Definitions Linear relationship Each element except the first has a unique predecessor, and each element except the last has

38

C++ Data Types

Structured

array struct union class

Address

pointer reference

Simple

Integral Floating

char short int long enum

float double long double

Page 39: 3 ADT Unsorted List. List Definitions Linear relationship Each element except the first has a unique predecessor, and each element except the last has

2000

ptr

Dynamically Allocated Data

char* ptr;

ptr = new char;

*ptr = ‘B’;

std::cout << *ptr;

New is an operator

Page 40: 3 ADT Unsorted List. List Definitions Linear relationship Each element except the first has a unique predecessor, and each element except the last has

Dynamically Allocated Data

char* ptr;

ptr = new char;

*ptr = ‘B’;

std::cout << *ptr;

NOTE: Dynamic data has no variable name

2000

ptr

Page 41: 3 ADT Unsorted List. List Definitions Linear relationship Each element except the first has a unique predecessor, and each element except the last has

Dynamically Allocated Data

char* ptr;

ptr = new char;

*ptr = ‘B’;

std::cout << *ptr;

2000

ptr

‘B’

Page 42: 3 ADT Unsorted List. List Definitions Linear relationship Each element except the first has a unique predecessor, and each element except the last has

Dynamically Allocated Data

char* ptr;

ptr = new char;

*ptr = ‘B’;

std::cout << *ptr;

delete ptr;

2000

ptr

NOTE: Delete deallocates the memory pointed to by ptr.

?

Page 43: 3 ADT Unsorted List. List Definitions Linear relationship Each element except the first has a unique predecessor, and each element except the last has

Yes, but what does new do?

New

• takes a pointer variable,

• allocates memory for it to point, and

• leaves the address of the assigned memory in the pointer variable.

• If there is no more memory, the pointer variable is set to NULL.

Page 44: 3 ADT Unsorted List. List Definitions Linear relationship Each element except the first has a unique predecessor, and each element except the last has

The NULL PointerThere is a pointer constant called NULL

available in cstddef.

NULL is not a memory address; it means that the pointer variable points to nothing.

It is an error to dereference a pointer whose value is NULL. It is the programmer’s job to check for this.

while (ptr != NULL) { . . . // ok to use *ptr here

}

Page 45: 3 ADT Unsorted List. List Definitions Linear relationship Each element except the first has a unique predecessor, and each element except the last has

The object or array currently pointed to by the pointer is deallocated, and the pointer is considered unassigned. The memory is returned to the free store.

Square brackets are used with delete to deallocate a dynamically allocated array of classes.

Using operator delete

Page 46: 3 ADT Unsorted List. List Definitions Linear relationship Each element except the first has a unique predecessor, and each element except the last has

int* ptr = new int; *ptr = 3;

ptr = new int; // changes value of ptr *ptr = 4;

What happens here?

3

ptr

3

ptr

4

Page 47: 3 ADT Unsorted List. List Definitions Linear relationship Each element except the first has a unique predecessor, and each element except the last has

Memory Leak

A memory leak occurs when dynamic memory (that was created using operator new) has been left without a pointer to it by the programmer, and so is inaccessible.

int* ptr = new int; *ptr = 8; int* ptr2 = new int; *ptr2 = -5;

8

ptr

-5

ptr2

How else can an object become inaccessible?

Page 48: 3 ADT Unsorted List. List Definitions Linear relationship Each element except the first has a unique predecessor, and each element except the last has

Causing a Memory Leak

int* ptr = new int;

*ptr = 8;

int* ptr2 = new int;

*ptr2 = -5;

ptr = ptr2; // here the 8 becomes inaccessible

8

ptr

-5

ptr2

8

ptr

-5

ptr2

Page 49: 3 ADT Unsorted List. List Definitions Linear relationship Each element except the first has a unique predecessor, and each element except the last has

• occurs when two pointers point to the same object and delete is applied to one of them.

int* ptr = new int;

*ptr = 8;

int* ptr2 = new int;

*ptr2 = -5;

ptr = ptr2;

A Dangling Pointer

8

ptr

-5

ptr2

FOR EXAMPLE,

Page 50: 3 ADT Unsorted List. List Definitions Linear relationship Each element except the first has a unique predecessor, and each element except the last has

int* ptr = new int;

*ptr = 8;

int* ptr2 = new int;

*ptr2 = -5;

ptr = ptr2;

delete ptr2; // ptr is left dangling

ptr2 = NULL;

Leaving a Dangling Pointer

8

ptr

-5

ptr2

8

ptr

NULL

ptr2

Page 51: 3 ADT Unsorted List. List Definitions Linear relationship Each element except the first has a unique predecessor, and each element except the last has

Remember?

• A list is a homogeneous collection of elements, with a linear relationship between elements.

• That is, each list element (except the first) has a unique predecessor, and each element (except the last) has a unique successor.

Page 52: 3 ADT Unsorted List. List Definitions Linear relationship Each element except the first has a unique predecessor, and each element except the last has

ADT Unsorted List Operations

Transformers • MakeEmpty • PutItem • DeleteItem

Observers • IsFull• GetLength

• GetItem

Iterators • ResetList • GetNextItem

change state

observe state

process all

Page 53: 3 ADT Unsorted List. List Definitions Linear relationship Each element except the first has a unique predecessor, and each element except the last has

53

#include “ItemType.h” // unsorted.h . . .class UnsortedType{public : // LINKED LIST IMPLEMENTATION

// The public interface is the same

private : // The private part is different

NodeType<ItemType>* listData;int length;NodeType<ItemType>* currentPos;

};

Do we have to keep a length field?Do we need an IsFull?

Page 54: 3 ADT Unsorted List. List Definitions Linear relationship Each element except the first has a unique predecessor, and each element except the last has

class UnsortedType<char>

MakeEmpty

~UnsortedType

DeleteItem . . .

PutItem

UnsortedType

GetItem

GetNextItem

‘X’ ‘C’ ‘L’

Private data:

length 3

listData

currentPos ?

Page 55: 3 ADT Unsorted List. List Definitions Linear relationship Each element except the first has a unique predecessor, and each element except the last has

55

// LINKED LIST IMPLEMENTATION ( unsorted.cpp )#include “itemtype.h”

UnsortedType::UnsortedType ( ) // constructor// Pre: None.// Post: List is empty.{

length = 0;listData = NULL;

}

int UnsortedType::GetLength( ) const// Post: Function value = number of items in the list.{

return length;}

Page 56: 3 ADT Unsorted List. List Definitions Linear relationship Each element except the first has a unique predecessor, and each element except the last has

56

ItemType UnsortedType::GetItem( ItemType item, bool& found ) // Pre: Key member of item is initialized.// Post: If found, item’s key matches an element’s key in the list // a copy of that element is returned; otherwise,// origianl item is returned.{ bool moreToSearch;

NodeType<ItemType>* location; location = listData;

found = false ;moreToSearch = ( location != NULL );while ( moreToSearch && !found ) { if ( item == location->info ) // match here

{ found = true; item = location->info;

} else // advance pointer { location = location->next;

moreToSearch = ( location != NULL ); }

} return item; }

Page 57: 3 ADT Unsorted List. List Definitions Linear relationship Each element except the first has a unique predecessor, and each element except the last has

57

void UnsortedType::PutItem ( ItemType item )

// Pre: list is not full and item is not in list.

// Post: item is in the list; length has been incremented.

{

NodeType<ItemType>* location;

// obtain and fill a node

location = new NodeType<ItemType>;

location->info = item;

location->next = listData;

listData = location;

length++;

}

Page 58: 3 ADT Unsorted List. List Definitions Linear relationship Each element except the first has a unique predecessor, and each element except the last has

Inserting ‘B’ into an Unsorted List

‘X’ ‘C’ ‘L’

Private data:

length 3

listData

currentPos ?

Page 59: 3 ADT Unsorted List. List Definitions Linear relationship Each element except the first has a unique predecessor, and each element except the last has

location = new NodeType;

‘X’ ‘C’ ‘L’

Private data:

length 3

listData

currentPos ?

item

location

‘B’

Page 60: 3 ADT Unsorted List. List Definitions Linear relationship Each element except the first has a unique predecessor, and each element except the last has

location->info = item ;

‘X’ ‘C’ ‘L’

Private data:

length 3

listData

currentPos ?

item

location

‘B’

‘B’

Page 61: 3 ADT Unsorted List. List Definitions Linear relationship Each element except the first has a unique predecessor, and each element except the last has

location->next = listData ;

‘X’ ‘C’ ‘L’

Private data:

length 3

listData

currentPos ?

item

location

‘B’

‘B’

Page 62: 3 ADT Unsorted List. List Definitions Linear relationship Each element except the first has a unique predecessor, and each element except the last has

listData = location ;

‘X’ ‘C’ ‘L’

Private data:

length 3

listData

currentPos ?

item

location

‘B’

‘B’

Page 63: 3 ADT Unsorted List. List Definitions Linear relationship Each element except the first has a unique predecessor, and each element except the last has

length++ ;

‘X’ ‘C’ ‘L’

Private data:

length 4

listData

currentPos ?

item

location

‘B’

‘B’

Page 64: 3 ADT Unsorted List. List Definitions Linear relationship Each element except the first has a unique predecessor, and each element except the last has

Comparing List Implementations

• The array list implementation appends items at the end of the list. For example, after 5 insertions, the list is 56791.

• The linked list implementation appends items from the head of the list. After 5 insertions, the list is 19765

• Insertions would be O(1) for both when placing the items in the easiest places; otherwise, insertions would take O(N) for array implementation, if items must be inserted at the head of the list.

• Deletions take O(N) for both list implementations.• MakeEmpty takes O(N) to delete nodes in the linked

list, and O(1) for array to set the length to 0.

Page 65: 3 ADT Unsorted List. List Definitions Linear relationship Each element except the first has a unique predecessor, and each element except the last has

Workout

• Compare the storage space requirements of array-based vs. linked list based implementations for the following data:• Maximum of 200 80-byte strings• Maximum of 200 2-byte integers• Maximum of 200 12-byte structs

• Integer indices require 2-bytes; pointers require 4-bytes

• Graph storage requirements for both implementation approaches, as the number of elements in the structure ranges from 0 to the maximum structure size