Top Banner
Linked List - I
51

Linked List - I. Abstract Data Type (ADT) ADT is a data type whose properties (domain and operations) are specified independently of any particular implementation.

Dec 20, 2015

Download

Documents

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: Linked List - I. Abstract Data Type (ADT) ADT is a data type whose properties (domain and operations) are specified independently of any particular implementation.

Linked List - I

Page 2: Linked List - I. Abstract Data Type (ADT) ADT is a data type whose properties (domain and operations) are specified independently of any particular implementation.

Abstract Data Type (ADT)

• ADT is a data type whose properties (domain and operations) are specified independently of any particular implementation. – 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.

Page 3: Linked List - I. Abstract Data Type (ADT) ADT is a data type whose properties (domain and operations) are specified independently of any particular implementation.

4 Basic Kinds of ADT Operations

• Constructor/Destructor – creates/deletes a new instance (object) of an ADT.

• Transformer -- changes the state of one or more of the data values of an instance.

• Observer -- allows us to observe the state of one or more of the data values of an instance without changing them.

• Iterator -- allows us to process all the components in a data structure sequentially.

Page 4: Linked List - I. Abstract Data Type (ADT) ADT is a data type whose properties (domain and operations) are specified independently of any particular implementation.

List

• 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 5: Linked List - I. Abstract Data Type (ADT) ADT is a data type whose properties (domain and operations) are specified independently of any particular implementation.

Class ShoppingListclass ShoppingList{public :

int LengthIs ( ) const ; void RetrieveItem (int pos) ;void InsertItem (const Item& item, int pos ) ; void RemoveItem (int pos);void DeleteAll ( );

private :int size ; Node *front ;

} ;

Page 6: Linked List - I. Abstract Data Type (ADT) ADT is a data type whose properties (domain and operations) are specified independently of any particular implementation.

Singly Linked List Diagram

Pointer to front node

A B C NULL

Nodes

Data carried in node Pointer to next node

Page 7: Linked List - I. Abstract Data Type (ADT) ADT is a data type whose properties (domain and operations) are specified independently of any particular implementation.

Class Node

A

Item item; Node *link;

class Node {public: Node(Item i){item = i};private: Item item; Node *link;};

Insert an item/node into shopping list?Delete an item/node?

Page 8: Linked List - I. Abstract Data Type (ADT) ADT is a data type whose properties (domain and operations) are specified independently of any particular implementation.

Front Insert Example (1 of 6)

front

A B C

item link item link item link

prev cur pos

0

anItem

D? ?

