Ich versuche Elemente einer Datei in eine verkettete Liste einzufügen, ich habe zwei Funktionen verwendet, eine, die lädt und die Einfügungen, die Funktion lädt läuft anscheinend in der richtigen Weise, aber die Funktion einfügen startet die Implementierung und endet nicht, beim Testen habe ich festgestellt, dass sie es schafft, die ersten 3 Zeilen der Datei eingeben, aber die Einfügung nicht korrekt abgeschlossen, da der Code lang ist, folgt, dass ein Teil davon Probleme:Verknüpfte Liste - Einfügen
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define RECS_PATIO 2
struct Rec_Emp {
char nome_rec[10];
int uso_rec;
int taxa_rec;
/* struct Rec_Emp *prox; */
};
typedef struct Rec_Emp recuperadora;
struct Patio {
char iden_patio;
int capacidade;
struct Patio *prox;
struct Rec_Emp *lista[RECS_PATIO];
};
typedef struct Patio patio;
void insere_patio (patio *cabeca, patio *novo) {
patio *p = cabeca;
while (p->prox != NULL)
p = p->prox;
novo->prox = p->prox;
p->prox = novo;
}
void carrega_patio (patio *pa, patio p, recuperadora r1, recuperadora r2) {
patio *pt = pa;
FILE *f;
f = fopen ("portorec.txt", "rt");
if (f == NULL) {
printf ("Problema na abertura do arquivo");
return;
}
while (!feof(f)) {
fscanf (f, "%d %c %s %s %d %d %d %d", &p.capacidade, &p.iden_patio, r1.nome_rec, r2.nome_rec, &r1.uso_rec, &r2.uso_rec, &r1.taxa_rec, &r2.taxa_rec);
p.lista[0] = &r1;
p.lista[1] = &r2;
insere_patio(pt, &p);
}
fclose(f);
}
int main {
patio *PT;
PT = malloc(sizeof(patio));
PT->prox = NULL;
patio pat;
recuperadora rec1, rec2;
carrega_patio(PT, pat, rec1, rec2);
}
Datei
600000 A REC01 - 0 -1 6000 -1
600000 B REC01 REC03 0 0 6000 8000
600000 C REC02 REC03 0 0 6000 8000
600000 D REC02 - 0 -1 6000 -1
2400000 E ER01 ER02 0 0 8000 8000
2400000 F REC04 ER01 0 0 8000 8000
2400000 G REC04 - 0 -1 8000 -1
2400000 H REC05 - 0 -1 8000 -1
2400000 I REC05 - 0 -1 8000 -1
2400000 J ER02 - 0 -1 8000 -1
On-Einsatz, sind Sie in der Regel erforderlich, um die * Adresse * die Liste als Parameter zu übergeben, da, wenn der Speicher Wird für den Knoten reserviert und als Kopf (die Adresse der Liste) zugewiesen, müssen Sie auf den eigentlichen Zeiger selbst und nicht auf eine Kopie handeln. Aus diesem Grund muss die Einfügung mindestens zwei Bedingungen überprüfen: (1) ob dies der erste Knoten in der Liste ist; und (2) falls nicht, iteriere zum nächsten freien Knoten zum Einfügen. –
Ich denke, das OP arbeitet daran, indem es immer einen Dummy-Knoten am Anfang der Liste verwendet. Trading-Heap für Code, sozusagen. –
Ja, deshalb wurde das 'allgemein' verwendet, aber die Verwendung eines Dummy-Knotens zum Maskieren der Zuweisung lässt oft einen wichtigen Teil des Lernens aus, der notwendig ist, um das Manipulieren des ersten Knotens in einer Liste vollständig zu verstehen. Deshalb habe ich es als Kommentar weggelassen. –