1
0
Fork 0

Ex3.1: Stack turned into a class

This commit is contained in:
Eric Teunis de Boone 2019-12-03 12:05:49 +01:00
parent 511a6c4c55
commit 890f414d86
3 changed files with 89 additions and 0 deletions

26
ex3/ex3.1/Stack.cc Normal file
View file

@ -0,0 +1,26 @@
//Stack.cc
#include <iostream>
#include "Stack.hh"
void Stack::push(double c) {
if (full()) {
std::cout << "Stack::push() Error: stack is full" << std::endl ;
return ;
}
s[count++] = c ;
}
double Stack::pop() {
if (empty()) {
std::cout << "Stack::pop() Error: stack is empty" << std::endl ;
return 0 ;
}
return s[--count] ;
}
void Stack::inspect() {
for ( int i = nitems() - 1; i >= 0; i-- )
{
std::cout << i << ": " << s[i] << std::endl;
}
}

27
ex3/ex3.1/Stack.hh Normal file
View file

@ -0,0 +1,27 @@
//Stack.h
#ifndef STACK_H
#define STACK_H
const int LEN = 80 ; // default stack length
class Stack {
// Interface
public:
Stack() { init(); }
~Stack() {}
int nitems() { return count ; }
bool full() { return (count==LEN) ; }
bool empty() { return (count==0) ; }
void push( double c );
double pop();
void inspect();
// Implementation
private:
void init() { count = 0 ; }
double s[LEN] ;
int count ;
};
#endif

36
ex3/ex3.1/main.cpp Normal file
View file

@ -0,0 +1,36 @@
#include <iostream>
#include "Stack.hh"
/*
* Using 100 elements is too much for the default stack
* But it fails gracefully so when popping it starts from 80
*/
using namespace std ;
int main() {
Stack s ;// initialize Stack
// Write doubles into Stack
int i ;
for (i=0 ; i<100 ; i++) {
cout << "pushing value " << i*i << " in stack" << endl ;
s.push(i*i) ;
}
// Count doubles in fifo
cout << s.nitems() << " value in stack" << endl ;
cout << "Inspect the FIFO" << endl;
s.inspect();
// Read doubles back from fifo
while (!s.empty()) {
double val = s.pop() ;
cout << "popping value " << val << " from stack" << endl ;
}
cout << "Inspect the FIFO" << endl;
s.inspect();
return 0 ;
}