Hallo Ben,
Hausnummern sind meist ziemlich lückenlos vergeben, damit würde sich eine normale Liste mit Index-basiertem Zugriff (also bspw. eine Array-Liste, wie immer die bei C# heißt, die Namensgebung ist da hochgradig bescheuert).
Dann kannst Du Haus Nr. 123 einfach mit list.get(123) bekommen und das geht in konstanter Zeit. Gibt es kein Haus mit der Nummer, kommt halt null zurück. Diese leeren Listenplätze sind akzeptabel, da es davon typischerweise eben nicht viele gibt.
Nun kommen noch so Sachen wie Haus 1a, 1b, 1c ins Spiel. Das könnte man abbilden, indem man Listen schachtelt. Für a,b,c muss man dann eben in einer Liste nochmal linear suchen.
Außerdem gibt es sortierte Tabellen, z.B. solche, die auf Binärbäumen aufbauen (irgendwo hat C# auch sowas). Diese speichern die Elemente sortiert und der Zugriff geht in O(log(n)). Nicht so schnell wie die Array-Liste aber immerhin. Da könnte man dann auch direkt die Nummern mit Buchstaben ablegen, wenn man die Ordnung entsprechend definiert.
Zu guter Letzt gibt es aber noch eine Designfrage zu dem Thema: Was hat die Nummerierung mit der Anordnung der Häuser zu tun? Typischerweise werden in Deutschland Häuser abwechselnd rechts links nummeriert, es gibt aber meines Wissens auch Länder/Orte bei denen einfach die eine Seite hoch und die andere runter nummeriert wird/wurde. Außerdem gibt es da natürlich immer kleine Abweichungen vom Schema.
Du musst Dir also überlegen, welche Information Du eigentlich aus der Ordnung der Hausnummern ziehen willst, und ob das so wirklich funktioniert.
Grüße
Daniel