C Funktionen zum arbeiten mit Listen

Mathias09876

Ensign
Registriert
Nov. 2010
Beiträge
235
Hallo zusammen,

ich habe vor ein Programm zu schreiben in dem ich mit einer großen Liste arbeiten muss (bis zu 5000 Elemente und pro Element 5 Eigenschaften).
Deshalb wollte ich fragen, ob von euch jemand schon bestehende Funktionen kennt, mit denen ich die Liste z.b. durchsuchen kann. Meine Google-Suche hat leider nichts gebracht.
Im Zweifelsfall müsste ich diese Funktionen selbst schreiben, aber ich dachte mir evtl gibt es da schon welche, die dann auch etwas effizienter arbeiten als meine.
Danke für die Hilfe!

Grüße
Mathias
 
Wenn du einen selbstdefinierten Datentypen hast, wirst du dir in C wohl passende Funktionen dazu auch selber schreiben müssen.
Ansonsten kann ich toeffi zustimmen, Arrays zu benutzen.
Du kannst du aber auch mal gucken, ob es jemanden im Netz gibt, der ebenfalls große Listen benutzt. Vielleicht findest du dann dort auch die passenden Listenfunktionen.
 
Schau mal nach der STL. Dort sollten solche Funktionen drin sein.
 
STL gibts in C nicht ;) Und 5000 elemente ist ja nicht wirklich ne große anzahl, legst du das denn alles auf den Heap oder kommt das auf den Stack?
 
Das Arbeiten mit einer Liste ist natuerlich komfortabler und macht sich auch besser, gerade wenn es darum geht Elemente in die Liste einzufuegen. Kommt halt darauf an was du mit deinen 5000 "Datensaetzen" machen moechtest.

Wenn dir ein Array nicht reichen sollte, ist eine doubly -oder single linked list ja relativ schnell programmiert.
 
Ich will aus diesen Listen eigentlich nur Informationen lesen und verarbeiten.
Dazu ist das wichtigste eigentlich, dass ich sie effizient durchsuchen kann. Dann werde ich mir wohl doch eine linked list bauen. Eigentlich reicht doch eine single oder?
Habe mir das gerade so gedacht, dass ich die Liste nach dem Alphabet sortiere und bei jedem neuen Buchstaben einen eigenen Pointer mache um schneller an das gesuchte Element zu kommen.
Bringt mir das einen Geschwindigkeitsvorteil oder ist das in meinem Bereich >10000 egal?

Grüße
 
Also ich glaube es ist sogar langsamer wenn ich da an die ganze speicherallokation und das aufräumen denke. Da bist du mit sicherheit mit nem rudimentären array schneller.
 
Ok, Danke für die Hilfe.
Dann werde ich jetzt ein einfaches Array nehmen, zwischen einem Array und einer einfachen linked list ist ja eig auch kein Unterschied
 
Eine Linked-List ist nicht effizient bei Suchanfragen. Ein Array übrigens auch nicht. Und dass es zwischen beidem keinen Unterschied gibt ist auch vollkommen falsch.

Wenn du eine effiziente Suche haben willst brauchst du völlig andere Datenstrukturen!

An deiner Stelle würde ich mir mal SQLite ansehen. Das ist eine embedded SQL Datenbank mit effizienten Indexstrukturen zum Suchen von Datensätzen. Die ist relativ einfach in der Bedienung und hier vermutlich die schnellste Lösung.
 
Hmm Danke für den Link, werde mir das mal anschaun...
Ich glaube für meinen Zweck wäre das tatsächlich besser.
 
@Topic:
Was für Anforderungen hast du denn an die Liste?

Häufige Einfügungen, und wenn ja wo (Anfang, Mitte, Ende)? Oder wenig einfügen und dafür schneller Zugriff? Willst du schnell suchen können? Falls ja, scharf oder unscharf (Hash oder nicht Hash) Brauchst du eine (totale) Ordnung und wenn ja, nach welchem Kriterium?

Die APR (http://apr.apache.org) ist sonst eine sehr nette, plattformübergreifende Bibliothek, die unter anderem Tabellen und Hashes mitbringt.
 
7H3 N4C3R schrieb:
@Topic:
Was für Anforderungen hast du denn an die Liste?

Häufige Einfügungen, und wenn ja wo (Anfang, Mitte, Ende)? Oder wenig einfügen und dafür schneller Zugriff? Willst du schnell suchen können? Falls ja, scharf oder unscharf (Hash oder nicht Hash) Brauchst du eine (totale) Ordnung und wenn ja, nach welchem Kriterium?

Die APR (http://apr.apache.org) ist sonst eine sehr nette, plattformübergreifende Bibliothek, die unter anderem Tabellen und Hashes mitbringt.

Einfügen eigentlich garnichts, das Programm soll sie nur durchsuchen können. Geordnet hätte ich sie nach Namen, wobei zu jedem Namen noch ein paar Eigenschaften dazu kommen. Ich habe mir mal noch ein paar Gedanken gemacht und hier mal ein Beispiel, was ich gerne hätte:

Bezeichnung:-------1BE = :------Portion(100g):
Blattsalat mit Öl----1333,33gr--0,08 BE
Blattspinat frisch---2000,00gr--0,05 BE

Durchsucht werden sollte hier die Eigenschaft "Bezeichnung".
Wenn der Benutzer eingibt "Bla" soll ihm bereits Blattsalat bzw. Blattspinat vorgeschlagen werden. Gibt er aber Spinat ein sollte er auch zu Blattspinat kommen.
Mit einem Array oder linked listen ist das nicht sonderlich effektiv zu machen nehme ich an, habe die Idee also bereits verworfen.
Die Frage wäre nun, ob das mit SQLite funktioniert?

Bisher liegt die Liste als Textdatei oder Excel-Tabelle vor.

Grüße
 
Zuletzt bearbeitet:
Und du bist gezwungen es mit C zu machen? Sonst könntest du das ja mit einer anderen Sprache machen und dir das ganze schonmal syntaktisch etwas erleichtern.
 
toeffi schrieb:
Und du bist gezwungen es mit C zu machen? Sonst könntest du das ja mit einer anderen Sprache machen und dir das ganze schonmal syntaktisch etwas erleichtern.

Nein gezwungen nicht unbedingt, ich hatte an C gedacht, da ich mich da am besten auskenne. VB (aber eher ungern) oder C# wären auch machbar. C++ müsste ich auch erst neu lernen ^^
 
Zurück
Oben