Pereiti prie turinio

Pagalba iš Java LinkedList


Rekomenduojami pranešimai

Sveiki. Gal kas žino, kodėl man neveikia set ir remove funkcijos? Teoriją žinau, praktiškai įgyvendinti neišeina. Galbūt kažką nedažiūrėjau.

 

Laukiu komentarų, profesionalai :)

 

Štai kodas:

 


public class ListX<Data> implements ListX<Data> {

   private Node<Data> first;   // rodyklė į pirmą mazgą
   private Node<Data> last;    // rodyklė į paskutinį mazgą
   private Node<Data> current; // rodyklė į einamąjį mazgą, naudojama getNext
   private int size;       	// sąrašo dydis, tuo pačiu elementų skaičius
   /**
	* Constructs an empty list.
	*/
   public ListX() {
   }
   public boolean add(Data data) {      // įdeda elementą į sąrašo pabaigą
       if(data==null) return false;        // nuliniai objektai nepriimami
       if (first == null) {
           first = new Node<Data>(data, first);
           last = first;
       } else {
           Node<Data> e1 = new Node(data, null);
           last.next = e1;
           last = e1;
       }
       size++;
       return true;
   }
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++  
/*    public prijungti(){
   }


   public rastiBendrus(){

   }        

*/    
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++    
//Panaudoti++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 

   public boolean add(int k, Data data)
   {
       if (k == 0)
       {
           first = new Node<Data>(data, first);
       }
       else
       {
           Node<Data> previous = first.findNode(k - 1);
           Node<Data> newNode =
           new Node<Data>(data, previous.next);
           previous.next = newNode;
       }
       size++;

       return true;
   }

//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

   public int size() { 	// grąžinamas sąrašo dydis (elementų kiekis)
       return size;
   }    
   public boolean isEmpty() {      // patikrina ar sąrašas yra tuščias
       return first == null;
   }
   public void clear() {
       size = 0;
       first = null;
       last = null;
       current = null;
   }   
   public Data get(int k){       	// grąžiną k-ojo elemento reikšmę
       if (k<0||k>=size)return null; // jei k yra blogas, gąžina null
       current=first.findNode(k);    // ir tuo pačiu nustato current
       return current.element;
   }
//Panaudoti+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 	

   public Data set(int k, Data data)
   {
       if ((k < 0) || (k >= size())) {
               return null;
       } else {
               int i = 0;
               Node<Data> curr = first;
               while (i < k) {
                       curr = curr.next;
                       i++;
               }
               curr.element = data;
               return data;
       }

   }

//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 	
   public Data getNext(){   	//pereina prie kitos reikšmės ir ją grąžina
       if(current==null) return null;
       current=current.next;
       if(current==null) return null;
       return current.element;
   }
//Panaudoti+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 


	public Data remove(int k)
	{
       Data result = null;
       if ((k < 0) || (k >= size())) {
               System.err.println("Error: attempt to remove item out of range");
       } else if (k == 0) {
               current = first.next;
       } else {
               Node<Data> prev = first;
               int i = 1;
               while (i < k) {
                       prev = prev.next;
                       i++;
                       }
               result = prev.element;
               prev.next = prev.next.next;

               }
       return result;
	}

//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 
class Node<Data> {          // vidinė klasė, užtikrinanti inkapsuliaciją
   public Data element;    // ji nematoma už klasės ListKTU ribų
   public Node<Data> next; // next - kaip įprasta - nuoroda į kitą mazgą

   Node(Data data, Node<Data> next) { //mazgo konstruktorius
       this.element = data;
       this.next = next;
   }
   public Node<Data> findNode(int k){ // suranda k-ąjį mazgą
       Node<Data> e=this;
       for(int i=0;i<k;i++){
      	e=e.next;
       }
       return e;
   }
}

}

Redagavo Artas S
Nuoroda į pranešimą
Dalintis kituose puslapiuose

Sveiki. Gal kas žino, kodėl man neveikia set ir remove funkcijos? Teoriją žinau, praktiškai įgyvendinti neišeina. Galbūt kažką nedažiūrėjau.

 

Laukiu komentarų, profesionalai :)

 

Štai kodas:

 

 

Neturėtų set ir remove funkcijos būti void??

Redagavo MantasP
Nuoroda į pranešimą
Dalintis kituose puslapiuose

Neturėtų set ir remove funkcijos būti void??

 

Ne, turetu grazinti elementa

 

