C++ Ringliste Vorgänger suchen

Chakky

Member of Honour
Hi HaBo,

mein Frauchen hat ein kleines Problem unter C++ und einer Ringliste.

Sie gibt 10 Werte ein und bestimmt bei einer beliebigen Zahl (die auch eingegebn wird) den Vorgänger.

Das Funktioniert bei 9 von 10 Fällen, sprich bei einer eingabe von

1
2
3
4
5
6
7
8
9
10

und als Suche 5.
Wird Ordnungsgemäß die 4 Angezeigt, bei allen anderen Suchwerten auch. Nur bei der 1 als Suchwert wird keine 10 Ausgegebn sondern die 2.
Weis einer warum und ob es mit einer Doppeltverkettenliste das funktionieren würde, nur dann ist wieder die frage wie wird das Implementiert.

Hier der Code:

Code:
#include <iostream>
using namespace std; 

struct nummer 
       {
          int a;
          nummer *b;
       };
int main ()
    {
           nummer *first,*current,*before,*davor;
           int i;
           int n;
           
           first = new nummer;
           cout << "Eingabe:\n";
           cin >> first ->a; 
           first-> b =first;
           
           current=first;
           before=first;
           davor=first;
           
           i = 1;
           while (i!=10)
                 {
                    current->b =new nummer;
                    current = current-> b;
                    current ->b =first;
                    cin >>current->a;
                    i++;
                 }
           current= first;
           cout<<"Suche nach einer Zahl:\n";
           cin>> n;
           while (n!=current->a)
                 {
                 
                     davor=before;
                     before=current;
                     current=current->b;
                     
                 }
                 cout<<davor->b->a;
           

system("PAUSE");
return 0;
    }

Danke für Hinweise und Lösungsvorschläge :)
 
Zuletzt bearbeitet:
Hi, das Problem ist, dass die Variable "davor" nicht korrekt initalisiert wird. Bei Eingabe der 1 kommst du in die zweite While-Schleife gar nicht rein, deshalb zeigt sie auf den ersten Wert.
Mit einer doppelt oder rückwärts verketteten Liste ist es natürlich auch möglich, das Problem zu lösen. Zwingend nötig ist das aber nicht.
Mir ist auch nicht so ganz klar, warum du nicht nur die Variable "before" benutzt. Ich habe mir erlaubt, den Code zu korrigieren, mir wäre aber wichtig, dass du/deine Frau es erst einmal selbst versucht.
Code:
#include <iostream>
using namespace std; 

struct nummer
{
    int a;
    nummer *b;
};

int main ()
{
    nummer *first, *current, *before;
    int i;
    int n;
    
    first = new nummer;
    cout << "Eingabe:\n";
    cin >> first->a; 
    first->b = first;
    
    current = first;
    
    i = 1;
    while (i!=10) {
        current->b =new nummer;
        current = current->b;
        current->b =first;
        cin >> current->a;
        i++;
    }
    
    before = current;
    current = first;
    cout << "Suche nach einer Zahl:\n";
    cin >> n;
    while (n != current->a) {
        before = current;
        current = current->b;
    }
    cout << before->a;
    return 0;
}
 
Vielen dank dir. Frauchen saß heute schon eine Weile dran und kam zu keiner richtigen Lösung, ich selber hab von den Listen keinen Plan.
 
Zurück
Oben