Lecture No.02
Data Structures
Zaigham Abbas
University of Gujrat (Pakistan)
Implementing Lists
 We have designed the interface for the List; we
now must consider how to implement that
interface.
Implementing Lists
 We have designed the interface for the List; we
now must consider how to implement that
interface.
 Implementing Lists using an array: for example,
the list of integers (2, 6, 8, 7, 1) could be
represented as:
A 6 8 7 1
1 2 3 4 5
2
current
3
size
5
List Implementation
 add(9); current position is 3. The new list would thus
be: (2, 6, 8, 9, 7, 1)
 We will need to shift everything to the right of 8 one
place to the right to make place for the new element ‘9’.
current
3
size
5
step 1: A 6 8 7 1
1 2 3 4 5
2
6
current
4
size
6
step 2: A 6 8 7 1
1 2 3 4 5
2
6
9
notice: current points
to new element
Implementing Lists
 next():
current
4
size
6
A 6 8 7 1
1 2 3 4 5
2
6
9
5
Implementing Lists
 There are special cases for positioning the
current pointer:
a. past the last array cell
b. before the first cell
Implementing Lists
 There are special cases for positioning the
current pointer:
a. past the last array cell
b. before the first cell
 We will have to worry about these when we
write the actual code.
Implementing Lists
 remove(): removes the element at the current
index
current
5
size
6
A 6 8 1
1 2 3 4 5
2
6
9
5
Step 1:
current
5
size
5
A 6 8 1
1 2 3 4 5
2 9Step 2:
Implementing Lists
 remove(): removes the element at the current
index
 We fill the blank spot left by the removal of 7 by
shifting the values to the right of position 5 over to the left one space.
current
5
size
5
A 6 8 1
1 2 3 4 5
2 9Step 2:
current
5
size
6
A 6 8 1
1 2 3 4 5
2
6
9
5
Step 1:
Implementing Lists
find(X): traverse the array until X is located.
int find(int X)
{
int j;
for(j=1; j < size+1; j++ )
if( A[j] == X ) break;
if( j < size+1 ) { // found X
current = j; // current points to where X found
return 1; // 1 for true
}
return 0; // 0 (false) indicates not found
}
Implementing Lists
 Other operations:
get()  return A[current];
update(X)  A[current] = X;
length()  return size;
back()  current--;
start()  current = 1;
end()  current = size;
Analysis of Array Lists
 add
 we have to move every element to the right of
current to make space for the new element.
 Worst-case is when we insert at the beginning; we
have to move every element right one place.
 Average-case: on average we may have to move
half of the elements
Analysis of Array Lists
 remove
 Worst-case: remove at the beginning, must shift all
remaining elements to the left.
 Average-case: expect to move half of the elements.
 find
 Worst-case: may have to search the entire array
 Average-case: search at most half the array.
 Other operations are one-step.
List Using Linked Memory
 Various cells of memory are not allocated
consecutively in memory.
List Using Linked Memory
 Various cells of memory are not allocated
consecutively in memory.
 Not enough to store the elements of the list.
List Using Linked Memory
 Various cells of memory are not allocated
consecutively in memory.
 Not enough to store the elements of the list.
 With arrays, the second element was right next
to the first element.
List Using Linked Memory
 Various cells of memory are not allocated
consecutively in memory.
 Not enough to store the elements of the list.
 With arrays, the second element was right next
to the first element.
 Now the first element must explicitly tell us
where to look for the second element.
List Using Linked Memory
 Various cells of memory are not allocated
consecutively in memory.
 Not enough to store the elements of the list.
 With arrays, the second element was right next
to the first element.
 Now the first element must explicitly tell us
where to look for the second element.
 Do this by holding the memory address of the
second element
Linked List
 Create a structure called a Node.
object next
 The object field will hold the actual list element.
 The next field in the structure will hold the
starting location of the next node.
 Chain the nodes together to form a linked list.
Linked List
 Picture of our list (2, 6, 7, 8, 1) stored as a
linked list:
2 6 8 7 1
head
current
size=5
Linked List
Note some features of the list:
 Need a head to point to the first node of the list.
Otherwise we won’t know where the start of the
list is.
Linked List
Note some features of the list:
 Need a head to point to the first node of the list.
Otherwise we won’t know where the start of the
list is.
 The current here is a pointer, not an index.
Linked List
Note some features of the list:
 Need a head to point to the first node of the list.
Otherwise we won’t know where the start of the
list is.
 The current here is a pointer, not an index.
 The next field in the last node points to nothing.
We will place the memory address NULL which
is guaranteed to be inaccessible.
Linked List
 Actual picture in memory:
1051
1052
1055
1059
1060
1061
1062
1063
1064
1056
1057
1058
1053
1054 2
6
8
7
1
1051
1063
1057
1060
0
head 1054
1063current
2 6 8 7 1
head
current
1065

