Registrierung Kalender Mitgliederliste Teammitglieder Suche Häufig gestellte Fragen Zur Startseite

Informatiker Board » Suche » Suchergebnis » Hallo Gast [Anmelden|Registrieren]
Zeige Beiträge 1 bis 15 von 26 Treffern Seiten (2): [1] 2 nächste »
Autor Beitrag
Thema: Rekursives Zusammenfügen zweier Queue in C
Chirs

Antworten: 3
Hits: 3.555
25.01.2016 07:39 Forum: Praktische Informatik


Danke für die Antwort.

Du meinst dann bestimmt so:

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:

int merge(queue *a,queue *b)
{if (isempty(a)&& isempty(b))
  return 0;
else if (!isempty(a)&& isempty(b) )
  return a;
else if (isempty(a)&& !isempty(b))
  return b;
else return merge((append(b,top(a)),rest(a))
}



oder ?

Da hast du recht da habe ich einen Fehler gemacht, da der Vergleich mit 0 dann wenig Sinn macht.

Theoretisch könnte ich es aber auch so schreiben:

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:

int merge(queue *a,queue *b)
{if (a == NULL && b == NULL)
  return 0;
else if (a != NULL && b == NULL )
  return a;
else if (a == NULL && b != NULL)
  return b;
else return merge((append(b,top(a)),rest(a))
}



oder ?

Grüße
Thema: Rekursives Zusammenfügen zweier Queue in C
Chirs

Antworten: 3
Hits: 3.555
Rekursives Zusammenfügen zweier Queue in C 24.01.2016 21:54 Forum: Praktische Informatik


Meine Frage:
Hallo,

ich hätte nochmal eine Frage bezüglich Queue.

Und zwar möchte ich eine Funktion schreiben, die zwei bestehende Queue zu einer zusammenfügen. Dabei kann eine in die andere angefügt werden. Ich möchte diese Aufgabe rekursiv lösen.

Ich habe einmal einen Code zusammen gebastelt aber leider ist der noch nicht fertig,da ich mir nicht sicher bin ob der rekursiven Aufruf so richtig ist.
Vielleicht kann mir hier jemand bei dieser Aufgabe weiterhelfen.


Vielen Dank schon mal :-)

Grüße



Meine Ideen:
Hierzu habe ich mir folgende Terminierungsfälle überlegt:

wenn beide leer sind dann soll 0 zurückgegeben werden.
wenn Erste 0 ist soll die Zweite zurückgegeben werden.
wenn Zweite 0 ist soll die Erste zurückgegeben werden.
sonst soll erstes Element von der ersten Queue hinten an die zweite Queue angefügt werden.

Ich habe bereits folgende Funktionen gegeben:

isempty() -> prüft ob Queue leer ist
append() -> fügt hinten ein Element an die Queue an
top() -> gibt erstes Element der Queue zurück
rest() -> löscht erstes Element der Queue

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:

int merge(queue *a,queue *b)
{if (isempty(a) == 0 && isempty(b) == 0))
  return 0;
else if isempty(a) != 0 && isempty(b) == 0)
  return a;
else if isempty(a) == 0 && isempty(b) != 0)
  return b;
else return merge((append(b,top(a)),rest(a))
}
Thema: Rekursiv Verzweigungen zählen in einem Baum
Chirs

Antworten: 21
Hits: 12.877
17.01.2016 18:15 Forum: Algorithmen


Ok danke dir

Ich glaub es ist wirklich einfacher es in zwei Funktionen zu packen und erst die Knoten zu zählen.


Vielen Dank für deine Hilfe.
Thema: Rekursiv Verzweigungen zählen in einem Baum
Chirs

Antworten: 21
Hits: 12.877
17.01.2016 18:09 Forum: Algorithmen


Ok danke trotzdem. smile

Kann man deinen Code auch ohne ? schreiben also in solcher Form wie ich den meinen geschrieben habe ? Weil ich leider diesen Operator nicht benutzen darf.


Grüße
Thema: Rekursiv Verzweigungen zählen in einem Baum
Chirs

Antworten: 21
Hits: 12.877
17.01.2016 18:03 Forum: Algorithmen


Ja genau soweit waren wir aber wie soll ich das dann einbauen, dass es bei einem Knoten keine Verzweigung gibt ?

Weil daran verzweifle ich gerade ein wenig. verwirrt

Grüße
Thema: Rekursiv Verzweigungen zählen in einem Baum
Chirs

Antworten: 21
Hits: 12.877
17.01.2016 17:58 Forum: Algorithmen


Danke für die Antwort, weil ich es in diesem Stil programmieren sollte:
code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
int verzweigungen(textbaum *b)
{
if (b==NULL)
return 0;

else if (b->left == NULL) && (b->right == NULL) 
return 1;

else return (verzweigung(b->left)+verzweigung(b->right)); 

};


Dann würde doch dieser Code funktionieren oder ? Da ich beide Terminierungsfälle abgedeckt habe.


Grüße
Thema: Rekursiv Verzweigungen zählen in einem Baum
Chirs

Antworten: 21
Hits: 12.877
17.01.2016 17:41 Forum: Algorithmen


Meine Terminierungsfälle sind doch:

Wenn b leer return 0
Wenn b->left oder b->right == NULL return 1

Aber wo ich noch nicht ganz durchgeblickt habe ist dass ich doch eigtl noch zwei weitere Terminierungsfälle habe und zwar wenn b->left und b->right !=0 sind es ja zwei Verzweigungen und wenn b->left und b->right = 0 habe ich keine Verzweigung.

Wie sollte ich es dann deiner Meinung nach aufbauen ?


Sry für die Anfängerfrage. Würde mich freuen wenn du mir weiterhelfen könntest.


Grüße
Thema: Rekursiv Verzweigungen zählen in einem Baum
Chirs

Antworten: 21
Hits: 12.877
16.01.2016 10:06 Forum: Algorithmen


Ich habe auch nochmal darüber nachgedacht in der Zeile 10 muss eine ODER und kein UND stehen weil wenn es ein UND ist dann existiert in einem Baum nur die Wurzel und dann hat der Baum keinerlei Verzweigungen.

Ich habe jetzt den Terminierungsfall,wenn der Baum nur aus Wurzel besteht auch abgedeckt (Zeile 7). Da hier ja keine Verzeigungen auftreten.

Grüße.
code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:

int verzweigungen(textbaum *b)
{
if (b==NULL)
return 0;

else if (b->left == NULL) && (b->right == NULL) 
return 0;

else if (b->left == NULL) || (b->right == NULL) 
return 1;

else return (verzweigung(b->left)+verzweigung(b->right));

Thema: Rekursiv Verzweigungen zählen in einem Baum
Chirs

Antworten: 21
Hits: 12.877
15.01.2016 17:45 Forum: Algorithmen


Stimmt du hast recht also muss ich die 1+.... weglassen dann müsste es funktionieren smile

Danke dir du hast mir sehr geholfen Daumen hoch
Thema: Rekursiv Verzweigungen zählen in einem Baum
Chirs

Antworten: 21
Hits: 12.877
15.01.2016 17:04 Forum: Algorithmen


Danke für den Denkanstoß smile
Leider darf ich es in der Prüfung nicht so wie du es programmiert hast machen.
Weißt du zufällig ob mein Code auch funktionieren würde ?
code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
int verzweigungen(textbaum *b)
{
if (b==NULL)
return 0;

else if (b->left == NULL) && (b->right == NULL) 
return 1;

else return 1+(verzweigung(b->left)+verzweigung(b->right)); 

};
Thema: Rekursiv Verzweigungen zählen in einem Baum
Chirs

Antworten: 21
Hits: 12.877
15.01.2016 16:12 Forum: Algorithmen


Sry dass ich nochmal nachfrage aber was wäre denn z.B. wenn ich irgendwann mal so eine Prüfungsaufgabe bekommen würde. In der ich eine Funktion schreiben soll die die Verzweigungen in einem Baum zählt.

Könnte ich dann meine Funktion verwenden ?
Thema: Rekursiv Minimum in einer Queue
Chirs

Antworten: 5
Hits: 4.658
14.01.2016 21:15 Forum: Algorithmen


Ja du hast recht das andere funktioniert nur wenn ich head() mit einem zu suchenden Element vergleichen kann smile


Aber was ich noch nicht ganz verstehe ist wenn ich jetzt diese Funktion in findMax ändern möchte dann muss ich nur die Zeile return -1 ändern oder ?


Grüße
Thema: Rekursiv Minimum in einer Queue
Chirs

Antworten: 5
Hits: 4.658
14.01.2016 19:59 Forum: Algorithmen


Dankeschön für die schnelle Antwort und für die Hilfe. Daumen hoch

Leider möchte ich jedoch das gefundene Minimum ausgeben.
Also im return möchte ich gern head(q) stehen haben wenn es das Minimum ist smile

Trotzdem vielen Dank für den Denkanstoß smile
Thema: Rekursiv Minimum in einer Queue
Chirs

Antworten: 5
Hits: 4.658
Rekursiv Minimum in einer Queue 14.01.2016 14:17 Forum: Algorithmen


Meine Frage:
Hallo,

ich hätte nochmal eine Frage bzgl. Queue und zwar möchte ich gerne eine Funktion schreiben, die rekursiv das Minimum einer Queue bestimmt.

Ich verwende hierzu bereits Funktionen die wir im Studium definiert haben:

emptyqueue() -> gibt leere Queue zurück
rest() -> Entfernt erstes Element
head() -> gibt erstes Element zurück
append() -> fügt hinten ein Element an


Leider weiß ich nicht wie ich den Vergleich des ersten Elements mit dem Nächsten rekursiv realisieren soll.


Vielleicht kann mir hier jemand weiterhelfen.


Danke schon mal für eure Bemühungen


Grüße

Meine Ideen:
code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
unsigned int min(queue *q)
{ if (q == 0)
return emptyqueue();
else if (head(q)== ) ???
return head(q);

else return min(rest(q));


Thema: Rekursiv Verzweigungen zählen in einem Baum
Chirs

Antworten: 21
Hits: 12.877
14.01.2016 14:03 Forum: Algorithmen


Danke für den Hinweiß hab die Null vergessen Augenzwinkern

Ja ich galube du hast recht so ist es eindeutig einfacher und besser


Grüße
Zeige Beiträge 1 bis 15 von 26 Treffern Seiten (2): [1] 2 nächste »