• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
Computer notes   data structures - 9
 

Computer notes data structures - 9

on

  • 964 views

 

Statistics

Views

Total Views
964
Views on SlideShare
964
Embed Views
0

Actions

Likes
1
Downloads
69
Comments
0

0 Embeds 0

No embeds

Accessibility

Categories

Upload Details

Uploaded via as Microsoft PowerPoint

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment
  • End of lecture 8
  • End of lecture 9

Computer notes   data structures - 9 Computer notes data structures - 9 Presentation Transcript

  • Class No.09 Data Structures http://ecomputernotes.com
  • Memory Organization Code Static data Stack Heap Process 1 (browser) Process 3 (word) Process 4 (excel) Windows OS Process 2 (dev-c++) http://ecomputernotes.com
  • Stack Layout during a call
    • Here is stack layout when function F calls function G:
    During execution of G After call At point of call http://ecomputernotes.com Parameters(F) Local variables(F) Return address(F) Parameters(G) Parameters(F) Local variables(F) Return address(F) Parameters(F) Local variables(F) Return address(F) Parameters(G) Local variables(G) Return address(G) sp sp sp
  • Queues
    • A stack is LIFO (Last-In First Out) structure.
    • In contrast, a queue is a FIFO (First-In First-Out ) structure.
    • A queue is a linear structure for which items can be only inserted at one end and removed at another end.
    http://ecomputernotes.com
  • Queue Operations
    • Enqueue(X) – place X at the rear of the queue.
    • Dequeue() -- remove the front element and return it.
    • Front() -- return front element without removing it.
    • IsEmpty() -- return TRUE if queue is empty, FALSE otherwise
    http://ecomputernotes.com
  • Implementing Queue
    • Using linked List: Recall
    • Insert works in constant time for either end of a linked list.
    • Remove works in constant time only.
    • Seems best that head of the linked list be the front of the queue so that all removes will be from the front.
    • Inserts will be at the end of the list.
    http://ecomputernotes.com
  • Implementing Queue
    • Using linked List:
    front 2 5 7 1 7 5 2 front rear rear http://ecomputernotes.com 1
  • Implementing Queue
    • Using linked List:
    front 2 5 7 1 7 5 2 front rear rear front 2 5 7 7 5 2 front rear rear dequeue() http://ecomputernotes.com 1 1
  • Implementing Queue
    • Using linked List:
    front 2 5 7 1 7 5 2 front rear rear front 2 5 7 9 7 5 2 front rear rear enqueue(9) 9 http://ecomputernotes.com 1
  • Implementing Queue
    • int dequeue()
    • {
    • int x = front->get();
    • Node* p = front;
    • front = front->getNext();
    • delete p;
    • return x;
    • }
    • void enqueue(int x)
    • {
    • Node* newNode = new Node();
    • newNode->set(x);
    • newNode->setNext(NULL);
    • rear->setNext(newNode);
    • rear = newNode;
    • }
    http://ecomputernotes.com
  • Implementing Queue
    • int front()
    • {
    • return front->get();
    • }
    • int isEmpty()
    • {
    • return ( front == NULL );
    • }
    http://ecomputernotes.com
  • Queue using Array
    • If we use an array to hold queue elements, both insertions and removal at the front (start) of the array are expensive.
    • This is because we may have to shift up to “n” elements.
    • For the stack, we needed only one end; for queue we need both.
    • To get around this, we will not shift upon removal of an element.
    http://ecomputernotes.com
  • Queue using Array front 2 5 7 1 rear http://ecomputernotes.com 6 5 7 0 0 1 3 2 4 front 1 7 5 2 3 rear
  • Queue using Array front 2 5 7 1 rear 6 5 7 0 0 1 3 2 4 front 1 7 5 2 4 rear enqueue(6) 6 6 http://ecomputernotes.com
  • Queue using Array front 2 5 7 1 rear 6 5 7 0 0 1 3 2 4 front 1 7 5 2 5 rear enqueue(8) 6 6 8 8 http://ecomputernotes.com
  • Queue using Array front 2 5 7 rear 6 5 7 1 0 1 3 2 4 front 7 5 2 5 rear dequeue() 6 6 8 8 http://ecomputernotes.com
  • Queue using Array front 2 5 rear 6 5 7 2 0 1 3 2 4 front 5 2 5 rear dequeue() 6 6 8 8 http://ecomputernotes.com
  • Queue using Array front 2 5 rear 6 5 7 2 0 1 3 2 4 front 5 2 7 rear enqueue(9) enqueue(12) 6 6 8 8 9 9 12 12 enqueue(21) ?? http://ecomputernotes.com
  • Queue using Array
    • We have inserts and removal running in constant time but we created a new problem.
    • Cannot insert new elements even though there are two places available at the start of the array.
    • Solution: allow the queue to “wrap around”.
    http://ecomputernotes.com
  • Queue using Array
    • Basic idea is to picture the array as a circular array .
    front 2 5 rear 2 front 7 rear 6 8 9 12 http://ecomputernotes.com 6 5 7 0 1 3 2 4 5 2 6 8 9 12
  • Queue using Array
    • void enqueue(int x)
    • {
    • rear = (rear+1)%size;
    • array[rear] = x;
    • noElements = noElements+1;
    • }
    front 2 5 rear 6 8 9 12 6 5 7 0 1 3 2 4 5 2 6 8 9 12 enqueue(21) 21 21 7 noElements http://ecomputernotes.com 2 front 0 rear 8 size
  • Queue using Array
    • int isFull()
    • {
    • return noElements == size;
    • }
    • int isEmpty()
    • {
    • return noElements == 0;
    • }
    front 2 5 rear 6 8 9 12 6 5 7 0 1 3 2 4 5 2 6 8 9 12 enqueue(7) 21 21 8 noElements 7 7 http://ecomputernotes.com 2 front 1 rear 8 size
  • Queue using Array
    • int dequeue()
    • {
    • int x = array[front];
    • front = (front+1)%size;
    • noElements = noElements-1;
    • return x;
    • }
    front rear 6 8 9 12 6 5 7 0 1 3 2 4 6 8 9 12 dequeue() 21 21 6 noElements 7 7 http://ecomputernotes.com 4 front 1 rear 8 size
  • Use of Queues
    • Out of the numerous uses of the queues, one of the most useful is simulation .
    • A simulation program attempts to model a real-world phenomenon.
    • Many popular video games are simulations, e.g., SimCity, FlightSimulator
    • Each object and action in the simulation has a counterpart in real world.
    http://ecomputernotes.com
  • Uses of Queues
    • If the simulation is accurate, the result of the program should mirror the results of the real-world event.
    • Thus it is possible to understand what occurs in the real-world without actually observing its occurrence.
    • Let us look at an example. Suppose there is a bank with four tellers.
    http://ecomputernotes.com
  • Simulation of a Bank
    • A customer enters the bank at a specific time (t 1 ) desiring to conduct a transaction.
    • Any one of the four tellers can attend to the customer.
    • The transaction (withdraw, deposit) will take a certain period of time (t 2 ).
    • If a teller is free, the teller can process the customer’s transaction immediately and the customer leaves the bank at t 1 +t 2 .
    http://ecomputernotes.com