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

Duplicity obousmerny seznam – Pascal – Fórum – Programujte.comDuplicity obousmerny seznam – Pascal – Fórum – Programujte.com

 

sparky290
Návštěvník
10. 1. 2014   #1
-
0
-

 Jak byste odstranily duplicity v obousmernem seznamu pri neserazenych datech ? 

type UkPrvek = ^Prvek;
     Prvek = record
       info: real;
       predchudce, naslednik: UkPrvek
     end;

ObousmerSeznam = record
     zacatek: UkPrvek;
     konec: UkPrvek
end;


procedure init(var s: ObousmerSeznam);
begin
s.zacatek:=nil;
s.konec:=nil;
end;

procedure pridejPrvek(var s: ObousmerSeznam; hodnota: real);
var novy: UkPrvek;
begin
new(novy);
novy^.info:=hodnota;
if s.zacatek<>nil then begin
 s.zacatek^.predchudce:=novy;
 novy^.naslednik:=s.zacatek;
 s.zacatek:=novy;
end else begin
 novy^.predchudce:=nil;
 novy^.naslednik:=nil;
 s.zacatek:=novy;
 s.konec:=novy
end
end;

function vratPocetPrvku(s: ObousmerSeznam) : word;
var aktualni: UkPrvek;
begin
vratPocetPrvku:=0;
aktualni:=s.zacatek;
while aktualni<>nil do begin
 aktualni:=aktualni^.naslednik;
 inc(vratPocetPrvku);
end
end;


procedure kontrola(s: ObousmerSeznam);
var aktualni: UkPrvek;
begin
aktualni:=s.zacatek;
while (aktualni<>nil) do begin
write(aktualni^.info:2:2,' | ');
aktualni:=aktualni^.naslednik;
end;
end;

procedure odstranDuplicity(var s: ObousmerSeznam);
begin
end;


var s: ObousmerSeznam;
begin
init(s);
pridejPrvek(s,33);
pridejPrvek(s,22);
pridejPrvek(s,22);
pridejPrvek(s,33);
pridejPrvek(s,22);
pridejPrvek(s,12);
kontrola(s);
Nahlásit jako SPAM
IP: 195.178.73.–
KIIV
~ Moderátor
+43
God of flame
10. 1. 2014   #2
-
0
-

neni zase tak moc moznosti.. budes postupovat po jednom prvku a pokazde projdes zbytek seznamu, jestli tam neni dalsi a kdyztak ten dalsi smazes..

pripadne na dva pruchody, kdy v prvnim se udela seznam prvku a jejich pocet a ve druhem kole se promazou ty, kde je jich vicero (samozrejme pokud budes odecitat od toho poctu, tak bude vysledek v jinem poradi, nez kdyz se udela prvni cast - ale porad se da u obousmerneho prochazet nazpet takze se to pak "vyrusi") :)

Nahlásit jako SPAM
IP: 62.168.56.–
Program vždy dělá to co naprogramujete, ne to co chcete...
sparky290
Návštěvník
10. 1. 2014   #3
-
0
-

#2 KIIV
dik

Nahlásit jako SPAM
IP: 195.178.73.–
sparky290
Návštěvník
10. 1. 2014   #4
-
0
-

   

procedure odstranDuplicity(var s: ObousmerSeznam);
var aktualni,kon: UkPrvek;
    pruchod: UkPrvek;
    pom_predchozi: UkPrvek;
begin
pom_predchozi:= nil;
aktualni:=s.zacatek;
kon:=s.konec;
while ((aktualni<>nil) AND (aktualni^.naslednik<>nil)) do begin
pruchod:=aktualni^.naslednik;
while (pruchod<>nil) do begin
 if(aktualni^.info = pruchod^.info) then begin
    if(pom_predchozi = nil) then begin
      aktualni^.naslednik := pruchod^.naslednik;
      pom_predchozi := aktualni;
    end else pom_predchozi^.naslednik := pruchod^.naslednik;
        if(pruchod = kon) then aktualni^.naslednik:= nil;
        dispose(pruchod);
        pom_predchozi := pruchod^.naslednik;
end else pom_predchozi := pruchod;
     pruchod:=pruchod^.naslednik;
 end;
   aktualni:=aktualni^.naslednik;
 end;
end;

Plne funkcni! Nazory ? Nejde to nejak zjednodusit ? 

Nahlásit jako SPAM
IP: 195.178.73.–
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, 10 hostů

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ý