matematykaszkolna.pl
Lista usuwanie elementów Mariusz: Pytający jakie języki znasz C znasz a jak tam z innymi jak np Pascal Chodzi o to że lista w Pascalu byłaby mi bardziej przydatna odkąd w C wprowadzili funkcję realloc #include<stdio.h> #include<stdlib.h> struct node { int key; struct node *next; }; void ListInsert(struct node **L, int xv) { struct node *x; struct node *y; struct node *z; x=(struct node*)malloc(sizeof(struct node)); x−>key=xv; if((*L)==NULL) { (*L)=x; x−>next=NULL; } else { y=(*L); z=NULL; while(y!=NULL && x−>key>y−>key) { z=y; y=y−>next; } if(z==NULL) { x−>next=(*L); (*L)=x; } else { x−>next=y; z−>next=x; } } } struct node *ListSearch(struct node *L,int k) { struct node *p=L; while(p!=NULL && p−>key!=k) p=p−>next; return p; } void ListPrint(struct node *L) { struct node *p=L; while(p!=NULL) { printf("%d −> ",p−>key); p=p−>next; } printf("NULL\n"); } int main() { struct node *L=NULL; int ch; int k; do { printf("1. Wstaw element do listy \n"); printf("2. Wyszukaj element na liscie \n"); printf("3. Wyswietl elementy na liscie \n"); printf("4. Wyjscie \n"); scanf("%d",&ch); switch(ch) { case 1: { printf("Podaj element jaki chcesz wstawic do listy \n"); scanf("%d",&k); ListInsert(&L,k); break; } case 2: { printf("Podaj element jaki chcesz wyszukac na liscie \n"); scanf("%d",&k); if(ListSearch(L,k)==NULL) { printf("Element %d nie znajduje sie na liscie \n",k); } else { printf("Element %d znajduje sie na liscie \n",k); } break; } case 3: { ListPrint(L); break; } case 4: { break; } default: printf("Brak operacji na liscie , sprobuj ponownie wybierajac inny numer\n"); } } while(ch!=4); return 0; } Jak dopisać usuwanie elementu ? http://eduinf.waw.pl/inf/alg/001_search/0083.php Tutaj koleś nawet nie kryje tego że jego kody mogą zawierać błędy
1 cze 12:37
Dziadek Mróz: musisz znać poprzednik i następnik usuwanego elementu, wtedy free() usuwany i poprzednik−>next=następnik. Zupełnie jak w ListInsert bo wstawiasz do posortowanej listy
1 cze 16:48
Dziadek Mróz: http://eduinf.waw.pl/inf/alg/001_search/0086.php#P9 Tylko u siebie usuwasz indeks lub wartość
1 cze 16:49
Pytający: Polski, dość przyzwoicie też angielski, C#, C++, C. Co nieco Java.
1 cze 17:26
sd: Przede wszystkim algorytmy tam zawarte są do celów edukacyjnych, istotą nie są programy lecz same algorytmy poznasz algorytm− trzeba samemu napisac program i ewentualnie ulepszać, modyfikować
1 cze 17:58
Mariusz: Tylko trzeba jeszcze uwzględnić warunki brzegowe lub błędne np co jeśli dany wskaźnik na węzeł do usunięcia pokazuje na NULL albo nie pokazuje na węzeł powiązany z listą Na razie nie przychodzi mi do głowy nic innego co mogłoby powodować błędy Właśnie wolałbym usuwać z danym wskaźnikiem bo gdy w węźle będzie więcej pól to zrobi się bałagan w nagłówku funkcji Przypuśćmy że chcemy listy użyć do operacji na danych w pliku w C mamy tylko tablice znakowe a operacje na nich są utrudnione (w nowszych wersjach C++ pojawiła się klasa łańcuchów ale wtedy na starszym oprogramowaniu kod nie będzie działał) Jak wyglądałyby wczytywanie danych z pliku tekstowego do listy w C (problemem może być np spacja jako separator , poza tym nie wiem czy dobrym pomysłem jest łączenie fgets z fscanf) Lista liczb całkowitych jest mało użyteczna w C++ mamy szablony , w C pozostaje tylko jako typ danych dać void * Jak wyglądałaby lista z typem danych void *
1 cze 18:49
Mariusz: sd No nie wiem czy to jest dobry pomysł uczyć języka z błędami Gdybyś się uczył języka naturalnego z błędami to prawdopodobnie by cię nie zrozumieli i nauka byłaby bez sensu
1 cze 19:15
sd: Algorytmy a języki programowania to dwie różne rzeczy pisał o tym Knuth "The Art of Computer Programming" Polecam lekturę stworzył nawet fikcyjną maszynę cyfrową oraz język asemblera dla niej, w którym prezentowane są wszystkie przykłady programów. Chodziło o to, aby pokazać uniwersalność rozwiązań, a nie sztuczki programowania w określonym języku, którego może za kilka lat nie być w ogóle i mało kto będzie o nim pamiętał
1 cze 19:37
Mariusz: Bez algorytmów i struktur danych dużo programów nie napiszesz więc kiepskim pomysłem jest uczyć algorytmów z błędami i nie dbając o przypadki brzegowe
1 cze 20:26
Mariusz: Moje notatki z przedmiotu algorytmy i struktury danych przepadły bo spisywałem je w zeszycie kiepskiej jakości a chciałbym sobie pewne rzeczy przypomnieć
1 cze 20:30
sd: A kto każe uczyć się algorytmów z błędami? Jak przenosisz dany algorytm na język programowania możesz to zrobić na wiele sposobów, lepiej lub gorzej można coś ulepszyć ale to juz techniki programistyczne wtedy pada wybór struktury danych zależnie od tego co potrzebujesz i co chcesz osiągnąć z jaką wydajnością itd.
1 cze 20:47