Pomoć oko jednog zadatka

poruka: 2
|
čitano: 778
|
moderatori: Lazarus Long, XXX-Man, vincimus
1
+/- sve poruke
ravni prikaz
starije poruke gore
8 godina
neaktivan
offline
Pomoć oko jednog zadatka

Ako bi netko znao pomoći kako se rješava ovakav tip zadatak:

 

Napišite program koji ima zadan tip podatka Red za koji su definirane funkcije za inicijalizaciju reda, dodavanje elementa u red te za brisanje elementa iz reda. Prototipovi navedenih funkcija su:
 
void initRed(Red *red);
int dodaj(int element, Red *red);
int skini(int *element, Red *red);
 
Funkcije dodaj i skini vraćaju 1 ako je operacija dodavanja ili skidanja uspjela, a 0 inače. Napišite i funkciju čiji je prototip:
 
void izbaci(Red *red);
 
Navedena funkcija iz reda izbacuje sve one elemente koji su manji ili jednaki od svog sljedbenika. Zadnji element se ne izbacuje. Primjerice, ako je red sadržavao sljedeće elemente: 6, 7, 4, 9, 2, 5, 3, 3, 2, 5, 4, 2 nakon poziva funkcije red će imati elemente 7, 9, 5, 3, 5, 4, 2.
 
Interakcija s programom je u obliku izbornika od triju opcija (dodavanje, skidanje i kraj interakcije) i odvija se sve dok korisnik ne odabere kraj. Na kraju interakcije poziva se funkcija izbaci, a potom se ispisuje red.
 
0 1 hvala 0
15 godina
neaktivan
offline
Re: Pomoć oko jednog zadatka

Red je struktura podataka u kojoj se element dodaje na kraj, odnosno skida s početka.

 

Od tebe se traži da napraviš strukturu koja imitira red. Najjednostavnija ideja je red imitirati pomoću niza. U svojoj strukturi Red, imati ćeš varijablu int podaci[] i dva indexa int pocetaki int kraj. pocetak pokazuje na prvi element u nizu, a krajna zadnji element.

Skica:

podaci[] = |1|2|3|4|5|_|_|....

pocetak= 0

kraj= 4

 

Funkcije

- initRed - Stvoris novi, prazni red. pocetak stavis na 0, kraj na -1.

- dodaj - Dodavanje elementa, PRVO kraj inkrementiras, i novi element stavis na podaci[kraj]

- skini - Skidanje elementa, treba pripaziti ako je niz prazan. Niz nije prazan ako je pocetak <= kraj. (Primijeti, kad inicijaliziras prazan red, ovo ne vrijedi). Ako niz nije prazan, element = podaci[pocetak] i pomaknes pocekat, pocetak++

 

Vjerojatno ces niz podaci[] postaviti na neku zadanu velicinu, i nazovi je max. Kad dodajes element u niz, provjeri je li niz pun, tj. je li kraj = max. U tom slučaju ne mozes dodati element, pa vratis 0. Ako ima mjesta, dodaj element na vec opisan nacin i vrati 1.

Za skidanje slično. Ako je niz prazan, nemas sta dodati pa vrati 0. Inace, na gore opisan nacin dodas element i vratis 1.

 

- izbaci - Index i ide od pocetak do kraj-1. Pitalica podaci[i] <= podaci[i+1]. Ako je, pomakni sve elemente od tog mjesta u lijevo. I na kraju smanji kraj za 1.

Npr:

5|4|7|8|9|.. kraj = 4

5|7|8|9|.. kraj = 3

 

Ovo je najprimitivnije rješenje, moze se stvar napraviti bolje, ali složenije. Vjerojatno ce ti biti dovoljno staviti max na 1000 i nikad neces doci do kraja niza.

 

*Dodavanjem i skidanjem elemenata, tvoj red "putuje" prema kraju niza, i eventualno ce red "izaci" iz granica niza. U složenijoj verziji bi trebalo provjeravati je li kraj izašao iz niza, tj jel veci od max. Taj problem se može riješiti cirkularnim nizom/redom. Kad dodemo do kraja niza, sljedeci index je opet pocetak. To se ostvari racunanjem modulo max. Ali mislin da je ovo gore opisano dovoljno :)

Poruka je uređivana zadnji put pet 2.6.2017 9:22 (wrathchild).
1
Nova poruka
E-mail:
Lozinka:
 
vrh stranice