Class No.05  Data Structures http://ecomputernotes.com
Josephus Problem #include &quot;CList.cpp&quot; void main(int argc, char *argv[]) { CList list; int i, N=10, M=3; for(i=1; i <= N; i++ ) list.add(i); list.start(); while( list.length() > 1 ) {   for(i=1; i <= M; i++ ) list.next(); cout << &quot;remove: &quot; << list.get() << endl; list.remove(); } cout << &quot;leader is: &quot; << list.get() << endl; } http://ecomputernotes.com 
Josephus Problem Using a circularly-linked list made the solution trivial. http://ecomputernotes.com
Josephus Problem Using a circularly-linked list made the solution trivial. The solution would have been more difficult if an array had been used. http://ecomputernotes.com
Josephus Problem Using a circularly-linked list made the solution trivial. The solution would have been more difficult if an array had been used. This illustrates the fact that the choice of the appropriate data structures can significantly simplify an algorithm. It can make the algorithm much faster and efficient. http://ecomputernotes.com
Josephus Problem Using a circularly-linked list made the solution trivial. The solution would have been more difficult if an array had been used. This illustrates the fact that the choice of the appropriate data structures can significantly simplify an algorithm. It can make the algorithm much faster and efficient. Later we will see how some elegant data structures lie at the heart of major algorithms. http://ecomputernotes.com
Josephus Problem Using a circularly-linked list made the solution trivial. The solution would have been more difficult if an array had been used. This illustrates the fact that the choice of the appropriate data structures can significantly simplify an algorithm. It can make the algorithm much faster and efficient. Later we will see how some elegant data structures lie at the heart of major algorithms. An entire CS course “Design and Analysis of Algorithms” is devoted to this topic. http://ecomputernotes.com
Abstract Data Type We have looked at four different implementations of the List data structures: Using arrays Singly linked list Doubly linked list Circularly linked list. http://ecomputernotes.com
Abstract Data Type We have looked at four different implementations of the List data structures: Using arrays Singly linked list Doubly linked list Circularly linked list. The interface to the List stayed the same, i.e., add(), get(), next(), start(), remove() etc. http://ecomputernotes.com
Abstract Data Type We have looked at four different implementations of the List data structures: Using arrays Singly linked list Doubly linked list Circularly linked list. The interface to the List stayed the same, i.e., add(), get(), next(), start(), remove() etc. The list is thus an abstract data type; we use it without being concerned with how it is implemented. http://ecomputernotes.com
Abstract Data Type What we care about is the methods that are available for use with the List ADT. http://ecomputernotes.com
Abstract Data Type What we care about is the methods that are available for use with the List ADT. We will follow this theme when we develop other ADT.  http://ecomputernotes.com
Abstract Data Type What we care about is the methods that are available for use with the List ADT. We will follow this theme when we develop other ADT.  We will publish the interface and keep the freedom to change the implementation of ADT without effecting users of the ADT. http://ecomputernotes.com
Abstract Data Type What we care about is the methods that are available for use with the List ADT. We will follow this theme when we develop other ADT.  We will publish the interface and keep the freedom to change the implementation of ADT without effecting users of the ADT. The C++ classes provide us the ability to create such ADTs. http://ecomputernotes.com
Stacks Stacks in real life: stack of books, stack of plates Add new items at the top Remove an item at the top Stack data structure similar to real life: collection of elements arranged in a linear order. Can only access element at the top  http://ecomputernotes.com
Stack Operations Push(X) – insert X as the top element of the stack Pop() – remove the top element of the stack and return it. Top() – return the top element without removing it from the stack.  http://ecomputernotes.com
Stack Operations push(2) top 2 push(5) top 2 5 push(7) top 2 5 7 push(1) top 2 5 7 1 1  pop() top 2 5 7 push(21) top 2 5 7 21 21  pop() top 2 5 7 7  pop() 2 5 top 5  pop() 2 top http://ecomputernotes.com
Stack Operation The last element to go into the stack is the first to come out:  LIFO  – Last In First Out. What happens if we call pop() and there is no element? Have IsEmpty() boolean function that returns true if stack is empty, false otherwise. Throw StackEmpty exception: advanced C++ concept. http://ecomputernotes.com
Stack Implementation: Array  Worst case for insertion and deletion from an array when insert and delete from the beginning: shift elements to the left. Best case for insert and delete is at the end of the array – no need to shift any elements. Implement push() and pop() by inserting and deleting at the end of an array. http://ecomputernotes.com
Stack using an Array top 2 5 7 1 2 5 7 1 0 1 3 2 4 top = 3 http://ecomputernotes.com
Stack using an Array In case of an array, it is possible that the array may “fill-up” if we push enough elements. Have a boolean function  IsFull()  which returns true is stack (array) is full, false otherwise. We would call this function before calling push(x). http://ecomputernotes.com
Stack Operations with Array int pop() { return A[current--]; } void push(int x) { A[++current] = x; } http://ecomputernotes.com
Stack Operations with Array int top() { return A[current]; }  int IsEmpty() { return ( current == -1 ); } int IsFull() { return ( current == size-1); } A quick examination shows that all five operations take constant time. http://ecomputernotes.com
Stack Using Linked List We can avoid the size limitation of a stack implemented with an array by using a linked list to hold the stack elements. As with array, however, we need to decide where to insert elements in the list and where to delete them so that push and pop will run the fastest. http://ecomputernotes.com

