|
An Introduction to Stacks
With Examples in C++ |
|
Prof. David Bernstein |
| Computer Science Department |
| bernstdh@jmu.edu |
| Values: | Homogeneous elements of any type. | ||||||||||||||||||
| Operations: |
|
In addition,
if the stack has a "size limit", one could add an
isFull() operation; some people add a
peek() operation; and some people add a
makeEmpty() operation.
| 1 | . | . |
| 1 | 2 | . |
#ifndef edu_jmu_cs_Stack_h
#define edu_jmu_cs_Stack_h
const int maxstack = 10;
/**
* A simple implementation of a stack ADT.
*
*/
class Stack {
public:
/**
* Default constructor
*/
Stack();
/**
* Is the stack empty?
*
* @return true if the stack is empty and false otherwise
*/
bool isEmpty();
/**
* Return and remove the top item on ths stack.
*
* @return The item if one exists and -1 if the stack is empty
*/
int pop();
/**
* Add an element to the top of the stack
*
* @param item The item to push
* @return true if the push was successful and false if the stack was full
*/
bool push(int item);
private:
// The number of items on the stack
int count;
// The array containing the items
int entry[maxstack];
};
#endif
#include "Stack.h"
Stack::Stack() {
count = 0;
}
bool Stack::isEmpty() {
bool outcome = true;
if (count > 0)
outcome = false;
return outcome;
}
int Stack::pop() {
int outcome = 0;
if (count == 0) {
outcome = -1;
} else {
outcome = entry[count - 1];
--count;
}
return outcome;
}
bool Stack::push(int item) {
bool outcome = true;
if (count >= maxstack) {
outcome = false;
} else {
entry[count] = item;
count++;
// What do you think about:
// entry[count++] = item;
}
return outcome;
}
#include <iostream>
#include "Stack.h"
using namespace std;
/**
* An example that uses a stack
*/
int main(void) {
int item, n;
Stack numbers;
cout << "\n\n Enter the size of the stack: ";
// Read the size of the stack
cin >> n;
// Read the individual numbers
for (int i = 0; i < n; i++) {
cout << " Enter a number: ";
cin >> item;
numbers.push(item);
}
cout << "The numbers in reverse order: " << endl << endl;
// Print the contents of the stack
while (!numbers.isEmpty()) {
cout << numbers.pop() << endl;
}
cout << endl;
return 1;
}
pop() to make it
return a bool indicating the status
but still have it "return" the top item?
const?