Chapter 4 Stacks www.asyrani.com.

Slides:



Advertisements
Similar presentations
CSCE 3110 Data Structures & Algorithm Analysis Stacks and Queues Reading: Chap.3 Weiss.
Advertisements

Stacks & Their Applications COP Stacks  A stack is a data structure that stores information arranged like a stack.  We have seen stacks before.
C o n f i d e n t i a l Developed By Nitendra NextHome Subject Name: Data Structure Using C Title : Overview of Stack.
Stacks.
Infix, Postfix, Prefix.
1 Introduction to Stacks What is a Stack? Stack implementation using array. Stack implementation using linked list. Applications of Stacks.
30-Jun-15 Stacks. What is a stack? A stack is a Last In, First Out (LIFO) data structure Anything added to the stack goes on the “top” of the stack Anything.
Ali Abdul Karem Habib Kufa University / mathematics & Science Of Computer.
Stack  A stack is a linear data structure or abstract data type for collection of items, with the restriction that items can be added one at a time and.
Data Structures Using C++ 2E Chapter 7 Stacks. Data Structures Using C++ 2E2 Objectives Learn about stacks Examine various stack operations Learn how.
Ceng-112 Data Structures ITurgut Kalfaoglu 1 Chapter 3 Stacks.
Implementing Stacks Ellen Walker CPSC 201 Data Structures Hiram College.
Data Structures: CSCI 362 – Stack Implementation Data Structures: CSCI 362 – Stack Implementation lecture notes adapted from Data Structures with C++ using.
1 Stacks – Chapter 3 A stack is a data structure in which all insertions and deletions of entries are made at one end, called the top of the stack. Alternatively,
Chapter 7 Stacks Dr. Youssef Harrath
SAK 3117 Data Structures Chapter 3: STACKS. Objective To introduce: Stack concepts Stack operations Stack applications CONTENT 3.1 Introduction 3.2 Stack.
Data Structures. The Stack: Definition A stack is an ordered collection of items into which new items may be inserted and from which items may be deleted.
DATA STRUCTURE & ALGORITHMS CHAPTER 3: STACKS. 2 Objectives In this chapter, you will: Learn about stacks Examine various stack operations Discover stack.
COP3530 Data Structures600 Stack Stack is one the most useful ADTs. Like list, it is a collection of data items. Supports “LIFO” (Last In First Out) discipline.
Recursion Textbook chapter Recursive Function Call a recursive call is a function call in which the called function is the same as the one making.
Stacks. A stack is a data structure that holds a sequence of elements and stores and retrieves items in a last-in first- out manner (LIFO). This means.
FIST, Multi Media University Lecture 5 Stack (Array Implementation) Queue (Array Implementation )
1 CS 132 Spring 2008 Chapter 7 Stacks Read p Problems 1-7.
C++ Programming: From Problem Analysis to Program Design, Fourth Edition Chapter 19: Stacks and Queues (part 2)
C++ Programming: Program Design Including Data Structures, Fourth Edition Chapter 18: Stacks and Queues (part 2)
 STACK STACK  STACK OPERATIONS STACK OPERATIONS  PUSH ALGORITHM PUSH ALGORITHM  POP ALGORITHM POP ALGORITHM  USES OF STACK USES OF STACK  THE TOWER.
