Sorting, Stacks, Queues Bryce Boe 2013/11/06 CS24, Fall 2013.
-
Upload
jack-mcgee -
Category
Documents
-
view
214 -
download
2
Transcript of Sorting, Stacks, Queues Bryce Boe 2013/11/06 CS24, Fall 2013.
![Page 1: Sorting, Stacks, Queues Bryce Boe 2013/11/06 CS24, Fall 2013.](https://reader035.fdocuments.us/reader035/viewer/2022072010/56649daf5503460f94a9d259/html5/thumbnails/1.jpg)
Sorting, Stacks, Queues
Bryce Boe2013/11/06
CS24, Fall 2013
![Page 2: Sorting, Stacks, Queues Bryce Boe 2013/11/06 CS24, Fall 2013.](https://reader035.fdocuments.us/reader035/viewer/2022072010/56649daf5503460f94a9d259/html5/thumbnails/2.jpg)
Outline
• Finish Lab 5 Part 2 Review• Lab 6 Review / Sorting / C++ Templates• Stacks and Queues
![Page 3: Sorting, Stacks, Queues Bryce Boe 2013/11/06 CS24, Fall 2013.](https://reader035.fdocuments.us/reader035/viewer/2022072010/56649daf5503460f94a9d259/html5/thumbnails/3.jpg)
O(n2) Sorting Algorithms
• Bubble sort– Bubble the largest element to the end in each pass
• Insertion sort– Insert the next element into the sorted portion of
the list• Selection sort– Find the smallest (or largest) item and put it in its
proper location
![Page 4: Sorting, Stacks, Queues Bryce Boe 2013/11/06 CS24, Fall 2013.](https://reader035.fdocuments.us/reader035/viewer/2022072010/56649daf5503460f94a9d259/html5/thumbnails/4.jpg)
Templates
• Before templates:– Need a version of the data structure for each type
it contains OR store (void*) pointers in the structure
• With templates:– Declare functions / classes that can operate on
arbitrary types
![Page 5: Sorting, Stacks, Queues Bryce Boe 2013/11/06 CS24, Fall 2013.](https://reader035.fdocuments.us/reader035/viewer/2022072010/56649daf5503460f94a9d259/html5/thumbnails/5.jpg)
STACKS
![Page 6: Sorting, Stacks, Queues Bryce Boe 2013/11/06 CS24, Fall 2013.](https://reader035.fdocuments.us/reader035/viewer/2022072010/56649daf5503460f94a9d259/html5/thumbnails/6.jpg)
Stack
• A First-in Last-out data structure (FILO)– Operates like a stack of papers
• Operations– void push(T item)• Add an item to the stack
– T pop()• Remove and return the most recently added item from
the stack
![Page 7: Sorting, Stacks, Queues Bryce Boe 2013/11/06 CS24, Fall 2013.](https://reader035.fdocuments.us/reader035/viewer/2022072010/56649daf5503460f94a9d259/html5/thumbnails/7.jpg)
Linked-List Implementation
• push(item)– Use insert_at(0, item) for a O(1)
• pop(item)– Use remove_at(0) for a O(1)
![Page 8: Sorting, Stacks, Queues Bryce Boe 2013/11/06 CS24, Fall 2013.](https://reader035.fdocuments.us/reader035/viewer/2022072010/56649daf5503460f94a9d259/html5/thumbnails/8.jpg)
Array-based implementation
• push(item)– Use insert_at(-1, item) for an O(1) insertion– O(n) when the array must expand
• pop()– Use remove_at(-1) for an O(1) removal
![Page 9: Sorting, Stacks, Queues Bryce Boe 2013/11/06 CS24, Fall 2013.](https://reader035.fdocuments.us/reader035/viewer/2022072010/56649daf5503460f94a9d259/html5/thumbnails/9.jpg)
QUEUES
![Page 10: Sorting, Stacks, Queues Bryce Boe 2013/11/06 CS24, Fall 2013.](https://reader035.fdocuments.us/reader035/viewer/2022072010/56649daf5503460f94a9d259/html5/thumbnails/10.jpg)
Queues
• What is a queue?– A data structure that allows access to items in a
first in, first out manor (FIFO)• What are its operations?– enqueue (add to the queue)– dequeue (remove the oldest item in the queue)
• What are some example queues?– Waiting in line, task scheduling, data buffering
![Page 11: Sorting, Stacks, Queues Bryce Boe 2013/11/06 CS24, Fall 2013.](https://reader035.fdocuments.us/reader035/viewer/2022072010/56649daf5503460f94a9d259/html5/thumbnails/11.jpg)
Linked List Implementation
• Stacks add and remove from the same side, thus for queues it makes sense to add and remove from opposite sides
• BUT, adding and removing from the end of the list is O(n)
![Page 12: Sorting, Stacks, Queues Bryce Boe 2013/11/06 CS24, Fall 2013.](https://reader035.fdocuments.us/reader035/viewer/2022072010/56649daf5503460f94a9d259/html5/thumbnails/12.jpg)
Make the linked list smarter
• Add a tail pointer– Gives us immediate access to the end of the list– Can we improve these functions’ efficiency?• insert_at(-1, item)?• remove_at(-1)?
YES
NO
![Page 13: Sorting, Stacks, Queues Bryce Boe 2013/11/06 CS24, Fall 2013.](https://reader035.fdocuments.us/reader035/viewer/2022072010/56649daf5503460f94a9d259/html5/thumbnails/13.jpg)
Linked-List Implementation
• enqueue(item)– Use insert_at(-1, item) for a O(1)• Assumes we have a working tail pointer in the list
• dequeue(item)– Use remove_at(0) for a O(1)
![Page 14: Sorting, Stacks, Queues Bryce Boe 2013/11/06 CS24, Fall 2013.](https://reader035.fdocuments.us/reader035/viewer/2022072010/56649daf5503460f94a9d259/html5/thumbnails/14.jpg)
Array-based implementation
• To implement an unbounded queue on top of the array-based implementation of a list requires treating the array as circular
• Rather than using 0 as a base index, the queue needs to keep track of which index should be the base, and use modular arithmetic to wrap around
• When the array needs to grow, the values must be manually “reset” such that the base index is at the zero position
![Page 15: Sorting, Stacks, Queues Bryce Boe 2013/11/06 CS24, Fall 2013.](https://reader035.fdocuments.us/reader035/viewer/2022072010/56649daf5503460f94a9d259/html5/thumbnails/15.jpg)
Array-based implementation
• enqueue(item)– Use insert_at((BASE + size) % allocated, item) for
an O(1) operation• dequeue(item)– Use remove_at(BASE) for an O(1) operation and
make sure to increment the BASE
![Page 16: Sorting, Stacks, Queues Bryce Boe 2013/11/06 CS24, Fall 2013.](https://reader035.fdocuments.us/reader035/viewer/2022072010/56649daf5503460f94a9d259/html5/thumbnails/16.jpg)
Problems we can now solve
• Write a program to determine if a given text is a palindrome:– racecar, stats– poordanisinadroop
• Take a few minutes to solve it with your neighbor
![Page 17: Sorting, Stacks, Queues Bryce Boe 2013/11/06 CS24, Fall 2013.](https://reader035.fdocuments.us/reader035/viewer/2022072010/56649daf5503460f94a9d259/html5/thumbnails/17.jpg)
Palindrome Solutionbool is_palindrome(char *word) {
Queue queue;Stack stack;int index = 0;//iterate through the word adding to the queuewhile(word[index] != ‘\0’) {
stack.push(word[index]);queue.enqueue(word[index++]);
}while(!queue.is_empty())
if (stack.pop() != queue.dequeue() return false;return true;
}