• Liebe User, bitte beachtet folgendes Thema: Was im Forum passiert, bleibt im Forum! Danke!
  • Hallo Gemeinde! Das Problem leidet zurzeit unter technischen Problemen. Wir sind da dran, aber das Zeitkontingent ist begrenzt. In der Zwischenzeit dürfte den meisten aufgefallen sein, dass das Erstellen von Posts funktioniert, auch wenn das Forum erstmal eine Fehlermeldung wirft. Um unseren Löschaufwand zu minimieren, bitten wir euch darum, nicht mehrmals auf 'Post Reply' zu klicken, da das zur Mehrfachposts führt. Grußworte.

Suche Programmierer der c kann

Mitglied seit
06.08.2008
Beiträge
110
Reaktionen
0
Hallo, wusste nicht in welchen Bereich ich es machen soll, falls falsch bitte verschieben.

Suche einen Programmier, der mir bei C helfen kann. Muss eine Aufgabe für die Uni machen und komme einfach nicht weiter ( Problem bei Verketteten Listen etc. )
aufgabestellung


Falls mir einer helfen kann , bitte hier oder per pn melden.
Bin echt am verzweifeln

mfg
smunks

edit: hab mal die aufgabenstellung drangehängt
 
Zuletzt bearbeitet:

Clawg

Guest
Poste doch das Problem in das Mathe/Physik/Chemie & Co. Forum.

Für verkettete Listen nimmt man C++ und BOOST :deliver: - aber man sollte natürlich schon mal selbst eine programmiert haben ;)
 

Clawg

Guest
Ich habe den Algorithmus jetzt nicht näher betrachtet, aber ist die Zahl der Elemente der Warteschlange Q endlich?
Wenn ja, würde ich einfach ein Array und zwei Indexvariablen benutzen (headIndex und tailIndex). Das ist auch wesentlich effizienter als da mit verketteter Liste herumzutanzen. Brauchst halt a bisserl Logik noch, damit du es in konstant großem Speicherplatz unterbringst (wenn der tailIndex über die Arraygröße hinauswächst, modulo oder so).
 
Zuletzt bearbeitet:
Mitglied seit
12.04.2003
Beiträge
1.806
Reaktionen
0
willst Du, dass wir jetzt deine Hausaufgabe machen? Nen kleiner Anhaltspunkt wo es hakt/wie weit Du es geschafft hast wäre ganz gut.

Habs mal überflogen, dürfte es eig. hinbekommen können. Allerdings nur in c++.
(müsstest es dann selbst übersetzen, sollte aber nicht so das Problem sein). Wenn das okay ist sag bescheid, dann probier ich es.
 
Mitglied seit
06.08.2008
Beiträge
110
Reaktionen
0
also ich habs nun soweit dass er die eingabe in einer matrix[][] speichert. also startpunkt zielpunkt und hindernisse

nun soll laut aufgabenstellung als ausgangspunkt der zielpunkt genommen werden

hab nun erstmal die listen definiert mittels

typedef struct {int x,y;} Koordinate;
typedef struct {int z;Koordinate *liste;} Agenda;

nun hackt es an der push bzw. pop funktion , also wie ich da ans ende der liste ein elemente hinzufüge und dann dieses wieder lösche

und wie ich dann die benachbarten quadranten mit der matrix vergleiche, muss ich dann die hindernisse in ner separaten liste speichern oder kann er dies einfach aus der matrix rauslesen
 

Clawg

Guest
Die einzigen zwei Funktionen die du brauchst, sind "von vorne entfernen" und "an hinten anfügen". Also lass die Pointer zuhause :)

int liste[100];
int headIndex = 0;
int tailIndex = 0;

void push(int value) {
liste[tailIndex%100] = value;
tailIndex++;
}

int pop() {
int value = liste[headIndex%100];
headIndex++;
return value;
}

:deliver:
 
Mitglied seit
12.04.2003
Beiträge
1.806
Reaktionen
0
EDIT: Das hier ist natürlich eine c++ Lösung! ka obs so auch in c funzt