CHP-3 STACKS.
Fall 2006 METU EEEEE 441 S. Ece (GURAN) SCH MIDT EE 441 Data Structures Lecture 6 Stacks and Queues.
M180: Data Structures & Algorithms in Java Stacks Arab Open University 1.
1 Data Structures and Algorithms Stack. 2 The Stack ADT Introduction to the Stack data structure Designing a Stack class using dynamic arrays Linked Stacks.
CC 215 DATA STRUCTURES MORE ABOUT STACK APPLICATIONS Dr. Manal Helal - Fall 2014 Lecture 6 AASTMT Engineering and Technology College 1.
Applications of Stack Maitrayee Mukerji. Stacks Last In First Out (LIFO List) ◦ FILO? Insertions and Deletions from the same end called the Top Push(),
Lecture - 6(Stacks) On Data structures. Prepared by, Jesmin Akhter, Lecturer, IIT,JU Lecture Outline What is a Stack? Array implementation of stacks Operations.
1 Data Structures and Algorithms Stack. 2 The Stack ADT Introduction to the Stack data structure Designing a Stack class using dynamic arrays Linked Stacks.
CSCE 3110 Data Structures & Algorithm Analysis
Data Structures Using C++ 2E
Stacks.
Introduction Of Stack.
Stacks Stacks.
Revised based on textbook author’s notes.
DATA STRUCTURES AND OBJECT ORIENTED PROGRAMMING IN C++
Dr. Bernard Chen Ph.D. University of Central Arkansas
Stacks.
Objectives In this lesson, you will learn to: Define stacks
Cinda Heeren / Geoffrey Tien
Stacks.
Copyright ©2012 by Pearson Education, Inc. All rights reserved
STACKS.
Stacks Stack: restricted variant of list
Stacks Chapter 4.
Algorithms and Data Structures
STACK CHAPTER 03 Developed By :- Misha Ann Alexander Data Structures.
Visit for more Learning Resources
PART II STACK APPLICATIONS
Stack.
CSCE 3110 Data Structures & Algorithm Analysis
CSCE 3110 Data Structures & Algorithm Analysis
Stacks Chapter 5 Adapted from Pearson Education, Inc.
Popping Items Off a Stack Lesson xx
Stacks 12/7/2018 Presentation for use with the textbook Data Structures and Algorithms in Java, 6th edition, by M. T. Goodrich, R. Tamassia, and M. H.
Cs212: Data Structures Computer Science Department Lecture 6: Stacks.
Stacks Data structure Elements added, removed from one end only
Stacks.
CE 221 Data Structures and Algorithms
Introduction to Stacks
Stack.
Introduction to Stacks
Stacks.
Chapter 7 (continued) © 2011 Pearson Addison-Wesley. All rights reserved.
Presented by : Aman Gupta PGT CS KV No.1, Narimedu, Madurai
Presentation transcript:

Chapter 4 Stacks www.asyrani.com

This is stacks A data structure in which the elements are added and removed from the top only; a Last In First Out (LIFO) data structure.

Why People use stacks? Say you are writing a notepad application. A good use for a stack would be the undo/redo feature. Every time the user enters something, save the state (in this case, the text) on a stack and if you need to reverse something, just pop it off the top of the undo stack and push it onto the redo stack. Stacks are also used for reversing things. If you push something, say a String onto a Stack one character at a time, and then construct a String from the members popped off the Stack, then the String is reversed.

Last In First Out B A C B A D C B A E D C B A top D C B A top top top

Stacks Advantages Disadvantages Advantages Disadvantages Simplest one Easy to implement Fast operation Insertion/deletion from one place Disadvantages Only can be inserted/removed from the top Problem when accessing “the one that on the top” Recursive Function

Basic operation

BASIC OPERATION InitializeStacks – initializes the stack to an empty state DestroyStack – removes all the elements from the state IsEmptyStack – Check the stack whether is empty or not IsFullStack – Check whether the stack is full or not

Push and Pop PUSH – You add something at the top POP – You remove something at the top

Push Operation of Stacks

Pop Operation

Simple Example

Let us Implement Stacks First, as usual we need to define some maximum stack content to put our data

Let us Implement Stacks Then, we use Class system called “stack”

Let us Implement Stacks We declare a private inside “stack” class arr[MAX] : this is where we put all the data top : we assign our “leader” here.

Let us Implement Stacks Then, we declare public First we put some constructor. Inside this constructor I’ve put a value top = -1 to indicate that stack is empty for the first time.

Let us Implement Stacks Now, push operation. - We go through one by one here

Let us Implement Stacks 1st – This is where this operation get a value which is integer type So, inside main function, we will call using “push(40)” for example So, 40 is an integer