Tai galėtum parašyt, ką reiškia "neveikia". Ar bandei debuginti? Ar įsivaizduoji vykdymo seką?

 

Seka isivaizduoju. Ir logiskai galvojant turetu veikti. Cia bus kazkokia smulkmena. Tik va reikia dasikapstyti.

Debuginant rodo, kad ideda gerai (kaip supratau). O spausdinant, kad first elemento nera.

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Ten per kelias klases eina tas isvedimas. Lab2_SarasaiKurimas.zip

Bet viskas siaip gerai ten. Nes visos kitos funkcijos veikia. Tik tos dvi ne.

Kažkas ten primalta, bandžiau žiūrėt, bet realiai ten pagr linked listo funkcijas reik normaliai parašyt, nes dabar nesamonė... head ir tail tik dėl vaizdo įdėti... add(Data data) funkcija lyg normaliai veikia, o kitas reik perdaryt, nes jose nieks nesurišta su head'u, tail'u

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Kažkas ten primalta, bandžiau žiūrėt, bet realiai ten pagr linked listo funkcijas reik normaliai parašyt, nes dabar nesamonė... head ir tail tik dėl vaizdo įdėti... add(Data data) funkcija lyg normaliai veikia, o kitas reik perdaryt, nes jose nieks nesurišta su head'u, tail'u

 

Galbūt dėl to, man ir nusisetina head'as.

Gal žinai kaip korektiškai reikia parašyti, kad nenusisetintų?

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Galbūt dėl to, man ir nusisetina head'as.

Gal žinai kaip korektiškai reikia parašyti, kad nenusisetintų?

Tokia turėtų būt remove funkcija ar kažkas pan :D

public Data remove(int k)
    {
       Data result = null;
       if ((k < 0) || (k >= size())) {
               System.err.println("Error: attempt to remove item out of range");
       } else if (k == 0) { //removing first elem
       		first = first.next;
       } 
       else {
       	Node<Data> temp = first;

		int i = 0;
           while (i < k) {
               temp = temp.next;
               i++;
           }
		result = temp.element;
		if(k == size-1){ //removing last elem

                             temp.next = null;

		}
		else {
			temp.next = temp.next.next; //removing elem somewhere in middle
		}
       	temp = first;
           first = temp; 

       }
       return result;
    }

P.S. nebandziau tikrint ar veikia, bet principas toks turėtų būt

Vakare galėsiu ir kitas funkcijas ištaisyt, jei dar reiks :)

P.S.S. Geriau niekada nerašyk kode lietuviškų raidžių, nes.... :D

Redagavo MantasP
Nuoroda į pranešimą
Dalintis kituose puslapiuose

Visas pagrindas ne mano parasytas :) Tai tiesiog palikau base :) Aciu uz pagalba

Tokia turėtų būt remove funkcija ar kažkas pan :D

public Data remove(int k)
	{
       Data result = null;
       if ((k < 0) || (k >= size())) {
               System.err.println("Error: attempt to remove item out of range");
       } else if (k == 0) { //removing first elem
       		first = first.next;
       } 
       else {
       	Node<Data> temp = first;

		int i = 0;
           while (i < k) {
               temp = temp.next;
               i++;
           }
		result = temp.element;
		if(k == size-1){ //removing last elem

                             temp.next = null;

		}
		else {
			temp.next = temp.next.next; //removing elem somewhere in middle
		}
       	temp = first;
           first = temp; 

       }
       return result;
	}

P.S. nebandziau tikrint ar veikia, bet principas toks turėtų būt

Vakare galėsiu ir kitas funkcijas ištaisyt, jei dar reiks :)

P.S.S. Geriau niekada nerašyk kode lietuviškų raidžių, nes.... :D

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Prisijunkite prie diskusijos

Jūs galite rašyti dabar, o registruotis vėliau. Jeigu turite paskyrą, prisijunkite dabar, kad rašytumėte iš savo paskyros.

Svečias
Parašykite atsakymą...

×   Įdėta kaip raiškusis tekstas.   Atkurti formatavimą

  Only 75 emoji are allowed.

×   Nuorodos turinys įdėtas automatiškai.   Rodyti kaip įprastą nuorodą

×   Jūsų anksčiau įrašytas turinys buvo atkurtas.   Išvalyti redaktorių

×   You cannot paste images directly. Upload or insert images from URL.

Įkraunama...
  • Dabar naršo   0 narių

    Nei vienas registruotas narys šiuo metu nežiūri šio puslapio.

×
×
  • Pasirinkite naujai kuriamo turinio tipą...