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
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