Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // .h
- #pragma once
- #include <iostream>
- #include "Cvor.h"
- using namespace std;
- template <class T>
- class RetkoPosednutaMat {
- Cvor<T>** kolone;
- Cvor<T>** vrste;
- int i;
- int j;
- public:
- RetkoPosednutaMat(int x, int y) {
- i = x;
- j = y;
- kolone = new Cvor<T>*[j];
- for (int k = 0; k < j; k++) {
- kolone[k] = 0;
- }
- vrste = new Cvor<T>*[i];
- for (int k = 0; k < i; k++) {
- vrste[k] = 0;
- }
- }
- ~RetkoPosednutaMat() {
- Cvor<T>* tmp;
- Cvor<T>* pre;
- for (int k = 0; k < j; k++) {
- tmp = kolone[k];
- pre = tmp;
- while (tmp != 0) {
- pre = tmp;
- tmp = tmp->dole;
- delete pre;
- }
- }
- }
- void setAt(T el, int x, int y) {
- Cvor<T>* tmp;
- Cvor<T>* preX;
- Cvor<T>* preY;
- Cvor<T>* c = new Cvor<T>;
- c->info = el;
- c->i = x - 1;
- c->j = y - 1;
- if (x > i || y > j) {
- cout << "Preskocili ste dimenzije matrice!\n";
- return;
- }
- tmp = kolone[y - 1];
- preY = tmp;
- while (tmp != 0 && tmp->i < x) { // namesta cvor iznad (trazi kog je reda, posto je postavljen na svoju kolonu)
- preY = tmp;
- tmp = tmp->dole;
- }
- if (preY != 0 && preY->i == x - 1) { // u slucaju da taj cvor vec postoji
- preY->info = el;
- return;
- }
- if (preY != 0 && preY->i < x - 1) { // ne postoji cvor sa tim elementima i nalazi se posle nekog cvora
- c->dole = preY->dole;
- preY->dole = c;
- }
- if (preY != 0 && preY->i > x - 1) { // nalazi se prvi u koloni
- c->dole = preY;
- preY = c;
- }
- if (preY == 0) {
- preY = c;
- }
- tmp = vrste[x - 1]; // namesta cvor sa leve strane
- preX = tmp;
- while (tmp != 0 && tmp->j > y) {
- preX = tmp;
- tmp = tmp->desno;
- }
- if (preX != 0 && preX->j < y - 1) { // nalazi se posle nekog cvora
- c->desno = preX->desno;
- preX->desno = c;
- }
- if (preX != 0 && preX->j > y - 1) { // nalazi se prvi u vrsti
- c->desno = preX;
- preX = c;
- }
- if (preX == 0) {
- preX = c;
- }
- if (kolone[y - 1] == 0 || preY->i == x - 1) // proverava da li postoji je do sada postajala ta vrsta/kolona
- kolone[y - 1] = preY; // i slucaj kada se cvor stavlja na prvo mesto u vrsti/koloni
- if (vrste[x - 1] == 0 || preX->j == y - 1)
- vrste[x - 1] = preX;
- }
- void stampaj() {
- for (int k = 0; k < i; k++) {
- Cvor<T>* tmp = vrste[k];
- if (tmp == 0) {
- for (int z = 0; z < j; z++)
- cout << 0 << " ";
- cout << endl;
- continue;
- }
- int z = 0;
- while (tmp != 0 && tmp->j < j) {
- for (z; z < tmp->j; z++)
- cout << 0 << " ";
- cout << tmp->info << " ";
- tmp = tmp->desno;
- z++;
- }
- for (z; z < j; z++) {
- cout << 0 << " ";
- }
- cout << endl;
- }
- }
- T getT(int x, int y) {
- Cvor<T>* tmp = kolone[y - 1];
- Cvor<T>* pre = tmp;
- if (kolone[y - 1] == 0) {
- cout << "Taj element ne postoji!\n";
- return 0;
- }
- while (tmp != 0 && tmp->i < x) {
- pre = tmp;
- tmp = tmp->dole;
- }
- if (pre->i == x - 1)
- return pre->info;
- else {
- cout << "Taj element ne postoji!\n";
- return 0;
- }
- }
- };
- // cvor.h
- #pragma once
- #include <iostream>
- using namespace std;
- template<class T>
- class Cvor {
- public:
- int i;
- int j;
- T info;
- Cvor* desno;
- Cvor* dole;
- Cvor() {
- i = 0;
- j = 0;
- desno = 0;
- dole = 0;
- info = 0;
- }
- };
- // main
- #pragma once
- #include "RetkoPosednutaMat.h"
- void main() {
- RetkoPosednutaMat<int> a(5, 5);
- a.setAt(1, 1, 2);
- a.setAt(2, 1, 5);
- a.setAt(4, 4, 1);
- a.setAt(5, 4, 2);
- a.setAt(6, 5, 5);
- a.setAt(33, 2, 2);
- a.setAt(35, 3, 3);
- a.setAt(30, 3, 1);
- a.setAt(30, 3, 2);
- a.setAt(11, 3, 2);
- a.setAt(66, 1, 4);
- a.setAt(44, 5, 2);
- cout << a.getT(3, 2) << endl;
- cout << a.getT(5, 2) << endl;
- cout << a.getT(1, 5) << endl;
- cout << a.getT(5, 5) << endl;
- a.stampaj();
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement