Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <iostream>
- using namespace std;
- int maxsize = 5;
- int currsize = 0;
- int maxsizemin = 5;
- int currsizemin = 0;
- struct element {
- int waga;
- int numer;
- };
- void double_sizemax (element *tab[]) {
- int j = ::maxsize;
- element *old_tab = *tab;
- ::maxsize += 5;
- *tab = new element [::maxsize];
- for (int i = 0; i < j; i++) {
- (*tab)[i] = old_tab[i];
- }
- }
- void double_sizemin (element *tab[]) {
- int j = ::maxsizemin;
- element *old_tab = *tab;
- ::maxsizemin += 5;
- *tab = new element [::maxsizemin];
- for (int i = 0; i < j; i++) {
- (*tab)[i] = old_tab[i];
- }
- }
- void wyswietl (element min[], element max[]) {
- cout << "----------------" << endl;
- for (int i = 0; i < ::currsize; i++)
- cout << max[i].waga << " ";
- cout << endl;
- for (int i = 0; i < ::currsizemin; i++)
- cout << min[i].waga << " ";
- cout << endl;
- cout << "----------------" << endl;
- }
- void push_max(int numer, int waga, element **ptrmax) {
- if (::currsize == ::maxsize)
- double_sizemax(ptrmax);
- element *max = *ptrmax;
- int i = ::currsize;
- max[i].waga = waga;
- max[i].numer = numer;
- int j = (::currsize - 1) / 2;
- for (; i > 0;) {
- if (waga <= max[j].waga)
- break;
- swap(max[i], max[j]);
- i = j;
- j = (i - 1) / 2;
- }
- ::currsize++;
- }
- void push_min(int numer, int waga, element **ptrmin) {
- if (::currsizemin == ::maxsizemin) {
- double_sizemin(ptrmin);
- }
- element *min = *ptrmin;
- int i = ::currsizemin;
- min[i].waga = waga;
- min[i].numer = numer;
- int j = (::currsizemin - 1) / 2;
- for (; i > 0;) {
- if (waga >= min[j].waga)
- break;
- swap(min[i], min[j]);
- i = j;
- j = (i - 1) / 2;
- }
- ::currsizemin++;
- }
- void pop_max (element max[]) {
- ::currsize--;
- max[0] = max[::currsize];
- for (int j = 0, i = 0; j < ::currsize; i = j, j = (i * 2) + 1) {
- if (max[j + 1].waga > max[j].waga && j + 1 < ::currsize)
- j++;
- if (max[j].waga > max[i].waga)
- swap(max[j], max[i]);
- else
- break;
- }
- }
- void pop_min (element min[]) {
- ::currsizemin--;
- min[0] = min[::currsize];
- for (int j = 0, i = 0; j < ::currsizemin; i = j, j = (i * 2) + 1) {
- if (min[j + 1].waga < min[j].waga && j + 1 < ::currsizemin)
- j++;
- if (min[j].waga < min[i].waga)
- swap(min[j], min[i]);
- else
- break;
- }
- }
- int main () {
- element *max = new element [5];
- element *min = new element [5];
- for (int i = 0; i < 10; i++) {
- push_max(i, i, &max);
- push_min(i, i, &min);
- wyswietl(min, max);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement