Basic Data Structures (Stacks). 2 Basic Data Structures Stacks Queues Lists.

29
Basic Data Structures (Stacks) Basic Data Structures (Stacks)

description

3 Overview of Stacks What is a Stack? Operations on a Stack –push, pop –initialize –status: empty, full Implementation of a Stack. Example: Reversing a sequence.

Transcript of Basic Data Structures (Stacks). 2 Basic Data Structures Stacks Queues Lists.

Page 1: Basic Data Structures (Stacks). 2 Basic Data Structures Stacks Queues Lists.

Basic Data Structures (Stacks)Basic Data Structures (Stacks)

Page 2: Basic Data Structures (Stacks). 2 Basic Data Structures Stacks Queues Lists.

2

Basic Data StructuresBasic Data Structures

• Stacks• Queues• Lists

Page 3: Basic Data Structures (Stacks). 2 Basic Data Structures Stacks Queues Lists.

3

Overview of StacksOverview of Stacks

• What is a Stack?• Operations on a Stack

– push, pop– initialize– status: empty, full

• Implementation of a Stack.• Example: Reversing a sequence.

Page 4: Basic Data Structures (Stacks). 2 Basic Data Structures Stacks Queues Lists.

4

A StackA Stack

Top

Items on the Stack

Page 5: Basic Data Structures (Stacks). 2 Basic Data Structures Stacks Queues Lists.

5

PushPush

Top

After

Top

Before

Page 6: Basic Data Structures (Stacks). 2 Basic Data Structures Stacks Queues Lists.

6

PopPop

Top

Before After

Top

This comes off the stack

Page 7: Basic Data Structures (Stacks). 2 Basic Data Structures Stacks Queues Lists.

7

OperationsOperations

• Initialize the Stack.• Pop an item off the top of the stack.• Push an item onto the top of the stack.• Is the Stack empty?• Is the Stack full?• Clear the Stack• Determine Stack Size

Page 8: Basic Data Structures (Stacks). 2 Basic Data Structures Stacks Queues Lists.

8

Stack PropertiesStack Properties

• Sequence of items, where insertions and deletions are done at the top.

• Main operations are pop and push.• Last-In First Out (LIFO).• Used when calling functions.• Used when implementing recursion.

Page 9: Basic Data Structures (Stacks). 2 Basic Data Structures Stacks Queues Lists.

9

ImplementationImplementation

Top

index 0

12:

array(upside-down)

Page 10: Basic Data Structures (Stacks). 2 Basic Data Structures Stacks Queues Lists.

10

ImplementationImplementation

Topfloat entry[MAXSTACK];

int top; 0

12:

Page 11: Basic Data Structures (Stacks). 2 Basic Data Structures Stacks Queues Lists.

11

#ifndef STACKH#define STACKH#include <stdbool.h>#define MAXSTACK 20

struct StackRec{ int top; float entry[MAXSTACK];};

typedef struct StackRec Stack;

void intializeStack(Stack* stackPtr);bool stackEmpty(const Stack* stackPtr);bool stackFull(const Stack* stackPtr);void push(Stack* stackPtr, float item);float pop(Stack* stackPtr);

#endif

Page 12: Basic Data Structures (Stacks). 2 Basic Data Structures Stacks Queues Lists.

12

#define MAXSTACK 20

struct StackRec{ int top; float entry[MAXSTACK];};

typedef struct StackRec Stack;

Stack:

.

.

.

entry:

top:

Page 13: Basic Data Structures (Stacks). 2 Basic Data Structures Stacks Queues Lists.

13

#include <stdio.h>#include <stdlib.h>#include “stack.h”

void initializeStack(Stack* stackPtr){ stackPtr -> top = -1;}

top:

.

.

.

entry:

Stack:

addr of Stack

stackPtr:

-1

Page 14: Basic Data Structures (Stacks). 2 Basic Data Structures Stacks Queues Lists.

14

bool stackEmpty(const Stack* stackPtr){ if (stackPtr-> top < 0) { return true; } else { return false; }}

