Sie sind auf Seite 1von 43

Chapter 6 stack

` ` ` ` ` `

Learn about stacks Examine various stack operations Learn how to implement a stack as an array Learn how to implement a stack as a linked list Discover stack applications Learn to use a stack to remove recursion

Data Structures Using Java

Definition:
list of homogeneous elements addition and deletion of elements occurs only at one end, called the top of the stack

` ` `

Last In First Out (LIFO) data structure Used to implement method calls Used to convert recursive algorithms (especially not tail recursive) into nonrecursive algorithms

Data Structures Using Java

Last In First Out (LIFO) data structure


Top element of stack is last element to be added to stack Elements added and removed from one end (top) Item added last are removed first

Data Structures Using Java

Data Structures Using Java

Data Structures Using Java

` ` `

initializeStack: Initializes the stack to an empty state isEmptyStack: Checks whether the stack is empty. If empty, it returns true; otherwise, it returns false isFullStack: Checks whether the stack is full. If full, it returns true; otherwise, it returns false

Data Structures Using Java

push:
Add new element to the top of the stack The input consists of the stack and the new element Prior to this operation, the stack must exist and must not be full

Data Structures Using Java

top: Returns the top element of the stack. Prior to this operation, the stack must exist and must not be empty pop: Removes the top element of the stack. Prior to this operation, the stack must exist and must not be empty

Data Structures Using Java

10

Data Structures Using Java

11

Data Structures Using Java

12

public void initializeStack() { for(int i = 0; i < stackTop; i++) list[i] = null; stackTop = 0; }//end initializeStack

Data Structures Using Java 13

public boolean isEmptyStack() { return(stackTop == 0); }//end isEmptyStack

public boolean isFullStack() { return(stackTop == maxStackSize); }//end isFullStack

Data Structures Using Java 14

Data Structures Using Java 15

public void push(DataElement newItem) throws StackOverflowException { if(isFullStack()) throw new StackOverflowException(); list[stackTop] = newItem.getCopy(); //add newItem at the //top of the stack stackTop++; //increment stackTop }//end push

Data Structures Using Java

16

public DataElement top() throws StackUnderflowException { if(isEmptyStack()) throw new StackUnderflowException(); DataElement temp = list[stackTop - 1].getCopy(); return temp; }//end top

Data Structures Using Java

17

public void pop() throws StackUnderflowException { if(isEmptyStack()) throw new StackUnderflowException(); stackTop--; //decrement stackTop list[stackTop] = null; }//end pop

Data Structures Using Java

18

Data Structures Using Java 19

private void copy(StackClass otherStack) { list = null; System.gc(); maxStackSize = otherStack.maxStackSize; stackTop = otherStack.stackTop; list = new DataElement[maxStackSize]; //copy otherStack into this stack for(int i = 0; i < stackTop; i++) list[i] = otherStack.list[i].getCopy(); }//end copy

Data Structures Using Java

20

//constructor with a parameter public StackClass(int stackSize) { if(stackSize <= 0) { System.err.println(The size of the array to implement + the stack must be positive.); System.err.println(Creating an array of size 100.); maxStackSize = 100; } else maxStackSize = stackSize; //set the stack size to //the value specified by //the parameter stackSize stackTop = 0; //set stackTop to 0 list = new DataElement[maxStackSize]; //create the array }//end constructor

Data Structures Using Java

21

//default constructor public StackClass() { maxStackSize = 100; stackTop = 0; //set stackTop to 0 list = new DataElement[maxStackSize]; //create array }//end default constructor

Data Structures Using Java

22

public StackClass(StackClass otherStack) { copy(otherStack); }//end copy constructor

public void copyStack(StackClass otherStack) { if(this != otherStack) //avoid self-copy copy(otherStack); }//end copyStack

Data Structures Using Java

23

Input The program reads an input file consisting of each students GPA, followed by the students name. Sample data is: 3.8 3.6 3.9 3.7 3.4 3.9 3.4 Lisa John Susan Kathy Jason David Jack
Data Structures Using Java 24

1. 2. 3. 4. 5.

Declare the variables Create a DecimalFormat object to output a decimal number to two decimal places Open the input file If the input file does not exist, exit the program Read the next input line

Data Structures Using Java

25

6.

while (not end of file) { 6.a. Tokenize the input line 6.b. Get the next GPA 6.c. Get the next name 6.d. if (GPA > highestGPA) { 6.d.i initialize stack 6.d.ii push(stack, student name) 6.d.iii highestGPA = GPA } 6.e. else if(GPA is equal to highestGPA) push(stack, student name) 6.f Read the next input line }

Data Structures Using Java

26

7. 8.

Output the highest GPA. Output the names of the students having the highest GPA.

Data Structures Using Java

27

Input File (Ch6_HighestGPAData.txt)


3.4 3.2 2.5 3.4 3.8 3.8 3.6 3.5 3.8 3.7 3.9 3.8 3.9 2.7 3.9 3.4 Holt Bolt Colt Tom Ron Mickey Pluto Donald Cindy Dome Andy Fox Minnie Goofy Doc Danny

Data Structures Using Java

28

Output Highest GPA = 3.90 The students holding the highest GPA are: Doc Minnie Andy

Data Structures Using Java

29

Empty linked stack

Nonempty linked stack

Data Structures Using Java

30

public LinkedStackClass() { stackTop = null; }

Data Structures Using Java

31

public void initializeStack() { stackTop = null; }//end initializeStack public boolean isEmptyStack() { return(stackTop == null); } public boolean isFullStack() { return false; }
Data Structures Using Java 32

Stack before the push operation

Stack and newNode

Data Structures Using Java

33

Stack after the statement newNode.link = stackTop; executes

Stack after the statement stackTop = newNode; executes

Data Structures Using Java

34

public DataElement top() throws StackUnderflowException { if(stackTop == null) throw new StackUnderflowException(); return stackTop.info.getCopy(); }//end top

Data Structures Using Java

35

Stack after the statement


stackTop = stackTop.link; executes

Stack before the pop operation

Stack after popping the top element


Data Structures Using Java 36

` `

Prefix/Polish Notation Suffix/Postfix/Reverse Polish Notation

Data Structures Using Java

37

Data Structures Using Java

38

Stack after pushing 6

Stack after retrieving the top two elements and popping twice

Stack after pushing 3

Stack after pushing the result of op1 + op2, which is 9


Data Structures Using Java 39

Stack after pushing 2

Stack after pushing the result of op1 * op2, which is 18

Stack after retrieving the top two elements and popping twice

Stack after popping the element


40

Data Structures Using Java

` ` ` `

Java provides a class to implement a stack in a program The name of the Java class defining a stack is Stack The class Stack is contained in the package java.util Table 6-3 lists the members of the class Stack

Data Structures Using Java

41

Data Structures Using Java

42

` ` ` ` ` ` `

Stack Data Structure Last In First Out (LIFO) Stacks Implemented as Arrays Stacks Implemented as Linked Lists Postfix Expression Calculator Nonrecursive Algorithm to Print Linked List Java class Stack

Data Structures Using Java

43

Das könnte Ihnen auch gefallen