Let us Implement Stacks Top++, we increment first because this is top operation, so we updates the current position from -1 to 0. (the computer always starts with “0” and not “1”. So, top is 0 right now

Let us Implement Stacks Then, we check whether top is still lower than MAX. If the top still lower than MAX, we continue to insert data at the position according to the top position arr[0] = 40 (recall that top = 0).

Let us Implement Stacks If it is not, we create a message to display “Stack Full”. Remember to set the top back to top– since we already add top++ at first line of this function.

Example push(40) top++ top = 6 4 2 12 32 54 5 top = 6 (before this top is equal to 5, top = 5)

Example push(40) if(top<MAX) { arr[top]=a; } 2 12 32 54 5 if(top<MAX) { arr[top]=a; } Yes, top is still lower than MAX which is 10. So, arr[6] = 40 (since we receive a = 40) top = 6

Example push(40) else { cout<<"STACK FULL!!"<<endl; top--; 212 21 23 40 4 2 12 32 54 5 top = 9 else { cout<<"STACK FULL!!"<<endl; top--; } - But if top is equal to 10 (already full after top++), then we put message STACK FULL, and set it back to top--

Let us Implement Stacks Now, pop operation. We use function type integer (not void) - We go through one by one here

Let us Implement Stacks We check whether top is still -1(empty) - We return NULL is we still do some pop() at the main function

Let us Implement Stacks If it is not We give any topmost data inside arr[top] to local variable int data Then, we set the arr[top] = NULL since we actually remove the data We set back the top to top--. Example if top = 5, then top now is 4. We will return the int data

Example (pop) int data = arr[top] - int data = arr[7]=5 5 64 4 2 12 32 54 top = 7 int data = arr[top] - int data = arr[7]=5

Example (pop) arr[top]= NULL - arr[7] = NOTHING INSIDE 64 4 2 12 32 54

Example (pop) 64 4 2 12 32 54 5 top = 7 top-- - Top = 6

Example (pop) return data 64 4 2 12 32 54 5 top = 7 return data - We return data = 5 to any function that call or want to know what value that the push has throw away.

Full source code

#include <iostream> using namespace std; #define MAX 10 // MAXIMUM STACK CONTENT class stack { private: int arr[MAX]; // Contains all the Data int top; //Contains location of Topmost Data pushed onto Stack public: stack() //Constructor top=-1; //Sets the Top Location to -1 indicating an empty stack }

void push(int a) // Push ie void push(int a) // Push ie. Add Value Function { top++; // increment to by 1 if(top<MAX) arr[top]=a; //If Stack is Vacant store Value in Array } else cout<<"STACK FULL!!"<<endl; top--;

int pop() // Delete Item. Returns the deleted item { if(top==-1) cout<<"STACK IS EMPTY!!!"<<endl; return NULL; } else int data=arr[top]; //Set Topmost Value in data arr[top]=NULL; //Set Original Location to NULL top--; // Decrement top by 1 return data; // Return deleted item };

int main() { stack a; a.push(3); cout<<"3 is Pushed\n"; a.push(10); cout<<"10 is Pushed\n"; a.push(1); cout<<"1 is Pushed\n\n"; cout<<a.pop()<<" is Popped\n"; return 0; }

APPLICATION

ALGORITHM CONVERTING DECIMAL TO BINARY

How it works Let say you have a number: 148 Is 148 >= 128? Yes, so the 128 bit must be 1. 148 – 128 = 20, which means we need to find bits worth 20 more. Is 20 >= 64? No, so the 64 bit must be 0. Is 20 >= 32? No, so the 32 bit must be 0. Is 20 >= 16? Yes, so the 16 bit must be 1. 20 – 16 = 4, which means we need to find bits worth 4 more.

How it works Let say you have a number: 148 Is 4 >= 8? No, so the 8 bit must be 0. Is 4 >= 4? Yes, so the 4 bit must be 1. 4 – 4 = 0, which means all the rest of the bits must be 0.

How it works Let say you have a number: 148 148 = (1 * 128) + (0 * 64) + (0 * 32) + (1 * 16) + (0 * 8) + (1 * 4) + (0 * 2) + (0 * 1) = 1001 0100

Coding Enter the decimal number

Coding While getnumber is still bigger than “0”, we will running this loop

Coding This is to get the remaining balance after division

Coding Push the balance (which is the balance of division) into stack

Coding Save in public array too

Coding Update the counter

Coding Get the result of division using integer (not double/floating number)

Coding Display purpose

Source http://www.learncpp.com/cpp-tutorial/37-converting-between-binary-and-decimal/

converting infix to postfix and prefix notation

What is… Infix is A*B Postfix is AB* Prefix is *AB

Infix to Postfix Let use an example

Infix to postfix Process a Postfix String At first, “a” is found and inserted into Postfix String Our Stack

Infix to postfix Process + a Postfix String Then, we found “+” So put it into Our Stack Our Stack

Infix to postfix Process + ab Postfix String Next, we scanned another one “b”. Put it into Postfix String Our Stack

Infix to postfix Process * + ab Postfix String Then, we found “ * ”. We put into Our Stack Our Stack

Infix to postfix Process * + abc Postfix String We found “C”. So put into Postfix String Our Stack

Infix to postfix Process - + abc* Postfix String Next character scanned is '-'. The topmost character in the stack is '*' which has a higher precedence than '-'. Thus '*' will be popped out from the stack and added to the Postfix string. Our Stack

Infix to postfix Process - abc*+ Postfix String Even now the stack is not empty. Now the topmost element of the stack is '+' which has equal priority to '-'. So pop the '+' from the stack and add it to the Postfix string. The '-' will be pushed to the stack. Our Stack

Infix to postfix Process - abc*+e Postfix String We found “e”. So put into Postfix String Our Stack

Infix to postfix Process abc*+e- Postfix String Nothing to scan. So, empty Our Stack and put “ – ” into Postfix String Our Stack

But How to program??? Let’s code

Our main components We must have a function to get a input Then, we need to have a function to read it in character form And, we need a function to convert it into postfix Of course last one is we want to display the output

Our main components

Our Class items

Our Class items We must have two array of stack (i) One for the *, / , +, and – (ii) Another one for alphabetic

Our Class items We need to also have two pointer based data type (char)

Our Class items Set our initial value

Our Class items Set our expression

Our Class items Stack function (push and pop)

Our Class items Convert function

Our Class items Priority function (we will call this inside convert function)

CONCLUSION OF IN/PRE/POST-FIX

Source http://scriptasylum.com/tutorials/infix_postfix/algorithms/infix-postfix/index.htm http://electrofriends.com/source-codes/software-programs/cpp-programs/cpp-data-structure/c-program-to-convert-an-expression-from-infix-form-to-postfix-form/ http://www.cs.man.ac.uk/~pjj/cs212/fix.html

A Legend The Towers of Hanoi In the great temple of Brahma in Benares, on a brass plate under the dome that marks the center of the world, there are 64 disks of pure gold that the priests carry one at a time between these diamond needles according to Brahma's immutable law: No disk may be placed on a smaller disk. In the begging of the world all 64 disks formed the Tower of Brahma on one needle. Now, however, the process of transfer of the tower from one needle to another is in mid course. When the last disk is finally in place, once again forming the Tower of Brahma but on a different needle, then will come the end of the world and all will turn to dust.

The Towers of Hanoi A Stack-based Application GIVEN: three poles a set of discs on the first pole, discs of different sizes, the smallest discs at the top GOAL: move all the discs from the left pole to the right one. CONDITIONS: only one disc may be moved at a time. A disc can be placed either on an empty pole or on top of a larger disc.

Towers of Hanoi

Towers of Hanoi

Towers of Hanoi

Towers of Hanoi

Towers of Hanoi

Towers of Hanoi

Towers of Hanoi

Towers of Hanoi

addition two integer numbers