1 / 32

ELEMENTARY DATA STRUCTURES

ELEMENTARY DATA STRUCTURES. Stacks, Queues, and Linked Lists . Elementary Data Structures. Used as programming tools (stacks & queues) - software (i.e. compilers) - used in the operations of a certain task Implemented in CPU instructions - hardware. Stacks. Definition

clea
Download Presentation

ELEMENTARY DATA STRUCTURES

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. ELEMENTARY DATA STRUCTURES Stacks, Queues, and Linked Lists

  2. Elementary Data Structures • Used as programming tools (stacks & queues)- software (i.e. compilers)- used in the operations of a certain task • Implemented in CPU instructions- hardware

  3. Stacks • Definition • container of objects • uses LIFO principle for object operations • operations are push and pop • Sample uses : • Internet browsers • Undo / Redo feature

  4. Other Applications • Parsing- check for matching parenthesis or brackets- aid for algorithms applied to complex data structures (traverse nodes of a tree and searching vertices of a graph)

  5. push(o) pop() Inserts object o onto top of stack Input: object Output: none Removes the top object of stack and returns it to calling method Input: none Output: object Basic Stack Operations

  6. isEmpty() isFull() Returns a boolean indicating if stack is empty. Input: none Output: boolean Returns a boolean indicating if stack is full Input: none Output: boolean Related Stack Operations

  7. size() : top() Returns the number of objects in stack. Input: none Output: integer Returns the top object of the stack. Input: none Output: object Other Stack Operations

  8. An Array-Based Stack • Create an array A of size N • Store elements of stack S in array A • Let t (integer) - index of the top element of stack S S 0 1 2 3 t ... N-1

  9. Array Implementation • Algorithm size()return t + 1 • Algorithm isempty()return (t<0) • Algorithm push(o)if size()=N then throw a STACKEMPTYEXCEPTIONt=t+1S[t]=o

  10. Array Implementation • Algorithm pop()if isempty() then throw a STACKEMPTYEXCEPTIONe=S[t]S[t]=nullt=t-1return e • Algorithm top()if isempty() then throw a STACKEMPTYEXCEPTIONreturn S[t]

  11. Class Problem • Using the stack functions, make an algorithm that will determine that given a string x : a) has matching operands (i.e. (),{},[]) b) report an error if an operand is missing • Example :x = “(12xxs3e)”, correctx = “(sdfsdfs}”, error

  12. Class Problem - Summary 1. Make an empty stack 2. Read characters until end of file 3. If the character is an open anything, push it in the stack 4. If it’s a close anything,then if stack is empty, report an error, otherwise, pop the stack 5. If popped symbol is not the corresponding opening symbol, then report an error 6. At end of file, if stack is not empty report an error

  13. Stacks- other applications • Recursion- i.e. computing for N factorial • Operand parsing- evaluating an expression- i.e. ((4*5)+(6+2)/5))- postfix notationA*B+C = AB*C+ • function calls- variables and routine position are saved

  14. Stacks - Query • How can the undo/redo function be implemented using stacks ?

  15. QUEUES • A queue is a container of objects that are inserted and removed according to the FIFO principle. • Operations: Enqueue - insert an item at the rear of queue • Dequeue - remove an item from the front of the queue • Sample uses : movie line printing queue

  16. enqueue(o) dequeue() Insert object o at the rear of the queue Input: object Output: none Remove the object from the front of the queue and return it. Input: none Output: object The Queue Abstract Data Type

  17. The Queue Abstract Data Type • size() : Returns the number of objects in the queue. Input: none Output: object • isEmpty(): Return a boolean indicating if the queue is empty. Input: none Output:boolean • front(): Return the front object of the queue. • Input: none Output: object

  18. Array Implementation • Create a queue using an array in a circular fashion • Queue consists of an N-element array Q and two integer variables: f : index of the front element r: index of the element after the rear one • Configurations : “normal” “wrapped around”

  19. Queue Implementation f r Array Q f is an index to a cell Q storing the first element, r is an index to the next available cell in Q

  20. Queues- Example • Print Jobs- All requests from workstations are enqueued to the print queue on a first come first served basis- The current (first) printjob is dequeued and sent to the printer for processing

  21. Queue - Applications • I/O Request Handling File server - Workstation (print, data access,etc.) • Telephone Call Handling • History functions in applications

  22. Limitations - Using Arrays • Maximum size needs to be predetermined • Potential wastage of allocated memory • Need to handle overflow

  23. Linked List ADT Head next next next null Each node stores a reference to an element and a reference, called next to another node

  24. Singly Linked List Queue Implementation • Nodes connected in a chain by links head tail • head of the list - front of the queue tail of the list - rear of the queue

  25. Removing at the Head head tail • advance head reference head tail

  26. Inserting at the Tail • create a new node head tail • chain it and move the tail reference head tail

  27. Other Advantages • Insertions and deletions are easier compared to an array implementation when dealing with “lists”

  28. Linked Lists - Query • If a stack will be implemented using a linked list, is it better to assign the head or the tail as the top of the stack ? Why ?

  29. Double-Ended Queues • Data structure that allows insertion and deletion at the front and the rear end of the queue (pronounced as “deck”)

  30. Doubly linked lists • A node in a doubly linked list is like a node in a singly linked list except that, in addition to the next link, it also has a prev link to the previous node in the list. • Advantage over singly linked lists : deletions at the tail of the list can be done in constant time

  31. Doubly-Linked Lists

  32. Linked Lists - Query • What is the running time to search for an entry in a linked list ? Deleting from the tail ? Inserting from the head ?

More Related