online: 5; azi: 376; total: 50831 Manual clasa a xi a - Implementarea structurilor de date - Lista liniara

Probleme Rezolvate



Manual clasa a Xi a

Implementarea structurilor de date

Lista liniara

Să se simuleze, cu ajutorul unei stive, o maşină de adunat şi multiplicat. Numerele se introduc într-o stivă — şi operația se încheie atunci când se citeşte de la tastatură operatorul „+” (pentru adunarea numerelor) sau operatorul „*” (pentru înmulţirea numerelor). Se mai folosesc: caracterul „A”, pentru a anula ultimul număr introdus, şi caracterul „C”, pentru a anula toate numerele introduse.
# include < iostream >
struct Nod {
int val;
Nod* urmator ;
};
void push (Nod*& top, int val) {
Nod* nodNou = new Nod{val, top};
top = nodNou ;
}
int pop (Nod*& top) {
if (!top) {
return 0 ;
}
Nod* nodScoat = top;
int val = nodScoat ->val;
top = top-> urmator ;
delete nodScoat ;
return val;
}
void elibereazaStiva (Nod*& top) {
while (top) {
pop (top);
}
}
int main () {
Nod* stiva = nullptr ;
char input;
while ( std ::cin >> input) {
if (input >= '0' && input <= '9' ) {
push (stiva, input - '0' );
} else if (input == 'A' ) {
pop (stiva);
} else if (input == 'C' ) {
elibereazaStiva (stiva);
} else if (input == '+' || input == '*' ) {
int rezultat = (input == '+' ) ? 0 : 1 ;
while (stiva) {
int numar = pop (stiva);
if (input == '+' ) {
rezultat += numar ;
} else {
rezultat *= numar ;
}
}
std :: cout << "Rezultatul este: " << rezultat << std :: endl ;
break ;
} else {
std :: cout << "Caracter invalid: " << input << std :: endl ;
}
}
elibereazaStiva (stiva);
return 0 ;
}