Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- Opracować klasę Stos do obsługi stosu, którego elementami składowymi będą wyrazy. Deklaracja klasy:
- class Stos {
- private:
- vector<string> wstos;
- public:
- bool wloz( const string& element); // wklada element na stos
- bool zdejmij (); // usuwa element ze stosu
- bool pobierz( string &element ); // pobiera wartosc element ze
- // szczytu, nie usuwa go
- bool pusty() const ;
- bool pelny() const ;
- int rozmiar() const ;
- };
- Napisać program testujący tę klasę.
- Wykonać dwie implementacje:
- a) z wykorzystaniem szablonu vector;
- b) z wykorzystaniem szablonu stack.
- Potrzebne funkcje działające na wektorze:
- v.push_back(el) - wstawia element na koniec wektora
- v.pop_back() - usuwa element z końca wektora
- v.back() - zwraca element z końca wektora
- v.empty() - zwraca true, jeśli wektor jest pusty
- v.size() - zwraca liczbę elementów w wektorze
- v.max_size() - zwraca rozmiar największego dopuszczalnego wektora.
- Dodaj sprawdzanie sytuacji niepoprawnych, na przykład próbę pobieranie elementu z pustego stosu czy próbę zapisu na stosie, gdy brakuje miejsca. Zgłaszaj wyjątki
- */
- #include "stdafx.h"
- #include <queue>
- #include <cstdlib>
- #include <iostream>
- #include <string>
- #include <fstream>
- #include <stack>
- using namespace std;
- class Stos {
- private:
- vector<string> wstos;
- public:
- bool wloz( const string& element){ // wklada element na stos
- wstos.push_back(element);
- if(wstos.size() >= (wstos.max_size() - sizeof(Stos)))throw 0; // brak miejsc na nowy element bo maxSize
- return true;
- }
- bool zdejmij (){ // usuwa element ze stosu
- if(wstos.size() == 0) throw 1; // nie mozna zdjec bo wektor pusty
- wstos.pop_back();
- return true;
- }
- bool pobierz( string &element ){ // pobiera wartosc element ze szczytu, nie usuwa go
- if(wstos.size() == 0) throw 1; // pusty stos
- wstos.back();
- return true;
- }
- bool pusty() const{
- if(wstos.empty()) return true;
- else return false;
- }
- bool pelny() const{
- if(wstos.size() >= wstos.max_size())return true;
- else return false;
- }
- int rozmiar() const{
- if(wstos.size())return true;
- }
- void pokaz(){
- if(wstos.size() == 0) throw 1; // pusty stos
- for(int i = 0; i < wstos.size(); i++){
- cout << wstos[i] << " ";
- }
- cout << endl;
- }
- };
- class StosStack {
- private:
- stack <string> wstos;
- public:
- bool wloz( const string& element){ // wklada element na stos
- wstos.push(element); // stack nie posiada odpowiednika max_size bedacej w vector
- return true;
- }
- bool zdejmij (){ // usuwa element ze stosu
- if(wstos.size() == 0) throw 1; // nie mozna zdjec bo wektor pusty
- wstos.pop();
- return true;
- }
- bool pobierz( string &element ){ // pobiera wartosc element ze szczytu, nie usuwa go
- if(wstos.size() == 0) throw 1; // nie mozna zdjec bo wektor pusty
- wstos.top();
- return true;
- }
- bool pusty() const{
- if(wstos.empty()) return true;
- else return false;
- }
- //bool pelny() const; stack nie posiada funkcji max_size jak vector;
- int rozmiar() const{
- if(wstos.size())return true;
- }
- };
- int _tmain(int argc, _TCHAR* argv[]){
- Stos stos;
- stos.wloz("ala");
- stos.wloz("ma");
- stos.wloz("kota");
- try{
- stos.pokaz();
- stos.zdejmij();
- stos.pokaz();
- bool czyPusty = stos.pusty();
- cout << "czy pusty(): " << czyPusty << endl;
- bool czyPelny = stos.pelny();
- cout << "czy pelny(): " << czyPelny << endl;
- int rozmiar = stos.rozmiar();
- cout << "rozmiar(): " << rozmiar << endl;
- cout << "--------------\n\n";
- StosStack stack;
- stack.wloz("ala");
- stack.wloz("ma");
- stack.wloz("kota");
- czyPusty = stack.pusty();
- cout << "czy pusty(): " << czyPusty << endl;
- rozmiar = stack.rozmiar();
- cout << "rozmiar(): " << rozmiar << endl;
- }
- catch(int errorNo){
- switch(errorNo){
- case 0: cout << " Brak miejsca na nowy element" << endl; ;break;
- case 1: cout << " Kolejka jest pusta, nie mozna wykonac funkcji " << endl; break;
- }
- }
- system ("PAUSE");
- }
Advertisement
Add Comment
Please, Sign In to add comment