CS201: Data Structures and Discrete Mathematics I Linked Lists, Stacks and Queues.

Slides:



Advertisements
Similar presentations
Data Structures Through C
Advertisements

Stacks, Queues, and Linked Lists
Chapter 3 – Lists A list is just what the name implies, a finite, ordered sequence of items. Order indicates each item has a position. A list of size 0.
Stack & Queues COP 3502.
Senem Kumova Metin Spring2009 STACKS AND QUEUES Chapter 10 in A Book on C.
§3 The Stack ADT 1. ADT A stack is a Last-In-First-Out (LIFO) list, that is, an ordered list in which insertions and deletions are.
Data Structures Lecture 13: QUEUES Azhar Maqsood NUST Institute of Information Technology (NIIT)
CSCE 3110 Data Structures & Algorithm Analysis Stacks and Queues Reading: Chap.3 Weiss.
Stacks & Their Applications COP Stacks  A stack is a data structure that stores information arranged like a stack.  We have seen stacks before.
ADVANCED DATA STRUCTURES AND ALGORITHM ANALYSIS Chapter 3 Lists, Stacks, and Queues.
Data Structures and Algorithms (60-254)
E.G.M. Petrakislists, stacks, queues1 Stacks Stack: restricted variant of list –Elements may by inserted or deleted from only one end  LIFO lists –Top:
Queues CS-212 Dick Steflik. Queues First In, First Out operation – FIFO As items are added they are chronologically ordered, items are removed in their.
ADT Stacks and Queues. Stack: Logical Level “An ordered group of homogeneous items or elements in which items are added and removed from only one end.”
Starting Out with C++: Early Objects 5/e © 2006 Pearson Education. All Rights Reserved Starting Out with C++: Early Objects 5 th Edition Chapter 18 Stacks.
Queues 4/14/2017 5:24 PM 5.2 Queues Queues Dr Zeinab Eid.
Data Structure Dr. Mohamed Khafagy.
 Abstract Data Type Abstract Data Type  What is the difference? What is the difference?  Stacks Stacks  Stack operations Stack operations  Parsing.
 Balancing Symbols 3. Applications
