Chirurgia cranio-cerebrală minim invazivă
Tehnicile minim invazive impun utilizarea unei tehnologii ultramoderne. Endoscoapele operatorii de diverse tipuri, microscopul operator dedicat, neuronavigația, neuroelectrofiziologia, tehnicile avansate de anestezie, chirurgia cu pacientul treaz reprezintă armamentarium fără de care neurochirurgia prin "gaura cheii" nu ar fi posibilă. Folosind tehnicile de mai sus, tratăm un spectru larg de patologii cranio-cerebrale. www.neurohope.ro |
Concatenare doua liste dublu inlantuite in C
Last Updated: May 10 2023 21:29, Started by
DarkAngel03
, May 10 2023 12:43
·
0
#1
Posted 10 May 2023 - 12:43
Buna ziua,
Am si eu nevoie de putin ajutor la o problema in limbajul C. Incerc sa fac concatenarea a doua liste dublu inlantuite, dar nu reusesc. Mentionez ca fisierele list.c si list.h exista deja in program. Asta este ce am incercat sa fac: #include <stdio.h> #include <stdlib.h> #include "list.h" #define N 5 #define M 3 float readFloat() { float x; scanf("%f", &x); return x; } List concatenateLists(List L1, List L2) { List L3 = newList(); // a treia lista Iterator it; for (it = first(L1); it != NULL; it = next(L1, it)) { insert(L3, last(L3), get(L1, it)); } for (it = first(L2); it != NULL; it = next(L2, it)) { insert(L3, last(L3), get(L2, it)); } return L3; } int main() { List L1 = newList(); // prima lista List L2 = newList(); // a doua lista float nValues[N], mValues[M]; int i; printf("Introduceti %d valori pentru prima lista:\n", N); for (i = 0; i < N; i++) { nValues[i] = readFloat(); insert(L1, last(L1), &nValues[i]); } printf("Introduceti %d valori pentru a doua lista:\n", M); for (i = 0; i < M; i++) { mValues[i] = readFloat(); insert(L2, last(L2), &mValues[i]); } // concatenarea celor doua liste intr-o singura lista List L3 = concatenateLists(L1, L2); // afisarea continutului informativ al fiecarui nod din a treia lista printf("Lista concatenata este: "); Iterator it; for (it = first(L3); it != NULL; it = next(L3, it)) { printf("%0.1f ", *(float *)get(L3, it)); } printf("\n"); deleteList(L1); deleteList(L2); deleteList(L3); return 0; } Ceea ce afiseaza este: Introduceti 5 valori pentru prima lista: 1 2 3 4 5 Introduceti 3 valori pentru a doua lista: 10 15 20 Lista concatenata este: 3.0 4.0 5.0 1.0 15.0 20.0 10.0 2.0. Lista concatenata afisata nu este corecta. Ce trebuie sa fac? Edited by MarianG, 10 May 2023 - 14:34. |
#3
Posted 10 May 2023 - 16:37
O lista nu e un sir, pe scurt.
Cand incepi sa populezi memoria alocata la crearea listei, aceasta se face aleator, nu dupa cum spune iteratorul, care cuantifica doar gradul de umplere a listei. Valorile introduse in lista vor fi trimise la deruta, nu in ordinea crescatoare a pozitiilor ei, pana cand iteratorul spune stop, gata, nu mai avem memorie alocata obiectului. Daca afisezi L1 sau L2, vei observa ca pozitiile listelor sunt ocupate la intamplare, fara nici o constrangere. Chiar daca sortezi L1 si L2 inainte de concatenare, L3 va aparea tot un ghiveci aleator. Lista e o multime neordonata de valori. |
#4
Posted 10 May 2023 - 17:15
Adresele elementelor sunt inlocuite la fiecare iteratie, cred ca ar trebui sa mearga asa:
#include <stdio.h> #include <stdlib.h> #include "list.h" #define N 5 #define M 3 float readFloat() { float x; scanf("%f", &x); return x; } List concatenateLists(List L1, List L2) { List L3 = newList(); // a treia lista Iterator it; for (it = first(L1); it != NULL; it = next(L1, it)) { insert(L3, last(L3), *(float *)get(L1, it)); } for (it = first(L2); it != NULL; it = next(L2, it)) { insert(L3, last(L3), *(float *)get(L2, it)); } return L3; } int main() { List L1 = newList(); // prima lista List L2 = newList(); // a doua lista float nValues[N], mValues[M]; int i; printf("Introduceti %d valori pentru prima lista:\n", N); for (i = 0; i < N; i++) { nValues[i] = readFloat(); insert(L1, last(L1), &nValues[i]); } printf("Introduceti %d valori pentru a doua lista:\n", M); for (i = 0; i < M; i++) { mValues[i] = readFloat(); insert(L2, last(L2), &mValues[i]); } // concatenarea celor doua liste intr-o singura lista List L3 = concatenateLists(L1, L2); // afisarea continutului informativ al fiecarui nod din a treia lista printf("Lista concatenata este: "); Iterator it; for (it = first(L3); it != NULL; it = next(L3, it)) { printf("%0.1f ", *(float *)get(L3, it)); } printf("\n"); deleteList(L1); deleteList(L2); deleteList(L3); return 0; } |
#5
Posted 10 May 2023 - 21:29
|
Anunturi
▶ 0 user(s) are reading this topic
0 members, 0 guests, 0 anonymous users