Für das Hinzufügen bzw Löschen von Listenelementen solltest Du Zeiger verwenden.
D.h. innerhalb deines structs hast Du nicht nur eine Position, sondern noch zwei Zeiger (doppelt verkettete Listen finde ich persönlich netter, ginge sicherlich auch mit einer einfach verketteten). Diese Zeiger sind vom Typ des strucs. D.h. jedes Element deiner liste hat zwei Zeiger. Mit dem ersten Zeiger ('prev') zeigt es auf das vorangegangene Listenelement und mit dem zweiten Zeiger ('next') zeigt es auf das nächste Listenelement. Das erste Glied hat natürlich keinen Vorgänger und zeigt daher auf NULL. Ebenso hat das letzte keinen Nachfolger und zeigt auch auf NULL.

Zusätzlich hast Du einen Zeiger, der immer (!) auf das erste Element deiner Liste zeigt ('head') und zwei temporäre Zeiger ('temp', 'temp2') mit denen DU munter pber die Liste laufen und sie gestaltet kannst.

Ein Listenelement ans Ende der Liste hinzufügen:

temp=head; // 'temp' zeigt auf das erste Glied der Liste.
while (temp->next) //wird solange ausgeführt wie ein Nachfolgeelement ex. Das letze Element zeigt auf NULL, dann abbruch
{temp=temp->next} // wenn ein Nachfolgeelement ex. gehst Du auf dieses.

/*Schleife bricht ab und Du stehst auf dem letzten Element deiner Liste*/

temp2=temp; //setze temp2 auf die Adresse von temp
temp->next=new 'Listenelement'; // erzeuge neues Listenelement
temp=temp->next; //temp zeigt nun auf das soeben erstellte Element
temp->prev=temp2; //zeige mit dem prev-Zeiger von temp auf das vorige Element (temp2)
temp2->next=temp //zeigt mit dem next-Zeiger von temp2 auf das nächste Element (temp)
temp->next=NULL; // der next Zeiger von dem letzten Element zeigt auf NULL.




Das erste Element aus der Liste entfernen:

if (head->next) // ist nurnoch ein Element vorhanden?
{
head=head->next; //setze das erste Element auf das 2.
delete head->prev; //lösche das erste Element
head->prev=NULL; //Der Zeiger der auf das ehemals erste Element gezeigt hat wird auf NULL gesetzt
}
 
Mitglied seit
06.08.2008
Beiträge
110
Reaktionen
0
Danke, ist des abe rnicht mit doppelten komplizierter als mit einfachen ?



Hab das von einem bekommen, nur versteh ich da grad ned viel



typedef struct {int x,y;} Koordinate;
typedef struct {int z;Koordinate *liste;} Agenda;

Unterprogramm zur Agenda hinzufügen :

void push(Agenda *a,Koordinate k)
{
a->z++; // Zähler um 1 Erhöhen
a->liste = realloc(a->liste,a->z * sizeof k); //Speicher erweitern um k anzuhängen
a->liste[a->z-1] = k; // k zur Liste hinzufügen
}

Unterprogramm letzten Wert entfernen
Koordinate pop(Agenda *a)
{
return a->liste[--a->z];
}
 
Mitglied seit
30.08.2002
Beiträge
1.699
Reaktionen
0
Website
www.metalgigs.de
Einfach und doppelt verkettete Listen in Programmiersprache X mal von Hand zu implementieren ist doch eine DER Standardaufgaben wenn man bischen was mit programmieren macht.
Da sollte es nun doch wirklich mehr als genug Lösungen samt Erklärung bei Google geben!
€: Ok hab die Aufgabe nicht gelesen, sondern nur die Antworten.
Aber so ne Labyrinthaufgabe is doch auch totaler Standard, vorallem wenn man nicht den weg finden soll sondern nur ob es den Weg gibt.
 
Zuletzt bearbeitet:

Gelöschtes Mitglied 160054

Guest
vorallem sind listen sehr einach zu erstellen.
 

Clawg

Guest
wenn er das könnte, dann wäre er ja nicht hier ;)
Problemdefinition ist meist schon die halbe Lösung.
 
Oben