azyrock Ierakstīts Aprīlis 10, 2012 Share Ierakstīts Aprīlis 10, 2012 Kāds var palīdzēt ar šo daļu? Izveidot šadu funkciju void liktuzBeigam(int n); Nosacījums: Uzrakstīt funkciju, kas pārvieto saraksta n-to elementu uz saraksta beigām. Darbība jāveic, pārkabinot saites, nevis pārrakstot elementu vērtības. #include <iostream> using namespace std; // Klase Elem - saraksta elements class Elem { public: int num; Elem *next; Elem (int n) { num = n; next = NULL; }; };// Klase List - saistiits vienvirziena saraksts class List { protected: Elem *first, *last; public: Elem *current; public: List () { first = last = current = NULL; }; void add_element (int n); // pievieno beigaas void delete_element (); // izmet no saakuma int is_empty () { return (first == NULL); }; void start () { current = first; }; int end () { return (current == NULL); }; void next(){if (!end())current = current -> next;}; void print(); void liktuzBeigam(int n); };int main() { List l; int k; cout << "Ievadi saraksta elementu (0,lai beigtu):\n"; cin >> k; while (k!=0) { l.add_element (k); cout << "Ievadi saraksta elementu (0, lai beigtu):\n"; cin >> k; }; l.liktuzBeigam(2); l.print(); while (!l.is_empty()) { l.delete_element (); };}; void List::add_element (int n) { // maina current vertibu, lai raadiitu uz jauno elementu Elem *p = new Elem (n); if (first == NULL) first = last = p; else last = last -> next = p; current =p; };void List::delete_element () { // saglabaa current veertiibu (nomaina uz saakumu,ja raadiija uz izmetamo) Elem *p = first; if(!is_empty()) { if (current == first) current = first-> next; first = first -> next; delete p; if(is_empty())last = NULL; } }; void List:: print() { for (start(); !end(); next()) cout << current->num << endl; cout << endl; } Link to comment Share on other sites More sharing options...
azyrock Aprīlis 24, 2012 Author Share Aprīlis 24, 2012 Seriously, neviens nevar palīdzēt? :O Link to comment Share on other sites More sharing options...
Baigais Janka Aprīlis 24, 2012 Share Aprīlis 24, 2012 Uzdevums ir vairāk kā vienkāršs Bet nu baigais slinkums kodu pētīt. Kur ir problēma? Tavā vietā vienkārši funkciju uzrakstīt? Nu, piedodiet Link to comment Share on other sites More sharing options...
kroko Aprīlis 24, 2012 Share Aprīlis 24, 2012 vector / list / deque? Link to comment Share on other sites More sharing options...
azyrock Aprīlis 24, 2012 Author Share Aprīlis 24, 2012 Es nezinu, kā lai realizē to funkciju. Esmu ticis šitik tālu: void List::liktuzBeigam(int n) { previous = NULL; current = first; for (int i=1; i<=n; i++) { current = previous; current = current->next; } previous->next = current->next; current->next = NULL; last->next = current; last = last->next; }; Bet protams f-ja nestrādā, jautāju pēc padoma. Link to comment Share on other sites More sharing options...
Baigais Janka Aprīlis 24, 2012 Share Aprīlis 24, 2012 (labots) Pirmkārt - jāatrod vajadzīgais elements. OK, to Tu dari, bet Tev tā padarīšana jau cikla sākumā lido laukā. previous = NULL; current = first; // jēga, ja nākošā darbība viņu izmaina? EDIT - ā, indeksācija no 0 tomēr domāta, tad nosarkstu un ciklā current = previous; // NULL current = current->next; // current = NULL->next Labots Aprīlis 24, 2012 - Baigais Janka Link to comment Share on other sites More sharing options...
japets Aprīlis 24, 2012 Share Aprīlis 24, 2012 Skaiti uz pirkstiem un skaties ko Tavs kods dara (ja neproti DEBUG-ot no izstrādes vides). Gandrīz jau ir pareizi. Skaties, kas notiek pirmo reizi ieejot for ciklā. "current = previous" < previous satur NULL, līdz ar to current tiek piešķirts NULL!!! Nākamā rindiņa jau ir nelegāls izsaukums. Vēl neaizmirsti, ka ir nepieciešams atsevišķi apstrādāt gadījumu, ja tiek pārvietots pirmais elements. Link to comment Share on other sites More sharing options...
valka Aprīlis 24, 2012 Share Aprīlis 24, 2012 A normālus destruktorus `Elem` un `List` klasēm uzrakstīt par grūtu? Kā jau pieminēts, domā pa soļiem: 1) pieglabā galvas adresi 2) pārrauj saites un sakārto jauno galvu tā, lai tā pēc tādas arī izskatās, 3) piespraud veco galvu no (1) astē un sakārto (protip: tev tak ir `List::last`; liec to lietā) Link to comment Share on other sites More sharing options...
Recommended Posts
Izveido kontu, vai pieraksties esošajā, lai komentētu
Jums ir jābūt šī foruma biedram, lai varētu komentēt tēmas
Izveidot jaunu kontu
Piereģistrējies un izveido jaunu kontu, tas būs viegli!
Reģistrēt jaunu kontuPierakstīties
Jums jau ir konts? Pierakstieties tajā šeit!
Pierakstīties tagad!