1 / 37

C++ Programming: Program Design Including Data Structures, Fourth Edition

C++ Programming: Program Design Including Data Structures, Fourth Edition. Chapter 18: Stacks and Queues (part 3). Queues. Queue : group of homogeneous elements Elements are: Added at one end (the back or rear) Deleted from the other end (the front)

lida
Télécharger la présentation

C++ Programming: Program Design Including Data Structures, Fourth Edition

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. C++ Programming: Program Design Including Data Structures, Fourth Edition Chapter 18: Stacks and Queues (part 3)

  2. Queues • Queue: group of homogeneous elements • Elements are: • Added at one end (the back or rear) • Deleted from the other end (the front) • First In First Out (FIFO) data structure • Middle elements are inaccessible • Example: • Waiting line in a bank C++ Programming: Program Design Including Data Structures, Fourth Edition

  3. Queue Operations • Some of the queue operations are: • initializeQueue • isEmptyQueue • isFullQueue • front • back • addQueue • deleteQueue • Abstractclass queueADT defines these operations C++ Programming: Program Design Including Data Structures, Fourth Edition

  4. Implementation of Queues as Arrays • You need at least four (member) variables: • An array to store the queue elements • queueFront and queueRear • To keep track of first and last elements • maxQueueSize • To specify the maximum size of the queue C++ Programming: Program Design Including Data Structures, Fourth Edition

  5. Implementation of Queues as Arrays (continued) • To add an element to the queue: • Advance queueRear to next array position • Add element to position pointed by queueRear • Example: array size is 100; originally empty C++ Programming: Program Design Including Data Structures, Fourth Edition

  6. Implementation of Queues as Arrays (continued) • To delete an element from the queue: • Retrieve element pointed to by queueFront • Advance queueFront to next queue element C++ Programming: Program Design Including Data Structures, Fourth Edition

  7. Implementation of Queues as Arrays (continued) • Will this queue design work? • Suppose A stands for adding an element to the queue • And D stands for deleting an element from the queue • Consider the following sequence of operations: • AAADADADADADADADA... C++ Programming: Program Design Including Data Structures, Fourth Edition

  8. Implementation of Queues as Arrays (continued) • The sequence AAADADADADADADADA... would eventually set queueRear to point to the last array position • Giving the impression that the queue is full C++ Programming: Program Design Including Data Structures, Fourth Edition

  9. Implementation of Queues as Arrays (continued) • Solution 1: • When the queue overflows to the rear (i.e., queueRear points to the last array position): • Check value of queueFront • If value of queueFront indicates that there is room in the front of the array, slide all of the queue elements toward the first array position • Problem: too slow for large queues • Solution 2: assume that the array is circular C++ Programming: Program Design Including Data Structures, Fourth Edition

  10. Implementation of Queues as Arrays (continued) • To advance the index in a (logically) circular array: C++ Programming: Program Design Including Data Structures, Fourth Edition

  11. Implementation of Queues as Arrays (continued) • Case 1: C++ Programming: Program Design Including Data Structures, Fourth Edition

  12. Implementation of Queues as Arrays (continued) • Case 2: C++ Programming: Program Design Including Data Structures, Fourth Edition

  13. Implementation of Queues as Arrays (continued) • Problem: • Figures 18-47 and 18-49 have identical values for queueFront and queueRear • However, the former represents an empty queue, whereas the latter shows a full queue • Solution? C++ Programming: Program Design Including Data Structures, Fourth Edition

  14. Implementation of Queues as Arrays (continued) • Solution 1: keep a count • Incremented when a new element is added to the queue • Decremented when an element is removed • Initially, set to 0 • Very useful if user (of queue) frequently needs to know the number of elements in the queue • We will implement this solution C++ Programming: Program Design Including Data Structures, Fourth Edition

  15. Implementation of Queues as Arrays (continued) • Solution 2: let queueFront indicate index of the array position preceding the first element • queueRear still indicates index of last one • Queue empty if: • queueFront == queueRear • Slot indicated by queueFront is reserved • Queue can hold 99 (not 100) elements • Queue full if the next available space is the reserved slot indicated by queueFront C++ Programming: Program Design Including Data Structures, Fourth Edition

  16. Empty Queue and Full Queue C++ Programming: Program Design Including Data Structures, Fourth Edition

  17. Initialize Queue C++ Programming: Program Design Including Data Structures, Fourth Edition

  18. Front • Returns the first element of the queue C++ Programming: Program Design Including Data Structures, Fourth Edition

  19. Back • Returns the last element of the queue C++ Programming: Program Design Including Data Structures, Fourth Edition

  20. addQueue C++ Programming: Program Design Including Data Structures, Fourth Edition

  21. deleteQueue C++ Programming: Program Design Including Data Structures, Fourth Edition

  22. Constructors and Destructors C++ Programming: Program Design Including Data Structures, Fourth Edition

  23. Constructors and Destructors (continued) • The array to store the queue elements is created dynamically • When the queue object goes out of scope, the destructor simply deallocates the memory occupied by the array C++ Programming: Program Design Including Data Structures, Fourth Edition

  24. Linked Implementation of Queues • Array size is fixed:only a finite number of queue elements can be stored in it • The array implementation of the queue requires array to be treated in a special way • Together with queueFront and queueRear • The linked implementation of a queue simplifies many of the special cases of the array implementation • In addition, the queue is never full C++ Programming: Program Design Including Data Structures, Fourth Edition

  25. Linked Implementation of Queues (continued) • Elements are added at one end and removed from the other • We need to know the front of the queue and the rear of the queue • Two pointers: queueFront and queueRear C++ Programming: Program Design Including Data Structures, Fourth Edition

  26. Empty and Full Queue • The queue is empty if queueFront is NULL • The queue is never full C++ Programming: Program Design Including Data Structures, Fourth Edition

  27. Initialize Queue • Initializes queue to an empty state • Must remove all the elements, if any C++ Programming: Program Design Including Data Structures, Fourth Edition

  28. addQueue C++ Programming: Program Design Including Data Structures, Fourth Edition

  29. front and back Operations C++ Programming: Program Design Including Data Structures, Fourth Edition

  30. deleteQueue C++ Programming: Program Design Including Data Structures, Fourth Edition

  31. Default Constructor C++ Programming: Program Design Including Data Structures, Fourth Edition

  32. Summary • Stack: items are added/deleted from one end • Last In First Out (LIFO) data structure • Operations: push, pop, initialize, destroy, check for empty/full stack • Can be implemented as array or linked list • Middle elements should not be accessed • Postfix notation: operators are written after the operands (no parentheses needed) C++ Programming: Program Design Including Data Structures, Fourth Edition

  33. Summary (continued) • Queue: items are added at one end and removed from the other end • First In First Out (FIFO) data structure • Operations: add, remove, initialize, destroy, check if queue is empty/full • Can be implemented as array or linked list • Middle elements should not be accessed • Restricted versions of arrays and linked lists C++ Programming: Program Design Including Data Structures, Fourth Edition

More Related