Page 15: Basic Data Structures (Stacks). 2 Basic Data Structures Stacks Queues Lists.

15

bool stackFull(const Stack* stackPtr){ if (stackPtr -> top >= MAXSTACK-1) { return true; } else { return false; }}

Page 16: Basic Data Structures (Stacks). 2 Basic Data Structures Stacks Queues Lists.

16

void push(Stack* stackPtr, float item){ if (stackFull(stackPtr)) { fprintf(stderr, “Stack is full\n”); exit(1); } else { stackPtr-> top++; stackPtr-> entry[stackPtr-> top] = item; }}

Page 17: Basic Data Structures (Stacks). 2 Basic Data Structures Stacks Queues Lists.

17

float pop(Stack* stackPtr){ float item;

if (stackEmpty(stackPtr)) { fprintf(stderr, “Stack is empty\n”); exit(1); } else { item = stackPtr-> entry[stackPtr-> top]; stackPtr-> top--; }

return item;}

Page 18: Basic Data Structures (Stacks). 2 Basic Data Structures Stacks Queues Lists.

18

Take a sequence:

Then pop each number off the stack

Reversing a SequenceReversing a Sequence

-1.5 2.3 6.7

Push onto a stack one number at a time.

Page 19: Basic Data Structures (Stacks). 2 Basic Data Structures Stacks Queues Lists.

19

-1.5 2.3 6.7

Push onto a stack one number at a time.

Reversing a SequenceReversing a Sequence

Top

Page 20: Basic Data Structures (Stacks). 2 Basic Data Structures Stacks Queues Lists.

20

2.3 6.7

Push onto a stack one number at a time.

-1.5

Reversing a SequenceReversing a Sequence

Top

Page 21: Basic Data Structures (Stacks). 2 Basic Data Structures Stacks Queues Lists.

21

6.7

Push onto a stack one number at a time.

2.3-1.5

Reversing a SequenceReversing a Sequence

Top

Page 22: Basic Data Structures (Stacks). 2 Basic Data Structures Stacks Queues Lists.

22

Push onto a stack one number at a time.

2.3-1.5

6.7

Reversing a SequenceReversing a Sequence

Top

Page 23: Basic Data Structures (Stacks). 2 Basic Data Structures Stacks Queues Lists.

23

2.3-1.5

6.7

Reversing a SequenceReversing a Sequence

Top

Then pop each number off the stack

Page 24: Basic Data Structures (Stacks). 2 Basic Data Structures Stacks Queues Lists.

24

2.3-1.5

Reversing a SequenceReversing a Sequence

Top

Then pop each number off the stack

6.7

Page 25: Basic Data Structures (Stacks). 2 Basic Data Structures Stacks Queues Lists.

25

-1.5

Reversing a SequenceReversing a Sequence

Top

Then pop each number off the stack

6.7 2.3

Page 26: Basic Data Structures (Stacks). 2 Basic Data Structures Stacks Queues Lists.

26

Reversing a SequenceReversing a Sequence

Top

6.7 2.3 -1.5

Page 27: Basic Data Structures (Stacks). 2 Basic Data Structures Stacks Queues Lists.

27

module reverse (){ initialize the Stack loop{ input nextNumber if (end of input) then {exit loop} if (Stack is not full) then {push nextNumber onto Stack} } loop { if (Stack is empty) then {exit loop} pop nextNumber off the Stack output nextNumber }}

Page 28: Basic Data Structures (Stacks). 2 Basic Data Structures Stacks Queues Lists.

28

#include <stdio.h>#include “stack.h”int main(){ Stack theStack; float next;

initializeStack(&theStack); printf(“Enter number sequence: ”); while (scanf(“%f”, &next) != EOF) { if (!stackFull(&theStack)) { push(&theStack, next); } } while (!stackEmpty(&theStack)) { next = pop(&theStack); printf(“%f”, next); } printf(“\n”);}

Page 29: Basic Data Structures (Stacks). 2 Basic Data Structures Stacks Queues Lists.

29

NextNext

• Queue• Main Operations• Implementation