Uporzadkuj elementy na stosie według malejacych wartosci, korzystajac z jednego dodatkowego
stosu i kilku innych zmiennych lokalnych.
#include <iostream>
#include <cstdlib>
using namespace std;
struct elem {
int dane;
elem *nast;
};
void push(elem *&stos, int x) {
elem* e = new elem;
e->dane = x;
e->nast = stos;
stos = e;
}
int pop(elem *&stos) {
int w = stos->dane;
elem* d = stos;
stos = stos->nast;
delete d;
return w;
}
int topEl(elem* stos) {
return stos->dane;
}
int count(elem* stos) {
int iloscEl = 0;
while (stos != NULL) {
iloscEl++;
stos = stos->nast;
}
return iloscEl;
}
bool isEmpty(elem* stos) {
bool w = true;
if (count(stos) > 0) {
w = false;
}
return w;
}
void usun(elem* &stos) {
while (stos != NULL) {
pop(stos);
}
}
void stos_sort(elem* &stos) {
elem* stospom = NULL;
int liczbaelem = count(stos) - 1;
bool ruch = true;
while (ruch) {
push(stospom, pop(stos));
for (int i = 0; i < liczbaelem; i++) {
if (topEl(stos) < topEl(stospom)) {
push(stospom, pop(stos));
} else {
int tym = pop(stospom);
push(stospom, pop(stos));
push(stospom, tym);
}
}
ruch = false;
push(stos, pop(stospom));
while (!isEmpty(stospom)) {
if (topEl(stos) > topEl(stospom)) {
ruch = true;
};
push(stos, pop(stospom));
}
}
}
int main() {
elem* pierwszy = NULL;
system("Pause");
return 0;
}
Offline