Ex3.1: Stack turned into a class
This commit is contained in:
parent
511a6c4c55
commit
890f414d86
3 changed files with 89 additions and 0 deletions
26
ex3/ex3.1/Stack.cc
Normal file
26
ex3/ex3.1/Stack.cc
Normal 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
27
ex3/ex3.1/Stack.hh
Normal 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
36
ex3/ex3.1/main.cpp
Normal 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 ;
|
||||
}
|
Reference in a new issue