Copyright © 2014, 2008 Pearson Education, Inc. Publishing as Pearson Addison-Wesley Starting Out with C++ Early Objects Eighth Edition by Tony Gaddis,
E.G.M. Petrakisstacks, queues1 Stacks  Stack: restricted variant of list  elements may by inserted or deleted from only one end : LIFO lists  top: the.
Stacks, Queues & Deques CSC212.
Chapter 12 C Data Structures Acknowledgment The notes are adapted from those provided by Deitel & Associates, Inc. and Pearson Education Inc.
Stack: Linked List Implementation Push and pop at the head of the list New nodes should be inserted at the front of the list, so that they become the top.
© Copyright 1992–2004 by Deitel & Associates, Inc. and Pearson Education Inc. All Rights Reserved. Chapter 12 – Data Structures Outline 12.1Introduction.
ADT Stacks and Queues. Stack: Logical Level “An ordered group of homogeneous items or elements in which items are added and removed from only one end.”
Objectives of these slides:
Chapter 12 Data Structure Associate Prof. Yuh-Shyan Chen Dept. of Computer Science and Information Engineering National Chung-Cheng University.
CHAPTER 05 Compiled by: Dr. Mohammad Omar Alhawarat Stacks & Queues.
Review 1 Introduction Representation of Linear Array In Memory Operations on linear Arrays Traverse Insert Delete Example.
Prof. Amr Goneid, AUC1 Analysis & Design of Algorithms (CSCE 321) Prof. Amr Goneid Department of Computer Science, AUC Part R1. Elementary Data Structures.
DATA STRUCTURES AND ALGORITHMS Lecture Notes 4 Prepared by İnanç TAHRALI.
1 CSE 1342 Programming Concepts Lists. 2 Basic Terminology A list is a finite sequence of zero or more elements. –For example, (1,3,5,7) is a list of.
ELEMENTARY DATA STRUCTURES Stacks, Queues, and Linked Lists.
Data Structures (part 2). Stacks An Everyday Example Your boss keeps bringing you important items to deal with and keeps saying: “Put that last ‘rush’
IKI 10100: Data Structures & Algorithms Ruli Manurung (acknowledgments to Denny & Ade Azurat) 1 Fasilkom UI Ruli Manurung (Fasilkom UI)IKI10100: Lecture6.
CHAPTER 3 STACK CSEB324 DATA STRUCTURES & ALGORITHM.
Stacks And Queues Chapter 18.
1 Linked-list, stack and queue. 2 Outline Abstract Data Type (ADT)‏ Linked list Stack Queue.
Data Structures Chapter 6. Data Structure A data structure is a representation of data and the operations allowed on that data. Examples: 1.Array 2.Record.
1 Stacks & Queues CSC Stacks & Queues Stack: Last In First Out (LIFO). –Used in procedure calls, to compute arithmetic expressions etc. Queue: First.
CE 221 Data Structures and Algorithms Chapter 3: Lists, Stacks, and Queues - II Text: Read Weiss, §3.6 1Izmir University of Economics.
Data Structures. Abstract Data Type A collection of related data is known as an abstract data type (ADT) Data Structure = ADT + Collection of functions.
2005MEE Software Engineering Lecture 7 –Stacks, Queues.
Stacks A stack is a linear data structure that can be accessed only at one of its ends for storing and retrieving data LIFO (Last In First Out) structure.
Stacks Chapter 3 Objectives Upon completion you will be able to
CE 221 Data Structures and Algorithms Chapter 3: Lists, Stacks, and Queues - II Text: Read Weiss, §3.6 1Izmir University of Economics.
CC 215 DATA STRUCTURES LINKED LISTS Dr. Manal Helal - Fall 2014 Lecture 3 AASTMT Engineering and Technology College 1.
 In general, Queue is line of person waiting for their turn at some service counter like ticket window at cinema hall, at bus stand or at railway station.
Chapter 3 Lists, Stacks, Queues. Abstract Data Types A set of items – Just items, not data types, nothing related to programming code A set of operations.
Data Structure By Amee Trivedi.
Chapter 12 – Data Structures
Data Structures and Algorithms
Objectives In this lesson, you will learn to: Define stacks
Stacks and Queues.
Queues Queues Queues.
Stacks Stack: restricted variant of list
CS201: Data Structures and Discrete Mathematics I
CMSC 341 Lecture 5 Stacks, Queues
Queues.
Queues 11/22/2018 6:47 AM 5.2 Queues Queues Dr Zeinab Eid.
Stacks and Queues CSE 373 Data Structures.
Data Structures and Algorithms
Stacks and Queues 1.
CS210- Lecture 5 Jun 9, 2005 Agenda Queues
Stacks and Queues CSE 373 Data Structures.
CSE 373 Data Structures Lecture 6
Stacks and Queues CSE 373 Data Structures.
CSE 373 Data Structures Lecture 6
CSCS-200 Data Structure and Algorithms
Presentation transcript:

CS201: Data Structures and Discrete Mathematics I Linked Lists, Stacks and Queues

6/7/2014CS 201 Data Structure A construct that can be defined within a programming language to store a collection of data –one may store some data in an array of integers, an array of objects, or an array of arrays

6/7/2014CS 201 Abstract Data Type (ADT) Definition: a collection of data together with a set of operations on that data –specifications indicate what ADT operations do, but not how to implement them –data structures are part of an ADTs implementation Programmer can use an ADT without knowing its implementation.

6/7/2014CS 201 Typical Operations on Data Add data to a data collection Remove data from a data collection Ask questions about the data in a data collection. E.g., what is the value at a particular location, and is x in the collection?

6/7/2014CS 201 Why ADT Hide the unnecessary details Help manage software complexity Easier software maintenance Functionalities are less likely to change Localised rather than global changes

6/7/2014CS 201 Illustration

Linked Lists

