stack模板头文件
#ifndef STACK_H_INCLUDED
#define STACK_H_INCLUDED
template <class Type>
class Stack
{
private:
enum {MAX = 100};
Type items[MAX];
int top;
public:
Stack();
bool isempty();
bool isfull();
bool push(const Type &item);
bool pop(Type &item);
};
template <class Type>
Stack<Type>::Stack()
{
top = 0;
}
template <class Type>
bool Stack<Type>::isempty()
{
return top == 0;
}
template <class Type>
bool Stack<Type>::isfull()
{
return top == MAX;
}
template <class Type>
bool Stack<Type>::push(const Type &item)
{
if (top < MAX)
{
items[top++] = item;
return true;
}
else
return false;
}
template <class Type>
bool Stack<Type>::pop(Type &item)
{
if(top > 0)
{
item = items[--top];
return true;
}
else
return false;
}
#endif // STACK_H_INCLUDED
stack对象测试文件
#include <iostream>
#include <string>
#include <cctype>
#include "stack.h"
using namespace std;
int main()
{
Stack<string> st;
char ch;
string po;
cout << "Please enter A to add a purchase order,\n"
<< "P to process a PO, or O to quit!!\n";
while (cin >> ch && toupper(ch) != 'Q')
{
while(cin.get() != '\n')
{
continue;
}
if (!isalpha((ch)))
{
cout << '\a';
continue;
}
switch (ch)
{
case 'A':
case 'a':cout << "Enter a po number to add:";
cin >> po;
if(st.isfull())
cout << "stack alredy full!!\n";
else
st.push(po);
break;
case 'P':
case 'p':if (st.isempty())
cout << "stack alreay empty!\n";
else
{
st.pop(po);
cout << "Po #" << po << " popped !\n";
break;
}
}
cout << "Please enter A to add a purchase order,\n"
<< "P to process a PO, or Q to quit!\n";
}
cout << "Bye!!\n";
return 0;
}