-
Data: 2016-04-20 06:03:02
Temat: Re: Jak przeszukiwać drzewo z przerwami ?
Od: "Jordan Szubert" <u...@j...us.to> szukaj wiadomości tego autora
[ pokaż wszystkie nagłówki ]Dnia 20-04-2016 o 05:26:49 Borneq <b...@a...hidden.pl> napisał(a):
> Większość operacji na drzewie robi się rekurencyjnie. Tak jak na
> przykład wypisanie wszystkich znalezionych ciągów.
> Wypisz(root) woła Wypisz(1), Wypisz(2)...
> Ale teraz chcę zrobić coś takiego:
> Control+F ma znaleźć pierwsze wystąpienie ciągu, (np. przeszukiwanie w
> rejestrach lub jakimkolwiek innym drzewie z danymi) i stanąć na
> znalezionym węźle, niezależnie jak zagłębiony.
> Naciskając F3 zaczynamy od tego węzła i dalej szukamy.
> Chyba trzeba zrobić sztuczny stos na liście (wektorze, chodzi mi ogólnie
> C++, a zwłaszcza teraz o C#) zamiast rekurencji.
> Jak to wykonać? W C#
w C# kompilator zrobi za ciebie sporo roboty:
public class Node : IEnumerable<Node> {
public string Name;
public List<Node> Children = new List<Node>();
public IEnumerator<Node> GetEnumerator() {
yield return this;
foreach(var c in Children) {
foreach(var e in c) {
yield return e;
}
}
}
System.Collections.IEnumerator
System.Collections.IEnumerable.GetEnumerator() {
return this.GetEnumerator();
}
}
IEnumerator<Node> lastSearch = null;
Node ControlF(Node root, string needle) {
{
var td = lastSearch as IDisposable;
if(td != null) {
td.Dispose();
}
}
lastSearch = root.Where(n => n.Name == needle).GetEnumerator();
if(lastSearch.MoveNext()) {
//has at least one result
return lastSearch.Current;
} else {
//nothing found
return null;
}
}
Node F3() {
if(lastSearch == null) {
return null;
}
if(!lastSearch.MoveNext()) {
//no more results
return null;
} else {
return lastSearch.Current;
}
}
//nie testowalem, moga byc bledy
--
Jordan Szubert
skype:jordanszubert
Następne wpisy z tego wątku
- 20.04.16 16:08 Borneq
- 20.04.16 16:36 Borneq
- 20.04.16 17:00 Borneq
- 20.04.16 18:37 Jordan Szubert
- 21.04.16 05:41 Borneq
Najnowsze wątki z tej grupy
- 7. Raport Totaliztyczny: Sprawa Qt Group wer. 424
- TCL - problem z escape ostatniego \ w nawiasach {}
- Nauka i Praca Programisty C++ w III Rzeczy (pospolitej)
- testy-wyd-sort - Podsumowanie
- Tworzenie Programów Nieuprzywilejowanych Opartych Na Wtyczkach
- Do czego nadaje się QDockWidget z bibl. Qt?
- Bibl. Qt jest sztucznie ograniczona - jest nieprzydatna do celów komercyjnych
- Co sciaga kretynow
- AEiC 2024 - Ada-Europe conference - Deadlines Approaching
- Jakie są dobre zasady programowania programów opartych na wtyczkach?
- sprawdzanie słów kluczowych dot. zła
- Re: W czym sie teraz pisze programy??
- Re: (PDF) Surgical Pathology of Non-neoplastic Gastrointestinal Diseases by Lizhi Zhang
- CfC 28th Ada-Europe Int. Conf. Reliable Software Technologies
- Młodzi programiści i tajna policja
Najnowsze wątki
- 2024-12-20 Gdańsk => Inżynier bezpieczeństwa aplikacji <=
- 2024-12-20 czyste powietrze
- 2024-12-20 Katowice => Analyst in the Trade Development department (experience wi
- 2024-12-20 Opole => Inżynier Serwisu Sprzętu Medycznego <=
- 2024-12-20 Katowice => Regionalny Kierownik Sprzedaży (OZE) <=
- 2024-12-20 Rzeszów => International Freight Forwarder <=
- 2024-12-20 Katowice => Key Account Manager (ERP) <=
- 2024-12-20 Ekstradycja
- 2024-12-20 Mikroskop 3D
- 2024-12-20 Warszawa => Spedytor Międzynarodowy <=
- 2024-12-20 Warszawa => Analityk w dziale Trade Development (doświadczenie z Powe
- 2024-12-20 Warszawa => Full Stack .Net Engineer <=
- 2024-12-20 Warszawa => Programista Full Stack .Net <=
- 2024-12-19 Kamerka sam. na tył
- 2024-12-20 Jak być bezpiecznym z Li-Ion?