6/7/2014CS 201 Lists List: a finite sequence of data items a1, a2, a3, …, an Lists are pervasive in computing –e.g. class list, list of chars, list of events Typical operations: –Creation –Insert / remove an element –Test for emptiness –Find an item/element –Current element / next / previous –Find k-th element –Print the entire list

6/7/2014CS 201 Array-Based List Implementation One simple implementation is to use arrays –A sequence of n-elements Maximum size is anticipated a priori. Internal variables: –Maximum size maxSize (m) –Current size curSize (n) –Current index cur –Array of elements listArray n curSize a1a1 a2a2 a3a3 anan listArray unused 012 n-1 m cur

6/7/2014CS 201 Inserting Into an Array While retrieval is very fast, insertion and deletion are very slow – Insert has to shift upwards to create gap a1a1 a2a2 a7a7 a8a8 a4a4 a5a5 a6a6 a3a3 Step 1 : Shift upwards 8 S ize arr 8 a1a1 a2a2 a3a3 a7a7 a8a8 Size arr a4a4 a5a5 a6a6 Example : insert(2, it, arr) Step 2 : Write into gap it Step 3 : Update Size 9

6/7/2014CS 201 Coding typedef struct { int arr[MAX]; int max; int size; } LIST void insert(int j, int it, LIST *pl) { // pre : 1<=j<=size+1 int i; for (i=pl->size; i>=j; i=i-1) // Step 1: Create gap { pl->arr[i+1]= pl->arr[i]; }; pl->arr[j]= it; // Step 2: Write to gap pl->size = pl->size + 1; // Step 3: Update size }

6/7/2014CS 201 Deleting from an Array Delete has to shift downwards to close gap of deleted item Step 1 : Close Gap 9 a1a1 a2a2 it a7a7 a8a8 size a5a5 a6a6 a3a3 a8a8 arr 9 a1a1 a2a2 it a7a7 a8a8 size a4a4 a5a5 a6a6 a3a3 arr Example: deleteItem(4, arr) Step 2 : Update Size 8 Not part of list

6/7/2014CS 201 Coding void delete(int j, LIST *pl) { // pre : 1<=j<=size for (i=j+1; i size; i=i+1) // Step1: Close gap { pl->arr[i-i]=pl->arr[i]; }; // Step 2: Update size pl->size = pl->size - 1; }

6/7/2014CS 201 Linked List Approach Main problem of array is the slow deletion/insertion since it has to shift items in its contiguous memory Solution: linked list where items need not be contiguous with nodes of the form Sequence (list) of four items can be represented by: itemnext aiai a1a1 a2a2 a3a3 a4a4 head represents null

Pointer-Based Linked Lists A node in a linked list is usually a struct struct Node { int item Node *next; }; //end struct A node is dynamically allocated Node *p; p = malloc(sizeof(Node)); A node 6/7/2014CS 201

Pointer-Based Linked Lists The head pointer points to the first node in a linked list If head is NULL, the linked list is empty –head=NULL head=malloc(sizeof(Node)) 6/7/2014CS 201

A Sample Linked List 6/7/2014CS 201

Traverse a Linked List Reference a node member with the -> operator p->item; A traverse operation visits each node in the linked list –A pointer variable cur keeps track of the current node for (Node *cur = head; cur != NULL; cur = cur->next) x = cur->item; 6/7/2014CS 201

Traverse a Linked List The effect of the assignment cur = cur->next 6/7/2014CS 201

Delete a Node from a Linked List Deleting an interior/last node prev->next=cur->next; Deleting the first node head=head->next; Return deleted node to system cur->next = NULL; free(cur); cur=NULL; 6/7/2014CS 201

Delete a Node from a Linked List Deleting a node from a linked list Deleting the first node 6/7/2014CS 201

Insert a Node into a Linked List To insert a node between two nodes newPtr->next = cur; prev->next = newPtr; Inserting a new node into a linked list CS 201

Insert a Node into a Linked List To insert a node at the beginning of a linked list newPtr->next = head; head = newPtr; Inserting at the beginning of a linked list CS 201

Insert a Node into a Linked List Inserting at the end of a linked list is not a special case if cur is NULL newPtr->next = cur; prev->next = newPtr; Inserting at the end of a linked list CS 201

Look up BOOLEAN lookup (int x, Node *L) { if (L == NULL) return FALSE else if (x == L->item) return TRUE else return lookup(x, L-next); } 6/7/2014CS 201

An ADT Interface for List Functions –isEmpty –getLength –insert –delete –Lookup –… Data Members –head –Size Local variables to member functions –cur –prev 6/7/2014CS 201

6/7/2014CS 201 Doubly Liked Lists Frequently, we need to traverse a sequence in BOTH directions efficiently Solution : Use doubly-linked list where each node has two pointers next forward traversal Doubly Linked List. x1x1 x4x4 x2x2 head x3x3 backward traversal prev

6/7/2014CS 201 Circular Linked Lists May need to cycle through a list repeatedly, e.g. round robin system for a shared resource Solution : Have the last node point to the first node x1x1 x2x2 xnxn... Circular Linked List. head

Stacks

6/7/2014CS 201 What is a Stack? A stack is a list with the restriction that insertions and deletions can be performed in only one position, namely, the end of the list, called the top. The operations: push (insert) and pop (delete) pop push(o) Top

6/7/2014CS 201 Stack ADT Interface The main functions in the Stack ADT are (S is the stack) boolean isEmpty();// return true if empty boolean isFull(S);// return true if full void push(S, item); // insert item into stack void pop(S); // remove most recent item void clear(S);// remove all items from stack Item top(S); // retrieve most recent item Item topAndPop(S); // return & remove most recent item

6/7/2014CS 201 Sample Operation Stack S = malloc(sizeof(stack)); push(S, a); push(S, b); push(S, c); d=top(S); pop(S); push(S, e); pop(S); s abc top e d

6/7/2014CS 201 Implementation by Linked Lists Can use a Linked List as implementation of stack Top of Stack = Front of Linked-List StackLL lst a1a1 a2a2 a3a3 a4a4 head LinkedListItr

6/7/2014CS 201 Code struct Node { int element; Node * next; }; typedef struct Node * STACK;

6/7/2014CS 201 More code

More Code 6/7/2014CS 201

6/7/2014CS 201 Implementation by Array use Array with a top index pointer as an implementation of stack E F A B C D top StackAr arr A

6/7/2014CS 201 Code

6/7/2014CS 201 More code

6/7/2014CS 201 More code

Effects 6/7/2014CS 201

6/7/2014CS 201 Applications Many application areas use stacks: –line editing –bracket matching –postfix calculation –function call stack

6/7/2014CS 201 Line Editing A line editor would place characters read into a buffer but may use a backspace symbol (denoted by ) to do error correction Refined Task –read in a line –correct the errors via backspace –print the corrected line in reverse Input : Corrected Input : Reversed Output : abc_defgh 2klpqr wxyz abc_defg2klpwxyz zyxwplk2gfed_cba

6/7/2014CS 201 The Procedure Initialize a new stack For each character read: –if it is a backspace, pop out last char entered –if not a backspace, push the char into stack To print in reverse, pop out each char for output Input : fgh r yz Corrected Input : Reversed Output : fyz zyf Stack f g h r y z

6/7/2014CS 201 Bracket Matching Problem Ensures that pairs of brackets are properly matched An Example: {a,(b+f[4])*3,d+f[5]} Bad Examples: (..)..)// too many closing brackets (..(..)// too many open brackets [..(..]..)// mismatched brackets

6/7/2014CS 201 Informal Procedure Initialize the stack to empty For every char read if open bracket then push onto stack if close bracket, then return & remove most recent item from the stack if doesnt match then flag error if non-bracket, skip the char read Example {a,(b+f[4])*3,d+f[5]} Stack { ( [ ) } ] [ ]

6/7/2014CS 201 Postfix Calculator Computation of arithmetic expressions can be efficiently carried out in Postfix notation with the help of a stack. Infix - arg1 op arg2 Prefix - op arg1 arg2 Postfix - arg1 arg2 op (2*3)+4 2*(3+4) * 2*3+4 infix 2 3 * 4 + postfix

6/7/2014CS 201 Informal Procedure Initialise stack S For each item read. If it is an operand, push on the stack If it is an operator, pop arguments from stack; perform operation; push result onto the stack Stack Expr * push(S, 2) push(S, 3) push(S, 4) arg2=topAndPop(S) arg1=topAndPop(S) push(S, arg1+arg2) arg2=topAndPop(S) arg1=topAndPop(S) push(S, arg1*arg2) 3+4=7 2*7=14

6/7/2014CS 201 Summary The ADT stack operations have a last- in, first-out (LIFO) behavior Stack has many applications –algorithms that operate on algebraic expressions –a strong relationship between recursion and stacks exists Stack can be implemented using arrays or linked lists

Queues

6/7/2014CS 201 What is a Queue? Like stacks, queues are lists. With a queue, however, insertion is done at one end whereas deletion is done at the other end. Queues implement the FIFO (first-in first-out) policy. E.g., a printer/job queue! Two basic operations of queues: –dequeue: remove an item/element from front –enqueue: add an item/element at the back dequeueenqueue

6/7/2014CS 201 Queue ADT Queues implement the FIFO (first-in first-out) policy –An example is the printer/job queue! enqueue(o) dequeue() isEmpty() getFront() createQueue()

6/7/2014CS 201 Sample Operation Queue *Q; enqueue(Q, a); enqueue(Q, b); enqueue(Q, c); d=getFront(Q); dequeue(Q); enqueue(Q, e); dequeue(Q); q front back abce d

6/7/2014CS 201 Queue ADT interface The main functions in the Queue ADT are (Q is the queue) void enqueue(o, Q) // insert o to back of Q void dequeue(Q); // remove oldest item Item getFront(Q); // retrieve oldest item boolean isEmpty(Q);// checks if Q is empty boolean isFull(Q);// checks if Q is full void clear(Q);// make Q empty }

6/7/2014CS 201 Implementation of Queue (Linked List) Can use LinkedListItr as underlying implementation of Queues a1a1 a2a2 a3a3 a4a4 head tail Queue lst LinkedList addTail

6/7/2014CS 201 Code struct Node { int element; Node * next; }; struct QUEUE { Node * front; Node * rear; };

6/7/2014CS 201 More code

6/7/2014CS 201 CELL is a list node

6/7/2014CS 201 Implementation of Queue (Array) use Array with front and back pointers as implementation of queue Queue arr A B C D E F G front back

6/7/2014CS 201 Circular Array To implement queue, it is best to view arrays as circular structure A B C D E F G front back front back A B C D E F G Circular view of arrays.

6/7/2014CS 201 How to Advance Both front & back pointers should make advancement until they reach end of the array. Then, they should re-point to beginning of the array front = adv(front); back = adv(back); int adv(int p) { return ((p+1) % maxsize); } Alternatively, use modular arithmetic: mod operator int adv(int p) { int r = p+1; if (r<maxsize) return r; else return 0; } upper bound of the array

6/7/2014CS 201 Sample Queue *Q; enqueue(Q, a); enqueue(Q, b); enqueue(Q, c); dequeue(Q); enqueue(Q, d); enqueue(Q, e); dequeue(Q); a Q F=front B=back F B bc d F BBB FF B B e

6/7/2014CS 201 Checking for Full/Empty State What does (F==B) denote? F B Queue Empty State c d e B F f Queue Full State size 0 4 c d e B F Alternative - Leave a Deliberate Gap! No need for size field. Full Case : (adv(B)==F)

6/7/2014CS 201 Summary The definition of the queue operations gives the ADT queue first-in, first-out (FIFO) behavior The queue can be implemented by linked lists or by arrays There are many applications –Printer queues, –Telecommunication queues, –Simulations, –Etc.