void ShoppingList::insert(const Item & anItem, int pos) { Node *prev, //ignore prev ptr for the FrontInsert example

*cur; Inserting D at position 0

size

3

Page 9: Linked List - I. Abstract Data Type (ADT) ADT is a data type whose properties (domain and operations) are specified independently of any particular implementation.

Front Insert Example (2 of 6)

front

A B C

item link item link item link

cur pos

0

anItem

D?

assert(pos >= 0 && pos <= size); size++;

size

4

Page 10: Linked List - I. Abstract Data Type (ADT) ADT is a data type whose properties (domain and operations) are specified independently of any particular implementation.

Front Insert Example (3 of 6)

front

A B C

item link item link item link

cur pos

0

anItem

D

if (pos == 0) { // Inserting at the front cur = front;

size

4

Page 11: Linked List - I. Abstract Data Type (ADT) ADT is a data type whose properties (domain and operations) are specified independently of any particular implementation.

Front Insert Example (4 of 6)

front

A B C

item link item link item link

cur pos

0

anItem

D

front = new Node(anItem);

size

4

D

item link

?

Page 12: Linked List - I. Abstract Data Type (ADT) ADT is a data type whose properties (domain and operations) are specified independently of any particular implementation.

Front Insert Example (5 of 6)

front

A B C

item link item link item link

cur pos

0

anItem

D

front->link = cur;

size

4

D

item link

Page 13: Linked List - I. Abstract Data Type (ADT) ADT is a data type whose properties (domain and operations) are specified independently of any particular implementation.

Front Insert Example (6 of 6)

front

A B C

item link item link item link

return; }

size

4

D

item link

Page 14: Linked List - I. Abstract Data Type (ADT) ADT is a data type whose properties (domain and operations) are specified independently of any particular implementation.

Empty Insert Example (1 of 6)

size

cur pos

0

anItem

A?

void ShoppingList::insert(const Item & anItem, int pos) { Node *prev, //ignore prev for EmptyInsert example

*cur; Inserting A at position 0 in empty list

front

0

Page 15: Linked List - I. Abstract Data Type (ADT) ADT is a data type whose properties (domain and operations) are specified independently of any particular implementation.

Empty Insert Example (2 of 6)

size

cur pos

0

anItem

A?

assert(pos >= 0 && pos <= size); size++;

front

1

Page 16: Linked List - I. Abstract Data Type (ADT) ADT is a data type whose properties (domain and operations) are specified independently of any particular implementation.

Empty Insert Example (3 of 6)

size

cur pos

0

anItem

A

if (pos == 0) { // Inserting at the front cur = front;

front

1

Page 17: Linked List - I. Abstract Data Type (ADT) ADT is a data type whose properties (domain and operations) are specified independently of any particular implementation.

Empty Insert Example (4 of 6)

size

cur pos

0

anItem

A

front = new Node(anItem);

front

1

A

item link

?

Page 18: Linked List - I. Abstract Data Type (ADT) ADT is a data type whose properties (domain and operations) are specified independently of any particular implementation.

Empty Insert Example (5 of 6)

size

cur pos

0

anItem

A

front->link = cur;

front

1

A

item link

Page 19: Linked List - I. Abstract Data Type (ADT) ADT is a data type whose properties (domain and operations) are specified independently of any particular implementation.

Empty Insert Example (6 of 6)

size

return; }

front

1

A

item link

Page 20: Linked List - I. Abstract Data Type (ADT) ADT is a data type whose properties (domain and operations) are specified independently of any particular implementation.

Middle Insert Example (1 of 8)void ShoppingList::insert(const Item & anItem, int pos) { Node *prev, *cur; Inserting D at position 2

front

A B C

item link item link item link

prev cur pos

2

anItem

D? ?

size

3

Page 21: Linked List - I. Abstract Data Type (ADT) ADT is a data type whose properties (domain and operations) are specified independently of any particular implementation.

Middle Insert Example (2 of 8) assert(pos >= 0 && pos <= size); size++;

front

A B C

item link item link item link

prev cur pos

2

anItem

D? ?

size

4

Page 22: Linked List - I. Abstract Data Type (ADT) ADT is a data type whose properties (domain and operations) are specified independently of any particular implementation.

Middle Insert Example (3 of 8) prev = NULL; cur = front;

front

A B C

item link item link item link

prev cur pos

2

anItem

D

size

4

Page 23: Linked List - I. Abstract Data Type (ADT) ADT is a data type whose properties (domain and operations) are specified independently of any particular implementation.

Middle Insert Example (4 of 8) while (pos > 0) { prev = cur; cur = cur->link; pos--; }

First Iteration

front

A B C

item link item link item link

prev cur pos

1

anItem

D

size

4

Page 24: Linked List - I. Abstract Data Type (ADT) ADT is a data type whose properties (domain and operations) are specified independently of any particular implementation.

Middle Insert Example (5 of 8) while (pos > 0) { prev = cur; cur = cur->link; pos--; }

Second Iteration

front

A B C

item link item link item link

prev cur pos

0

anItem

D

size

4

Page 25: Linked List - I. Abstract Data Type (ADT) ADT is a data type whose properties (domain and operations) are specified independently of any particular implementation.

Middle Insert Example (6 of 8) prev->link = new Node(anItem);

front

A B C

item link item link item link

prev cur pos

0

anItem

D

size

4

D ?

item link

Page 26: Linked List - I. Abstract Data Type (ADT) ADT is a data type whose properties (domain and operations) are specified independently of any particular implementation.

Middle Insert Example (7 of 8) prev->link->link = cur;

front

A B C

item link item link item link

prev cur pos

0

anItem

D

size

4

D

item link

Page 27: Linked List - I. Abstract Data Type (ADT) ADT is a data type whose properties (domain and operations) are specified independently of any particular implementation.

Middle Insert Example (8 of 8)}

front

A B C

item link item link item link

size

4

D

item link

Page 28: Linked List - I. Abstract Data Type (ADT) ADT is a data type whose properties (domain and operations) are specified independently of any particular implementation.

End Insert Example (1 of 8)void ShoppingList::insert(const Item & anItem, int pos) { Node *prev, *cur; Inserting D at position 3

front

A B C

item link item link item link

prev cur pos

3

anItem

D? ?

size

3

Page 29: Linked List - I. Abstract Data Type (ADT) ADT is a data type whose properties (domain and operations) are specified independently of any particular implementation.

End Insert Example (2 of 8) assert(pos >= 0 && pos <= size); size++;

front

A B C

item link item link item link

prev cur pos

3

anItem

D? ?

size

4

Page 30: Linked List - I. Abstract Data Type (ADT) ADT is a data type whose properties (domain and operations) are specified independently of any particular implementation.

End Insert Example (3 of 8) prev = 0; cur = front;

front

A B C

item link item link item link

prev cur pos

3

anItem

D0

size

4

Page 31: Linked List - I. Abstract Data Type (ADT) ADT is a data type whose properties (domain and operations) are specified independently of any particular implementation.

End Insert Example (4 of 8) while (pos > 0) { prev = cur; cur = cur->link; pos--; }

First Iteration

front

A B C

item link item link item link

prev cur pos

2

anItem

D

size

4

Page 32: Linked List - I. Abstract Data Type (ADT) ADT is a data type whose properties (domain and operations) are specified independently of any particular implementation.

End Insert Example (5 of 8) while (pos > 0) { prev = cur; cur = cur->link; pos--; }

Second Iteration

front

A B C

item link item link item link

prev cur pos

1

anItem

D

size

4

Page 33: Linked List - I. Abstract Data Type (ADT) ADT is a data type whose properties (domain and operations) are specified independently of any particular implementation.

End Insert Example (6 of 8) while (pos > 0) { prev = cur; cur = cur->link; pos--; }

Third Iteration

front

A B C

item link item link item link

prev cur pos

0

anItem

D

size

4

Page 34: Linked List - I. Abstract Data Type (ADT) ADT is a data type whose properties (domain and operations) are specified independently of any particular implementation.

End Insert Example (7 of 8) prev->link = new Node(anItem); prev->link->link = cur;

front

A B C

item link item link item link

prev cur pos

0

anItem

D

size

4

D

item link

Page 35: Linked List - I. Abstract Data Type (ADT) ADT is a data type whose properties (domain and operations) are specified independently of any particular implementation.

End Insert Example (8 of 8) }

front

A B C

item link item link item link

size

4

D

item link

Page 36: Linked List - I. Abstract Data Type (ADT) ADT is a data type whose properties (domain and operations) are specified independently of any particular implementation.

void ShoppingList::insert(const Item & anItem, int pos) { Node *prev, *cur; assert(pos >= 0 && pos <= size); size++; if (pos == 0) { // Inserting at the front cur = front; front = new Node(anItem); front->link = cur; return; } prev = NULL; cur = front; while (pos > 0) { prev = cur; cur = cur->link; pos--; } prev->link = new Node(anItem); prev->link->link = cur;}

Page 37: Linked List - I. Abstract Data Type (ADT) ADT is a data type whose properties (domain and operations) are specified independently of any particular implementation.

Remove Example (1 of 7)void ShoppingList::remove(int pos) { Node *cur, *prev; Removing at position 1

front

A B C

item link item link item link

prev cur pos

1? ?

size

3

Page 38: Linked List - I. Abstract Data Type (ADT) ADT is a data type whose properties (domain and operations) are specified independently of any particular implementation.

Remove Example (2 of 7) assert(pos >= 0 && pos < size); size--;

front

A B C

item link item link item link

prev cur pos

1? ?

size

2

Page 39: Linked List - I. Abstract Data Type (ADT) ADT is a data type whose properties (domain and operations) are specified independently of any particular implementation.

Remove Example (3 of 7) prev = NULL; cur = front;

front

A B C

item link item link item link

prev cur pos

1

size

2

Page 40: Linked List - I. Abstract Data Type (ADT) ADT is a data type whose properties (domain and operations) are specified independently of any particular implementation.

Remove Example (4 of 7) while (pos > 0) { prev = cur; cur = cur->link; pos--; }

front

A B C

item link item link item link

prev cur pos

0

size

2

First iteration

Delete the node pointed by cur

Page 41: Linked List - I. Abstract Data Type (ADT) ADT is a data type whose properties (domain and operations) are specified independently of any particular implementation.

Remove Example (5 of 7) prev->link = cur->link;

front

A B C

item link item link item link

prev cur pos

0

size

2

Page 42: Linked List - I. Abstract Data Type (ADT) ADT is a data type whose properties (domain and operations) are specified independently of any particular implementation.

Remove Example (6 of 7) delete cur;

front

A B C

item link item link item link

prev cur pos

0

size

2

Page 43: Linked List - I. Abstract Data Type (ADT) ADT is a data type whose properties (domain and operations) are specified independently of any particular implementation.

Remove Example (7 of 7)}

front

A C

item link item link

size

2

Page 44: Linked List - I. Abstract Data Type (ADT) ADT is a data type whose properties (domain and operations) are specified independently of any particular implementation.

Delete All Example (1 of 8)void ShoppingList::deleteAll() { Node *kil;

front

A B C

item link item link item link

kil

?

size

3

Page 45: Linked List - I. Abstract Data Type (ADT) ADT is a data type whose properties (domain and operations) are specified independently of any particular implementation.

Delete All Example (2 of 8) while (front != NULL) { kil = front; front = front->link;

A B C

item link item link item link

kil

frontsize

3

First iteration

Page 46: Linked List - I. Abstract Data Type (ADT) ADT is a data type whose properties (domain and operations) are specified independently of any particular implementation.

Delete All Example (3 of 8) kil->link = NULL; delete kil; }

A B C

item link item link item link

kil

frontsize

3

First iteration

Page 47: Linked List - I. Abstract Data Type (ADT) ADT is a data type whose properties (domain and operations) are specified independently of any particular implementation.

Delete All Example (4 of 8) while (front != NULL) { kil = front; front = front->link;

B C

item link item link

kil

frontsize

3

Second iteration

Page 48: Linked List - I. Abstract Data Type (ADT) ADT is a data type whose properties (domain and operations) are specified independently of any particular implementation.

Delete All Example (5 of 8) kil->link = NULL; delete kil; }

B C

item link item link

kil

frontsize

3

Second iteration

Page 49: Linked List - I. Abstract Data Type (ADT) ADT is a data type whose properties (domain and operations) are specified independently of any particular implementation.

Delete All Example (6 of 8) while (front != NULL) { kil = front; front = front->link;

C

item link

kil

frontsize

3

Third iteration

Page 50: Linked List - I. Abstract Data Type (ADT) ADT is a data type whose properties (domain and operations) are specified independently of any particular implementation.

Delete All Example (7 of 8) kil->link = 0; delete kil; }

C

item link

kil

frontsize

3

Third iteration

0

Page 51: Linked List - I. Abstract Data Type (ADT) ADT is a data type whose properties (domain and operations) are specified independently of any particular implementation.

Delete All Example (8 of 8) size = 0;}

frontsize

0