basic data structures (stacks). 2 basic data structures stacks queues lists

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

Upload: angelica-simpson

Post on 18-Jan-2018

281 views

Category:

Documents


0 download

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

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