Computer notes - Josephus Problem

  • 1.
    Class No.05 Data Structures http://ecomputernotes.com
  • 2.
    Josephus Problem #include&quot;CList.cpp&quot; void main(int argc, char *argv[]) { CList list; int i, N=10, M=3; for(i=1; i <= N; i++ ) list.add(i); list.start(); while( list.length() > 1 ) { for(i=1; i <= M; i++ ) list.next(); cout << &quot;remove: &quot; << list.get() << endl; list.remove(); } cout << &quot;leader is: &quot; << list.get() << endl; } http://ecomputernotes.com 
  • 3.
    Josephus Problem Usinga circularly-linked list made the solution trivial. http://ecomputernotes.com
  • 4.
    Josephus Problem Usinga circularly-linked list made the solution trivial. The solution would have been more difficult if an array had been used. http://ecomputernotes.com
  • 5.
    Josephus Problem Usinga circularly-linked list made the solution trivial. The solution would have been more difficult if an array had been used. This illustrates the fact that the choice of the appropriate data structures can significantly simplify an algorithm. It can make the algorithm much faster and efficient. http://ecomputernotes.com
  • 6.
    Josephus Problem Usinga circularly-linked list made the solution trivial. The solution would have been more difficult if an array had been used. This illustrates the fact that the choice of the appropriate data structures can significantly simplify an algorithm. It can make the algorithm much faster and efficient. Later we will see how some elegant data structures lie at the heart of major algorithms. http://ecomputernotes.com
  • 7.
    Josephus Problem Usinga circularly-linked list made the solution trivial. The solution would have been more difficult if an array had been used. This illustrates the fact that the choice of the appropriate data structures can significantly simplify an algorithm. It can make the algorithm much faster and efficient. Later we will see how some elegant data structures lie at the heart of major algorithms. An entire CS course “Design and Analysis of Algorithms” is devoted to this topic. http://ecomputernotes.com
  • 8.
    Abstract Data TypeWe have looked at four different implementations of the List data structures: Using arrays Singly linked list Doubly linked list Circularly linked list. http://ecomputernotes.com
  • 9.
    Abstract Data TypeWe have looked at four different implementations of the List data structures: Using arrays Singly linked list Doubly linked list Circularly linked list. The interface to the List stayed the same, i.e., add(), get(), next(), start(), remove() etc. http://ecomputernotes.com
  • 10.
    Abstract Data TypeWe have looked at four different implementations of the List data structures: Using arrays Singly linked list Doubly linked list Circularly linked list. The interface to the List stayed the same, i.e., add(), get(), next(), start(), remove() etc. The list is thus an abstract data type; we use it without being concerned with how it is implemented. http://ecomputernotes.com
  • 11.
    Abstract Data TypeWhat we care about is the methods that are available for use with the List ADT. http://ecomputernotes.com
  • 12.
    Abstract Data TypeWhat we care about is the methods that are available for use with the List ADT. We will follow this theme when we develop other ADT. http://ecomputernotes.com
  • 13.
    Abstract Data TypeWhat we care about is the methods that are available for use with the List ADT. We will follow this theme when we develop other ADT. We will publish the interface and keep the freedom to change the implementation of ADT without effecting users of the ADT. http://ecomputernotes.com
  • 14.
    Abstract Data TypeWhat we care about is the methods that are available for use with the List ADT. We will follow this theme when we develop other ADT. We will publish the interface and keep the freedom to change the implementation of ADT without effecting users of the ADT. The C++ classes provide us the ability to create such ADTs. http://ecomputernotes.com
  • 15.
    Stacks Stacks inreal life: stack of books, stack of plates Add new items at the top Remove an item at the top Stack data structure similar to real life: collection of elements arranged in a linear order. Can only access element at the top http://ecomputernotes.com
  • 16.
    Stack Operations Push(X)– insert X as the top element of the stack Pop() – remove the top element of the stack and return it. Top() – return the top element without removing it from the stack. http://ecomputernotes.com
  • 17.
    Stack Operations push(2)top 2 push(5) top 2 5 push(7) top 2 5 7 push(1) top 2 5 7 1 1 pop() top 2 5 7 push(21) top 2 5 7 21 21 pop() top 2 5 7 7 pop() 2 5 top 5 pop() 2 top http://ecomputernotes.com
  • 18.
    Stack Operation Thelast element to go into the stack is the first to come out: LIFO – Last In First Out. What happens if we call pop() and there is no element? Have IsEmpty() boolean function that returns true if stack is empty, false otherwise. Throw StackEmpty exception: advanced C++ concept. http://ecomputernotes.com
  • 19.
    Stack Implementation: Array Worst case for insertion and deletion from an array when insert and delete from the beginning: shift elements to the left. Best case for insert and delete is at the end of the array – no need to shift any elements. Implement push() and pop() by inserting and deleting at the end of an array. http://ecomputernotes.com
  • 20.
    Stack using anArray top 2 5 7 1 2 5 7 1 0 1 3 2 4 top = 3 http://ecomputernotes.com
  • 21.
    Stack using anArray In case of an array, it is possible that the array may “fill-up” if we push enough elements. Have a boolean function IsFull() which returns true is stack (array) is full, false otherwise. We would call this function before calling push(x). http://ecomputernotes.com
  • 22.
    Stack Operations withArray int pop() { return A[current--]; } void push(int x) { A[++current] = x; } http://ecomputernotes.com
  • 23.
    Stack Operations withArray int top() { return A[current]; } int IsEmpty() { return ( current == -1 ); } int IsFull() { return ( current == size-1); } A quick examination shows that all five operations take constant time. http://ecomputernotes.com
  • 24.
    Stack Using LinkedList We can avoid the size limitation of a stack implemented with an array by using a linked list to hold the stack elements. As with array, however, we need to decide where to insert elements in the list and where to delete them so that push and pop will run the fastest. http://ecomputernotes.com

