Witam, jak w temacie mam do napisania kilka programów lecz mnie interesuje jeden z wielu i chciałbym go zrobić, otóż zadanie jest takie:
Program generuje wskazaną przez użytkownika parzystą ilość węzłów listy jednokierunkowej z polami danych wypełnionymi losowo liczbami z zakresu od 0 do 20. Wyświetla zawartość listy. Pobiera od użytkownika liczbę i zwraca informację, czy podana liczba jest na liście.
I teraz mam takie pytanko czy taka funkcja może być:
int LISTA::szukaj(int x)
{
ELEMENT *q=inf.glowa;
while (q != NULL)
{
if (q->wartosc==x) return SUKCES;
q=q->nastepny;
}
return PORAZKA;
}
oczywiście Typ wyliczeniowy jest wcześniej zadeklarowany;
Oczywiście można dorzucić funkcje srand(time(0)) a z nią rand()%21 żeby wyszukiwało te liczby od 0-20 ale to jest akurat w części int main(). Proszę o wyrozumiałość dla mnie gdyż nie jestem z zawodu programistą a tylko chce się nauczyć i zrozumieć.
Pozdrawiam i czekam na podpowiedzi.
Zobacz jak rozwiązałem to w tym temacie: Problem z lista
Dołączam kod tutaj. Tam słusznie ktoś zauważył, że rekurencja spowalnia czas usuwania i zajmuje zbyt dużo pamięci:
#include <iostream>
using namespace std;
//na początek typedef się przyda
typedef struct list List;
struct list
{
int value;
List* nxt;
};
List* AddNewElement(List* root, int value)
{
List* temp = root;
while(temp->nxt != NULL)
temp = temp->nxt;
List* _new = (List*)malloc(sizeof(List));
temp->nxt = _new;
_new->value = value;
_new->nxt = NULL;
return root; // zwracamy korzeń, bo to lista jednokierunkowa, nie mamy możliwości powrotu do korzenia w inny sposób jak właśnie przez zwrócenie korzenia w funkcji
}
List* SeekValue(List* root, List* temp, int x)
{
if(temp == NULL)
return root;
if(temp->value == x)
return temp;
else
SeekValue(root, temp->nxt, x);
}
void DeleteAllMembers(List* root)
{
while(root != NULL)
{
List* next = root->nxt;
free(root);
root = next;
}
}
int main(int argc, char* argv[])
{
List* root = (List*)malloc(sizeof(List));
root->nxt = NULL;
root->value = 1;
AddNewElement(root, 2);
AddNewElement(root, 3); // opcjonalnie tak,
root = AddNewElement(root, 4); // lub tak. Daje to ten sam wynik
cout << root->nxt->nxt->nxt->value << endl;
List* find = SeekValue(root, root, 3);
find == root ? cout << "Nie ma takiej wartosci" << endl : cout << "Ta wartosc to: " << find->value << endl;
cout << "To wciaz ten sam korzen " << root->value << endl;
DeleteAllMembers(root);
getchar();
return 0;
}
Wszystko fajnie funkcja szukaj jest niemalże identyczna jak moja tyle że program jest w C, a ja potrzebuje kodu w C++, lecz program i tak się nie kompiluje z zalecanym zestawem opcji tj: -ansi -pedantic -Wall -W -Wconversion -Wshadow -Wcast-qual -Wwrite-strings
Sam program nie nawiązuje całościowo co do mojej treści, pokazuje tylko liste i wyszukiwania wzorca.
Może być, ale ja osobiście zmieniłbym jej nazwę na zawiera lub czyZawiera i zwracał typ bool
To jest akurat najmniej istotny element w tym programie:) cout-a w każdej chwili można dorzucić z taką informacją:)
Czemu uważasz, że to nie jest w C++? Ja osobiście widzę tam cout a nie printf, poza tym jest <iostream> i using namespace std. Zupełnie nie widzę, żeby to było w C, choć fakt, był to kod dla osoby piszącej w C.