Data Structure lec#2

  • 1.
    Lecture No.02 Data Structures ZaighamAbbas University of Gujrat (Pakistan)
  • 2.
    Implementing Lists  Wehave designed the interface for the List; we now must consider how to implement that interface.
  • 3.
    Implementing Lists  Wehave designed the interface for the List; we now must consider how to implement that interface.  Implementing Lists using an array: for example, the list of integers (2, 6, 8, 7, 1) could be represented as: A 6 8 7 1 1 2 3 4 5 2 current 3 size 5
  • 4.
    List Implementation  add(9);current position is 3. The new list would thus be: (2, 6, 8, 9, 7, 1)  We will need to shift everything to the right of 8 one place to the right to make place for the new element ‘9’. current 3 size 5 step 1: A 6 8 7 1 1 2 3 4 5 2 6 current 4 size 6 step 2: A 6 8 7 1 1 2 3 4 5 2 6 9 notice: current points to new element
  • 5.
  • 6.
    Implementing Lists  Thereare special cases for positioning the current pointer: a. past the last array cell b. before the first cell
  • 7.
    Implementing Lists  Thereare special cases for positioning the current pointer: a. past the last array cell b. before the first cell  We will have to worry about these when we write the actual code.
  • 8.
    Implementing Lists  remove():removes the element at the current index current 5 size 6 A 6 8 1 1 2 3 4 5 2 6 9 5 Step 1: current 5 size 5 A 6 8 1 1 2 3 4 5 2 9Step 2:
  • 9.
    Implementing Lists  remove():removes the element at the current index  We fill the blank spot left by the removal of 7 by shifting the values to the right of position 5 over to the left one space. current 5 size 5 A 6 8 1 1 2 3 4 5 2 9Step 2: current 5 size 6 A 6 8 1 1 2 3 4 5 2 6 9 5 Step 1:
  • 10.
    Implementing Lists find(X): traversethe array until X is located. int find(int X) { int j; for(j=1; j < size+1; j++ ) if( A[j] == X ) break; if( j < size+1 ) { // found X current = j; // current points to where X found return 1; // 1 for true } return 0; // 0 (false) indicates not found }
  • 11.
    Implementing Lists  Otheroperations: get()  return A[current]; update(X)  A[current] = X; length()  return size; back()  current--; start()  current = 1; end()  current = size;
  • 12.
    Analysis of ArrayLists  add  we have to move every element to the right of current to make space for the new element.  Worst-case is when we insert at the beginning; we have to move every element right one place.  Average-case: on average we may have to move half of the elements
  • 13.
    Analysis of ArrayLists  remove  Worst-case: remove at the beginning, must shift all remaining elements to the left.  Average-case: expect to move half of the elements.  find  Worst-case: may have to search the entire array  Average-case: search at most half the array.  Other operations are one-step.
  • 14.
    List Using LinkedMemory  Various cells of memory are not allocated consecutively in memory.
  • 15.
    List Using LinkedMemory  Various cells of memory are not allocated consecutively in memory.  Not enough to store the elements of the list.
  • 16.
    List Using LinkedMemory  Various cells of memory are not allocated consecutively in memory.  Not enough to store the elements of the list.  With arrays, the second element was right next to the first element.
  • 17.
    List Using LinkedMemory  Various cells of memory are not allocated consecutively in memory.  Not enough to store the elements of the list.  With arrays, the second element was right next to the first element.  Now the first element must explicitly tell us where to look for the second element.
  • 18.
    List Using LinkedMemory  Various cells of memory are not allocated consecutively in memory.  Not enough to store the elements of the list.  With arrays, the second element was right next to the first element.  Now the first element must explicitly tell us where to look for the second element.  Do this by holding the memory address of the second element
  • 19.
    Linked List  Createa structure called a Node. object next  The object field will hold the actual list element.  The next field in the structure will hold the starting location of the next node.  Chain the nodes together to form a linked list.
  • 20.
    Linked List  Pictureof our list (2, 6, 7, 8, 1) stored as a linked list: 2 6 8 7 1 head current size=5
  • 21.
    Linked List Note somefeatures of the list:  Need a head to point to the first node of the list. Otherwise we won’t know where the start of the list is.
  • 22.
    Linked List Note somefeatures of the list:  Need a head to point to the first node of the list. Otherwise we won’t know where the start of the list is.  The current here is a pointer, not an index.
  • 23.
    Linked List Note somefeatures of the list:  Need a head to point to the first node of the list. Otherwise we won’t know where the start of the list is.  The current here is a pointer, not an index.  The next field in the last node points to nothing. We will place the memory address NULL which is guaranteed to be inaccessible.
  • 24.
    Linked List  Actualpicture in memory: 1051 1052 1055 1059 1060 1061 1062 1063 1064 1056 1057 1058 1053 1054 2 6 8 7 1 1051 1063 1057 1060 0 head 1054 1063current 2 6 8 7 1 head current 1065