Spojový seznam – Java – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Spojový seznam – Java – Fórum – Programujte.comSpojový seznam – Java – Fórum – Programujte.com

 

Toto vlákno bylo označeno za vyřešené.
lubabe0
Duch
4. 12. 2014   #1
-
0
-

Zdravím všechny,

potřeboval bych pomoci s jednou domácí úlohou.

A sice jak ze seznamu odeberu prvek obsahující dané slovo a jak zjistím zda ho seznam obsahuje.

Snažím se všelijak, ale ke kloudnému výsledku se ne a ne dobrat.

 Děkuju všem co pomůžou.

import java.util.*;


public class Vlacek {
    private class Vagonek {
        public String hodnota;
        public Vagonek dalsi;
    }
    
    Vagonek lokomotiva;
    
    public Vlacek(){
        lokomotiva = new Vagonek();
        lokomotiva.hodnota = "lokomotiva";
        lokomotiva.dalsi = null;
    }
    
    public void vytvorVlacek(String[] hodnoty){
        for(int i=hodnoty.length-1; i>=0; i--){
            this.pripojVagonekNaZacatekVlaku(hodnoty[i]);
        }
    }
    
    public void pripojVagonekNaKonecVlaku(String hodnota){
        Vagonek novy=new Vagonek();
        novy.hodnota=hodnota;
        novy.dalsi=null;
        
        Vagonek aktualni=lokomotiva;
        while(aktualni.dalsi!=null){
            aktualni=aktualni.dalsi;
        }
        aktualni.dalsi=novy;
    }
    
    public void pripojVagonekZaVagonek(String pripojujemZaHodnotu, String novaHodnota){
        Vagonek novy=new Vagonek();
        novy.hodnota=novaHodnota;
        novy.dalsi=null;
        
        Vagonek aktualni=lokomotiva;
        while(aktualni!=null && !aktualni.hodnota.equals(pripojujemZaHodnotu)){
            aktualni=aktualni.dalsi;
        }
        if(aktualni!=null){
            novy.dalsi=aktualni.dalsi;
            aktualni.dalsi=novy;
        }
    }
    
    public void pripojVagonekNaZacatekVlaku(String hodnota){
        Vagonek puvodniPrvniVagonek=lokomotiva.dalsi;
        Vagonek novy=new Vagonek();
        novy.hodnota=hodnota;
        novy.dalsi=puvodniPrvniVagonek;
        lokomotiva.dalsi=novy;
    }
   
    public void vypis(){
        Vagonek aktualni=lokomotiva.dalsi;
        while(aktualni!=null){
            System.out.print(aktualni.hodnota+" ");
            aktualni=aktualni.dalsi;
        }
        System.out.println();
    }
     
    //do teto funkce nezapomente vyplnit sve jmeno a prijmeni
    public String mojeJmeno() {
        String jmeno = "Lubos Beran"; 
        System.out.println(jmeno);
        return jmeno;
    }
    
    //zjistěte kolik vagónku obsahuje tato instance vláčku
    //lokomotiva se nepočítá do počtu vagónků
    public int urciPocetVagonku(){
        Vagonek aktualni=lokomotiva.dalsi;
        int pocet = 0;
        while(aktualni!=null){
            aktualni = aktualni.dalsi;
            pocet++;
        }
        return pocet;
    }
    
    //zjistěte jestli vláček obsahuje vagónek se zadaným obsahem
    public boolean vlacekObsahujeVagonek(String obsahVagonku){
        return true;
    }
    
    //přidejte do vláčku jeden vagónek se zadaným obsahem na zadanou pozici
    //lokomotiva je na pozici 0, první vagónek na pozici 1, ...
    //pokud není vláček dostatečně dlouhý, aby bylo možné na zadanou pozici přidat vagónek, nic nepřidávejte
    public void pridejVagonekNaPozici(int pozadovanaPozice, String novaHodnota){
        int pocet = urciPocetVagonku();
        
        Vagonek novy = new Vagonek();
        novy.hodnota = novaHodnota;
        novy.dalsi = null;
        
        int cislo = pozadovanaPozice;
        if(cislo<pocet){
        int k=2;
        Vagonek aktualni = lokomotiva.dalsi;
        while (k != cislo){
            aktualni = aktualni.dalsi;
            k=k+1;
        }
        
        novy.dalsi = aktualni.dalsi;
        aktualni.dalsi = novy;
        } else {
            System.out.println("Nelze");
        }
    }

//odeberte z vláčku vagónek obsahující zadanou hodnotu
//    pokud ani jeden vagónek neobsahuje zadanou hodnotu, nic neodebírejte
    public void odeberVagonekObsahujici(String hodnota){ 
       
    }
}


public class TridaObsahujiciFunkciMain {

    public static void main(String[] args) {
        String[] polozky={"zirafa","slon","lev"};
        Vlacek mujVlacek=new Vlacek();
        mujVlacek.vytvorVlacek(polozky);
        mujVlacek.pripojVagonekNaKonecVlaku("zebra");
        mujVlacek.pripojVagonekZaVagonek("lev","hroch");
        int umisteni = 4;
        String Vagonek = "vlak2";
        mujVlacek.pridejVagonekNaPozici(umisteni,Vagonek);
        mujVlacek.vypis();
        System.out.println(mujVlacek.urciPocetVagonku());
        
    }
}
Nahlásit jako SPAM
IP: 160.217.228.–
ingiraxo+15
Grafoman
4. 12. 2014   #2
-
0
-

#1 lubabe
pokud odebíráš prvek z link listu, tak jsou tady 3 možnosti, který můžou nastat a musíš je ošetřit

1) odebereš 1. prvek - musíš kontrolovat, jestli existuje nějaký 2. prvek, pokud ano, tak ho nastavíš jako první
2) odebereš něco uprostřed - musíš kontrolovat existenci prvku před a za odebírajícím prvkem, kde prvek před bude ukazovat na prvek za prvkem, kterej odebíráš
3) odeberes poslední prvek - nastavíš jako poslední prvek ten, který byl předtím předposlední

ve všech případech si musíš uchovávat proměnnou na první prvek! já někdy (hlavně v C/C++) uchovávám i na poslední, javě to není až tak nutný

další věc je, že link list nemá indexy, vždy když něco hledáš, tak musíš procházet od začátku až na konec (ofc. dokud nenajdeš co hledáš), což je nevýhoda link listu

class Prvek {
    public int cislo;
    public Prvek dalsi;

    public Prvek(int cislo) {
        this.cislo = cislo;
    }
}

public static void main(String[] args) {
    // uchova referenci na prvni a aktualni prvek
    Prvek prvni;
    Prvek aktualni; // neni potreba, ale je to dobra optimalizace

    // vytvori propojeny seznam prvku
    aktualni = prvni = new Prvek(1);
    aktualni = aktualni.dalsi = new Prvek(2);
    aktualni = aktualni.dalsi = new Prvek(3);
    aktualni = aktualni.dalsi = new Prvek(4);
    aktualni = aktualni.dalsi = new Prvek(5);

    // vypise prvky
    Prvek pomocna = prvni;
    while (pomocna != null) {
        System.out.println(pomocna.cislo);
        pomocna = pomocna.dalsi;
    }
}
Nahlásit jako SPAM
IP: 213.168.183.–
Moje aplikace: http://ophite.cz
Tutoriály na: C#
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 3 hosté

Podobná vlákna

Spojový seznam — založil Jakub

Spojový seznam — založil Luckin

Spojový seznam — založil TarderOrtex

Linearní spojový seznam — založil Rivers

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý