Matroids Matheplanet Forum Index
Moderiert von matroid
Informatik » Algorithmen / Datenstrukturen » Element an bestimmte Position einfügen in einer einfach verketteten Liste
Druckversion
Druckversion
Antworten
Antworten
Autor
Universität/Hochschule Element an bestimmte Position einfügen in einer einfach verketteten Liste
unixmelo
Wenig Aktiv Letzter Besuch: vor mehr als 3 Monaten
Dabei seit: 07.01.2020
Mitteilungen: 21
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Themenstart: 2020-06-11


Hallo liebe Community,

meine Aufgabe besteht darin eine Funktion in C zu schreiben. Diese soll folgende Funktionsweise erfüllen:

int insert_pos(int v, int pos, list * l)

Die Funktion soll ein neues Listenelement mit dem Wert v an der Position pos in die Liste l einfügen. Dabei ist die Position des Head Elements einer Liste immer 0.
Falls pos keine Position in der Liste l ist, dann soll die Funktion -1 als Rückgabewert haben, sonst 0.
Es handelt sich um eine einfach verkette Liste.

Leider habe ich keinen wirklichen Ansatz wie ich das Element einfügen kann.

Über eure Hilfe freue ich mich!



Eine Notiz zu diese Forumbeitrag schreiben Notiz   Profil  Quote  Link auf diesen Beitrag Link
ligning
Senior Letzter Besuch: in der letzten Woche
Dabei seit: 07.12.2014
Mitteilungen: 3175
Aus: Berlin
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.1, eingetragen 2020-06-11


Das ist mit diesem Interface nicht möglich. Poste bitte mal die originale Aufgabenstellung, inklusive der dazugehörigen Typdefinitionen.

[Verschoben aus Forum 'Informatik' in Forum 'Algorithmen / Datenstrukturen' von ligning]


-----------------
⊗ ⊗ ⊗



Eine Notiz zu diese Forumbeitrag schreiben Notiz   Profil  Quote  Link auf diesen Beitrag Link
unixmelo
Wenig Aktiv Letzter Besuch: vor mehr als 3 Monaten
Dabei seit: 07.01.2020
Mitteilungen: 21
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.2, vom Themenstarter, eingetragen 2020-06-11


Die genaue Aufgabenstellung lautet:

Ergänzen Sie eine Funktion int insert pos(int v, int pos, list * l), die ein neues Listenelement mit dem Wert v an der Position pos in die Liste l einfugt. Die Position des Head-Elements einer Liste ist immer 0.
Falls pos keine Position in der Liste l ist, dann gibt die Funktion -1 zuruck, sonst ¨ 0.

Dabei ist die Liste eine einfach verkette Liste ganzer Zahlen



Eine Notiz zu diese Forumbeitrag schreiben Notiz   Profil  Quote  Link auf diesen Beitrag Link
thureduehrsen
Senior Letzter Besuch: in der letzten Woche
Dabei seit: 13.11.2007
Mitteilungen: 857
Aus: Kiel, Deutschland
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.3, eingetragen 2020-06-11


Hallo unixmelo,

ungefähr so funktioniert das:

Fange die Fehlerfälle ab;
gehe die Liste durch bis zu dem Knoten, nach dem das neue
Element eingefügt werden soll;
biege zwei Zeiger um.

Hier mal Teile dessen, wie ich es gelöst habe.
Mehr Code stelle ich bereit, nachdem du gezielte Fragen gestellt
hast.

  1. /*********************** Strukturdefinitionen *************************/
  2.  
  3. typedef struct my_node node;
  4.  
  5. struct my_node {
  6. int value;
  7. node* next;
  8. };
  9.  
  10. typedef struct my_linkedlist LinkedList;
  11.  
  12. struct my_linkedlist {
  13. node* head;
  14. node* tail;
  15. int length;
  16. };

später dann...
C
  1. /* Knoten mittendrin einfuegen */
  2. LinkedList* appendNodeAtPosition (LinkedList* l,
  3. node* n,
  4. int posAfterInsertion) {
  5.  
  6. if (posAfterInsertion < 1 || posAfterInsertion > 1 + l->length) {
  7. printf("Ungueltige Einfuegeposition!\n\n");
  8. exit(1);
  9. }
  10.  
  11. if (isEmpty(l)) {
  12. appendNode(l, n);
  13. } else {
  14. node* insertafterthis = getNthNode(l, posAfterInsertion - 1);
  15. node* insertbeforethis = insertafterthis->next;
  16. n->next = insertbeforethis;
  17. insertafterthis->next = n;
  18. }
  19. return l;
  20. }
  21.  

Aufgabe: erkläre diesen Code Zeile für Zeile;
ich hoffe, dass die Funktionsnamen sprechend genug sind.
Es fehlt auch noch eine Anweisung in der Funktion appendNodeAtPosition.

Um diese Funktion auf deine Spezifikation umzuschreiben, ist doch einiges zu tun; meine Funktion gibt einen Zeiger auf den Listenkopf zurück.

mfg
thureduehrsen

[Die Antwort wurde vor Beitrag No.1 begonnen.]



Eine Notiz zu diese Forumbeitrag schreiben Notiz   Profil  Quote  Link auf diesen Beitrag Link
zippy
Senior Letzter Besuch: in der letzten Woche
Dabei seit: 24.10.2018
Mitteilungen: 1494
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.4, eingetragen 2020-06-11


2020-06-11 19:35 - ligning in Beitrag No. 1 schreibt:
Das ist mit diesem Interface nicht möglich.

Warum soll das nicht möglich sein?

[Die Antwort wurde nach Beitrag No.2 begonnen.]



Eine Notiz zu diese Forumbeitrag schreiben Notiz   Profil  Quote  Link auf diesen Beitrag Link
ligning
Senior Letzter Besuch: in der letzten Woche
Dabei seit: 07.12.2014
Mitteilungen: 3175
Aus: Berlin
Zum letzten BeitragZum nächsten BeitragZum vorigen BeitragZum erstem Beitrag  Beitrag No.5, eingetragen 2020-06-11


2020-06-11 19:41 - zippy in Beitrag No. 4 schreibt:
2020-06-11 19:35 - ligning in Beitrag No. 1 schreibt:
Das ist mit diesem Interface nicht möglich.

Warum soll das nicht möglich sein?
Ich hab wohl die falsche Annahme getroffen, was genau der Typ list sein soll.



Eine Notiz zu diese Forumbeitrag schreiben Notiz   Profil  Quote  Link auf diesen Beitrag Link
unixmelo hat die Antworten auf ihre/seine Frage gesehen.
Neues Thema [Neues Thema] Antworten [Antworten]    Druckversion [Druckversion]

 


Wechsel in ein anderes Forum:
 Suchen    
 
All logos and trademarks in this site are property of their respective owner. The comments are property of their posters, all the rest © 2001-2020 by Matroids Matheplanet
This web site was originally made with PHP-Nuke, a former web portal system written in PHP that seems no longer to be maintained nor supported. PHP-Nuke is Free Software released under the GNU/GPL license.
Ich distanziere mich von rechtswidrigen oder anstößigen Inhalten, die sich trotz aufmerksamer Prüfung hinter hier verwendeten Links verbergen mögen.
Lesen Sie die Nutzungsbedingungen, die Distanzierung, die Datenschutzerklärung und das Impressum.
[Seitenanfang]