Presentation is loading. Please wait.

Presentation is loading. Please wait.

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

Similar presentations


Presentation on theme: "Linked List - I. Abstract Data Type (ADT) ADT is a data type whose properties (domain and operations) are specified independently of any particular implementation."— Presentation transcript:

1 Linked List - I

2 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.

3 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.

4 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.

5 Class ShoppingList class ShoppingList { public : intLengthIs ( ) const ; void RetrieveItem (int pos) ; void InsertItem (const Item& item, int pos ) ; void RemoveItem (int pos); void DeleteAll ( ); private : int size ; Node*front ; } ;

6 Singly Linked List Diagram Pointer to front node ABC NULL Nodes Data carried in nodePointer to next node

7 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?

8 Front Insert Example (1 of 6) front ABC itemlinkitemlinkitemlink prevcurpos 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

9 Front Insert Example (2 of 6) front ABC itemlinkitemlinkitemlink curpos 0 anItem D ? assert(pos >= 0 && pos <= size); size++; size 4

10 Front Insert Example (3 of 6) front ABC itemlinkitemlinkitemlink curpos 0 anItem D if (pos == 0) { // Inserting at the front cur = front; size 4

11 Front Insert Example (4 of 6) front ABC itemlinkitemlinkitemlink curpos 0 anItem D front = new Node(anItem); size 4 D itemlink ?

12 Front Insert Example (5 of 6) front ABC itemlinkitemlinkitemlink curpos 0 anItem D front->link = cur; size 4 D itemlink

13 Front Insert Example (6 of 6) front ABC itemlinkitemlinkitemlink return; } size 4 D itemlink

14 Empty Insert Example (1 of 6) size curpos 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

15 Empty Insert Example (2 of 6) size curpos 0 anItem A ? assert(pos >= 0 && pos <= size); size++; front 1

16 Empty Insert Example (3 of 6) size curpos 0 anItem A if (pos == 0) { // Inserting at the front cur = front; front 1

17 Empty Insert Example (4 of 6) size curpos 0 anItem A front = new Node(anItem); front 1 A itemlink ?

18 Empty Insert Example (5 of 6) size curpos 0 anItem A front->link = cur; front 1 A itemlink

19 Empty Insert Example (6 of 6) size return; } front 1 A itemlink

20 Middle Insert Example (1 of 8) void ShoppingList::insert(const Item & anItem, int pos) { Node *prev, *cur; Inserting D at position 2 front ABC itemlinkitemlinkitemlink prevcurpos 2 anItem D ?? size 3

21 Middle Insert Example (2 of 8) assert(pos >= 0 && pos <= size); size++; front ABC itemlinkitemlinkitemlink prevcurpos 2 anItem D ?? size 4

22 Middle Insert Example (3 of 8) prev = NULL; cur = front; front ABC itemlinkitemlinkitemlink prevcurpos 2 anItem D size 4

23 Middle Insert Example (4 of 8) while (pos > 0) { prev = cur; cur = cur->link; pos--; } First Iteration front ABC itemlinkitemlinkitemlink prevcurpos 1 anItem D size 4

24 Middle Insert Example (5 of 8) while (pos > 0) { prev = cur; cur = cur->link; pos--; } Second Iteration front ABC itemlinkitemlinkitemlink prevcurpos 0 anItem D size 4

25 Middle Insert Example (6 of 8) prev->link = new Node(anItem); front ABC itemlinkitemlinkitemlink prevcurpos 0 anItem D size 4 D ? itemlink

26 Middle Insert Example (7 of 8) prev->link->link = cur; front ABC itemlinkitemlinkitemlink prevcurpos 0 anItem D size 4 D itemlink

27 Middle Insert Example (8 of 8) } front ABC itemlinkitemlinkitemlink size 4 D itemlink

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

29 End Insert Example (2 of 8) assert(pos >= 0 && pos <= size); size++; front ABC itemlinkitemlinkitemlink prevcurpos 3 anItem D ?? size 4

30 End Insert Example (3 of 8) prev = 0; cur = front; front ABC itemlinkitemlinkitemlink prevcurpos 3 anItem D 0 size 4

31 End Insert Example (4 of 8) while (pos > 0) { prev = cur; cur = cur->link; pos--; } First Iteration front ABC itemlinkitemlinkitemlink prevcurpos 2 anItem D size 4

32 End Insert Example (5 of 8) while (pos > 0) { prev = cur; cur = cur->link; pos--; } Second Iteration front ABC itemlinkitemlinkitemlink prevcurpos 1 anItem D size 4

33 End Insert Example (6 of 8) while (pos > 0) { prev = cur; cur = cur->link; pos--; } Third Iteration front ABC itemlinkitemlinkitemlink prevcurpos 0 anItem D size 4

34 End Insert Example (7 of 8) prev->link = new Node(anItem); prev->link->link = cur; front ABC itemlinkitemlinkitemlink prevcurpos 0 anItem D size 4 D itemlink

35 End Insert Example (8 of 8) } front ABC itemlinkitemlinkitemlink size 4 D itemlink

36 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; }

37 Remove Example (1 of 7) void ShoppingList::remove(int pos) { Node *cur, *prev; Removing at position 1 front ABC itemlinkitemlinkitemlink prevcurpos 1 ?? size 3

38 Remove Example (2 of 7) assert(pos >= 0 && pos < size); size--; front ABC itemlinkitemlinkitemlink prevcurpos 1 ?? size 2

39 Remove Example (3 of 7) prev = NULL; cur = front; front ABC itemlinkitemlinkitemlink prevcurpos 1 size 2

40 Remove Example (4 of 7) while (pos > 0) { prev = cur; cur = cur->link; pos--; } front ABC itemlinkitemlinkitemlink prevcurpos 0 size 2 First iteration Delete the node pointed by cur

41 Remove Example (5 of 7) prev->link = cur->link; front ABC itemlinkitemlinkitemlink prevcurpos 0 size 2

42 Remove Example (6 of 7) delete cur; front ABC itemlinkitemlinkitemlink prevcurpos 0 size 2

43 Remove Example (7 of 7) } front AC itemlinkitemlink size 2

44 Delete All Example (1 of 8) void ShoppingList::deleteAll() { Node *kil; front ABC itemlinkitemlinkitemlink kil ? size 3

45 Delete All Example (2 of 8) while (front != NULL) { kil = front; front = front->link; ABC itemlinkitemlinkitemlink kil frontsize 3 First iteration

46 Delete All Example (3 of 8) kil->link = NULL; delete kil; } ABC itemlinkitemlinkitemlink kil frontsize 3 First iteration

47 Delete All Example (4 of 8) while (front != NULL) { kil = front; front = front->link; BC itemlinkitemlink kil frontsize 3 Second iteration

48 Delete All Example (5 of 8) kil->link = NULL; delete kil; } BC itemlinkitemlink kil frontsize 3 Second iteration

49 Delete All Example (6 of 8) while (front != NULL) { kil = front; front = front->link; C itemlink kil frontsize 3 Third iteration

50 Delete All Example (7 of 8) kil->link = 0; delete kil; } C itemlink kil frontsize 3 Third iteration 0

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


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

Similar presentations


Ads by Google