• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Lista dwukierunkowa

Object Storage Arubacloud
0 głosów
613 wizyt
pytanie zadane 6 stycznia 2017 w C i C++ przez bllackbirrd Nowicjusz (150 p.)
Dostałam za zadanie napisać listę dwukierunkową. Nigdy w życiu nie miałam z tym styczności, prowadzący bez słowa wprowadzenia przesłał nam tylko treść zadania i powiedział "róbcie".
O wskaźnikach wiem tyle co wyczytałam w necie i to tylko w teorii.

Tutaj treść zadania: http://pastebin.com/vaMLWwTp

Chciałabym, żeby ktoś mi wyjaśnił od czego zacząć i jak zawrzeć kolejne opcje w liście (dodawanie nowej osoby, usuwanie jej itd)

Błagam o pomoc :c

2 odpowiedzi

+1 głos
odpowiedź 6 stycznia 2017 przez timrh Mądrala (6,030 p.)
wybrane 7 stycznia 2017 przez bllackbirrd
 
Najlepsza

No cóż, lista ma być strukturą.

struct List
{
 //tutaj będzie cały kod
}

Wskaźniki, przykład z wyjaśnieniem:

void MetodaBezWskaznika(int var) //metoda wykorzystuje kopię zmiennej, nie pracuje na oryginale dlatego wszelkie zmiany zostaną zachowane tylko we wnętrzu tej funkcji
{
	var += 5;
}

void MetodaZeWskaznikiem(int & var) //metoda wykorzystuje referencję do zmiennej, pracuje na oryginale dlatego wszelkie zmiany będą zachowane przez całe życie zmiennej przysłanej do metody.
{
	var += 5;
}

int main()
{
	int variable = 5;
	int * pointerToVariable = &variable;   //wskaźnik na daną zmienną

	MetodaBezWskaznika(variable);
	printf("%d\n", variable); //5
	MetodaZeWskaznikiem(*pointerToVariable);
	printf("%d", variable); //10
}

Lista ma zawierać referencje do struktur Osoba które mają w sobie struktury opisujące daty urodzin osób które one reprezentują, ma to wyglądać mniej więcej tak:

struct Osoba
{
	int ID;
	char * imie;
	char * nazwisko;
	char * miasto;
	Date  dataUrodzenia;
	Osoba * poprzedni;
	Osoba * nastepny;

	Osoba(int _ID, char * _imie, char * _nazwisko, char * _miasto, Osoba * _poprzedni, Osoba * _nastepny, Date _dataUrodzenia)
	{
		ID = _ID; 
		imie = _imie; //itd..
	}
};

struct Date
{
	int dzien, miesiac, rok;
};

Mam nadzieję że trochę pomogłem, gdzieś mogą być błędy dlatego że nie piszę w C tylko w C++, ale myślę że nie będzie. Więcej o implementacji listy dwukierunkowej w C tutaj: 

http://eduinf.waw.pl/inf/alg/001_search/0087.php

komentarz 7 stycznia 2017 przez bllackbirrd Nowicjusz (150 p.)
Dziękuję za rzetelną odpowiedź i pomoc w dalszym pisaniu programu.
Polecam użytkownika wszystkim szukającym dobrej duszyczki.
10/10.
+1 głos
odpowiedź 6 stycznia 2017 przez operator Stary wyjadacz (10,920 p.)
Wprowadzę element listy A, element następny w A NEXT, element poprzedni w A PREV, n - wielkość listy, i - index.

Dla jednego A NEXT i PREV wynoszą A.

Dla dwóch A

A[0] NEXT to A[1] oraz A[1] PREV to A[0]

oraz

A[1] NEXT to A[0] oraz A[0] PREV to A[1].

Więc:

1.a) Dla każdego A jeśli 0 <= i < n to A[i] NEXT wynosi A[i+1],

1.b) i+1 = n wtedy A[n-1] wynosi A[0]

oraz

2.a) Dla każdego A jeśli 0 <= i+1 <= n-1 to A[i] PREV wynosi A[i-1],

2.b) i = 0 wtedy A[i] PREV wynosi A[n-1]

Mając taki schemat możesz rozrysować jak mogło by wyglądać dodawanie i usuwanie A.

(piszcie jeśli gdzieś się pomyliłem od razu poprawię)
komentarz 6 stycznia 2017 przez bllackbirrd Nowicjusz (150 p.)
no oki ale jak zacząć to budować. Jestem na poziomie 0 z programowaniem, więc jeśli chcesz mi pomóc to musiałbyś mi wytłumaczyć wszystko łopatologicznie... Byłabym wniebowzięta, jeśli byś mi pomógł ;)

Podobne pytania

0 głosów
1 odpowiedź 1,554 wizyt
pytanie zadane 2 kwietnia 2017 w C i C++ przez chacken Użytkownik (820 p.)
0 głosów
1 odpowiedź 261 wizyt
0 głosów
1 odpowiedź 333 wizyt

92,535 zapytań

141,376 odpowiedzi

319,449 komentarzy

61,920 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...