Ich habe diesen Code:verlinkte Listen Ausgabe
#include "stdlib.h"
#include "stdio.h"
typedef struct lista TLista;
struct lista{
char dado;
TLista* prox;
}lista;
TLista* insere(TLista* l, char dado){
TLista* aux;
TLista* anterior;
if(l == NULL){
l = (TLista*) malloc(sizeof(TLista));
l->dado = dado;
l->prox = NULL;
}else{
aux = l;
while(aux != NULL){
anterior = aux;
aux = aux->prox;
}
aux = (TLista*) malloc(sizeof(TLista));
anterior->prox = aux;
aux->dado = dado;
aux->prox = NULL;
}
return l;
}
void imprime(TLista* l){
if(l == NULL){
printf("A lista esta vazia");
}else{
while(l != NULL){
printf("%c", l->dado);
l = l->prox;
}
}
void concatena(TLista* lista1, TLista* lista2){
TLista* aux = lista1;
if(!lista1){
lista1 = lista2;
printf("\nInside function: ");
imprime(lista1);
}else{
while(aux->prox != NULL){
aux = aux->prox;
}
aux->prox = lista2;
}
}
int main() {
TLista* lista1 = NULL;
TLista* lista2 = NULL;
printf("\n");
lista1 = insere(lista1, 't');
lista1 = insere(lista1, 'e');
lista1 = insere(lista1, 's');
lista1 = insere(lista1, 't');
lista1 = insere(lista1, 'e');
imprime(lista1);
printf("\n\n\n\n");
lista2 = insere(lista2, 'x');
lista2 = insere(lista2, 'u');
lista2 = insere(lista2, 'l');
lista2 = insere(lista2, 'a');
lista2 = insere(lista2, 'm');
lista2 = insere(lista2, 'b');
lista2 = insere(lista2, 's');
concatena(lista1,lista2);
printf("\nOutside function: ");
imprime(lista1);
printf("\n\n");
return 0;
}
Die Funktionen Namen wurden in portugiesischer Sprache geschrieben. So soll die Funktion concatena
zwei Listen zusammenführen und in der Tat wird es tun, wenn lista1
nicht NULL
ist, aber wenn ich diese Zeilen auf Kommentar:
lista1 = insere(lista1, 't');
lista1 = insere(lista1, 'e');
lista1 = insere(lista1, 's');
lista1 = insere(lista1, 't');
lista1 = insere(lista1, 'e');
imprime(lista1);
die Funktion concatena
sollte die erste Liste als NULL
und die zweiten Empfang als xulambs
. Demnach sollte die lista1
die Kopfadresse lista2
erhalten, aber wenn die Funktion endet, ist die Ausführung lista1
leer.
gedebuggt ich die Werte von lista1
Druck kurz nach lista2
‚s Adresse Kopf erhalten und es funktioniert gut, aber wenn sie auf die Hauptfunktion bekam, lista1
noch NULL
.
Kann mir jemand helfen herauszufinden, was los ist? Dank
Einige Übersetzungen:
- lista = Liste
- Dado = data
- prox = nächste
- imprime = Druck
- hinzufügen und = hinzufügen
- concatena = fusionieren
Ich habe erkannt, wie Sie Ihre Variablen mit Namen zu nennen Sie Ihr Leben erleichtern verstehen konnte ... – Eekan
1) Sie sind mit Standard-Header verwenden '# include <...>'. 2) Wirf nicht den Rückgabewert von "malloc". 3) Code in Englisch. Ja wirklich.4) Sie haben dort eine unbenutzte globale Variable namens 'lista'. Werde es los. 5) Verwende Whitespace (zum Beispiel um 'if'). Verbessert die Lesbarkeit. 6) Verwenden Sie Rückgabewerte. 'concatena' sollte die neue Liste zurückgeben. 7) Wenn du eine Funktion schreibst, die 'malloc' ist, schreibe eine, die' free 'auch ist. –
Mann, dieser Code war für Studien, natürlich in einem Produkt, das ich nicht in Portugiesisch programmieren werde, auch das "" in Include wird von der Atome-Editor-Vervollständigung gesetzt, auch die Funktion concatenas Prototyp war Pflicht mit void Rückgabewert von meinem Lehrer, wenn Ich habe eine Liste zurück bekommen, es wäre viel einfacher. Über die freie, natürlich in einem Produkt würde ich frei verwenden, Speicherblöcke während der Ausführung freizugeben. BTW danke für die anderen Tipps –