Editor's Notes

  • #3 End of lecture 4. The second goal is the “nuts and bolts” of the course. The third goal prepares a student for the future.
  • #4 The first goal is a worldview to adopt The second goal is the “nuts and bolts” of the course. The third goal prepares a student for the future.
  • #5 The first goal is a worldview to adopt The second goal is the “nuts and bolts” of the course. The third goal prepares a student for the future.
  • #6 The first goal is a worldview to adopt The second goal is the “nuts and bolts” of the course. The third goal prepares a student for the future.
  • #7 The first goal is a worldview to adopt The second goal is the “nuts and bolts” of the course. The third goal prepares a student for the future.
  • #8 The first goal is a worldview to adopt The second goal is the “nuts and bolts” of the course. The third goal prepares a student for the future.
  • #9 The first goal is a worldview to adopt The second goal is the “nuts and bolts” of the course. The third goal prepares a student for the future.
  • #10 The first goal is a worldview to adopt The second goal is the “nuts and bolts” of the course. The third goal prepares a student for the future.
  • #11 The first goal is a worldview to adopt The second goal is the “nuts and bolts” of the course. The third goal prepares a student for the future.
  • #12 The first goal is a worldview to adopt The second goal is the “nuts and bolts” of the course. The third goal prepares a student for the future.
  • #13 The first goal is a worldview to adopt The second goal is the “nuts and bolts” of the course. The third goal prepares a student for the future.
  • #14 The first goal is a worldview to adopt The second goal is the “nuts and bolts” of the course. The third goal prepares a student for the future.
  • #15 The first goal is a worldview to adopt The second goal is the “nuts and bolts” of the course. The third goal prepares a student for the future.
  • #16 A primary concern for this course is efficiency. You might believe that faster computers make it unnecessary to be concerned with efficiency. However… So we need special training.
  • #17 A primary concern for this course is efficiency. You might believe that faster computers make it unnecessary to be concerned with efficiency. However… So we need special training.
  • #18 A primary concern for this course is efficiency. You might believe that faster computers make it unnecessary to be concerned with efficiency. However… So we need special training.
  • #19 A primary concern for this course is efficiency. You might believe that faster computers make it unnecessary to be concerned with efficiency. However… So we need special training.
  • #20 A primary concern for this course is efficiency. You might believe that faster computers make it unnecessary to be concerned with efficiency. However… So we need special training.
  • #21 A primary concern for this course is efficiency. You might believe that faster computers make it unnecessary to be concerned with efficiency. However… So we need special training.
  • #22 A primary concern for this course is efficiency. You might believe that faster computers make it unnecessary to be concerned with efficiency. However… So we need special training.
  • #23 A primary concern for this course is efficiency. You might believe that faster computers make it unnecessary to be concerned with efficiency. However… So we need special training.
  • #24 A primary concern for this course is efficiency. You might believe that faster computers make it unnecessary to be concerned with efficiency. However… So we need special training.
  • #25 End of lecture 5 You might believe that faster computers make it unnecessary to be concerned with efficiency. However… So we need special training.