C++primer plus第六版课后编程题答案10.5
Stack.h
#ifndef STACK_H_ #define STACK_H_ struct customer{ char fullname[35]; double payment; }; typedef customer Item; class Stack{ private: enum{MAX=10}; Item items[MAX]; int top; public: Stack(); bool isEmpty()const; bool isFull()const; bool push(const Item &item); bool pop(Item &item); }; #endif
Stack.cpp
#include<iostream> #include "stack.h" using namespace std; Stack::Stack() { top=0; } bool Stack::isEmpty()const { return top==0; } bool Stack::isFull()const { return top==MAX; } bool Stack::push(const Item &item) { if(isFull()) { cout<<"Error !Stack is full!"<<endl; return false; } else items[top++]=item; return true; } bool Stack::pop(Item &item) { if(top<=0) { cout<<"Error !Stack is empty"<<endl; return false; } else { item=items[--top]; return true; } }
main105.cpp
#include <iostream> #include "stack.h" using namespace std; void main105() { static int total=0; Stack sc; customer c[5]={ {"I",10}, {"II",20}, {"III",40}, {"IV",50}, {"V",60} }; customer s[10];//用于存储pop出来的customer for(int i=0;i<5;i++) { sc.push(c[i]); cout<<"now push "<<c[i].fullname<<" payment is "<<c[i].payment<<endl; } for(int i=0;i<5;i++) { sc.push(c[i]); cout<<"now push "<<c[i].fullname<<" payment is "<<c[i].payment<<endl; } sc.push(c[3]); for(int i=0;i<10;i++) { sc.pop(s[i]); total+=s[i].payment; cout<<"total="<<total<<endl; } sc.pop(s[1]); cin.get(); }