Dodatkowo przydaje się węzeł "root" oznaczający pusty stos.
Operacje Dodawanie do węzła GSSnode* GSS::add(GSSnode* prev, int elem) { int prevlevel = prev->level; assert(levels.size()>= prevlevel+1); int level = prevlevel + 1; if (levels.size() == level) { levels.resize(level + 1); } GSSnode* node = findElemAtLevel(level, elem); if (node == nullptr) { node = new GSSnode(); root->elem = elem; root->level = level; levels[level].push_back(root); } node->add(prev); return node; }
Często występuje tylko operacja dodawania bez usuwania węzłów z GSS. Gdyby była potrzebna, to wykonuje się: void GSS::remove(GSSnode* node) { if (levels.size() > node->level + 1) if (findPrevAtLevel(node->level + 1, node)) throw Exception("can remove only from top"); for (int i = 0; i < levels[node->level].size(); i++) if (levels[node->level][i] == node)
levels[node->level].erase(levels[node->level].begin() + i); break;
delete node; }
Przypisy
Kategoria:Struktury danych Kategoria:Klasy grafów