def odstrani_naj_sklad(s):
    '''Odstrani najkrajši niz iz sklada
    če je takih elementov več odstrani le vrhnjega'''
    dolzina = float('inf')
    sk = Sklad()  #pomožni sklad
    prvi = True
    while not s.prazen():
        niz = s.vrh()
        dolzina = min(len(niz), dolzina)
        s.odstrani()
        sk.vstavi(niz)
    while not sk.prazen():
        niz = sk.vrh()
        sk.odstrani()
        s.vstavi(niz)
    while not s.prazen():
        if prvi and len(s.vrh()) == dolzina:
            prvi = False
        else:
            sk.vstavi(s.vrh())
        s.odstrani()
    while not sk.prazen():
        s.vstavi(sk.vrh())
        sk.odstrani()
    return
Beispiel #2
0
def oklepaji(niz):
    s = Sklad()
    for c in niz:
        if c in OKLEPAJI:
            s.vstavi(c)
        if c in OKLEPAJI.values():
            if s.prazen() or OKLEPAJI[s.vrh()] != c:
                return False
            s.odstrani()
    return s.prazen()
Beispiel #3
0
def preveri_HTML(ime_dat=''):
    '''preveri ali je html datoteka pravilno sestavljena'''
    s = Sklad()
    for znacka, st in znacke(ime_dat):
        if st == 1:
            s.vstavi((znacka, st))
        if st == 2:
            if s.prazen() or znacka != s.vrh()[0]:
                return False
            s.odstrani()
    return s.prazen()
Beispiel #4
0
def oklepaji(niz):
    """Preveri, ali so v danem nizu oklepaji pravilno gnezdeni"""
    sklad_oklepajev = Sklad()
    oklep = {'(': ')', '{': '}', '[': ']', '<': '>'}
    for znak in niz:
        if znak in oklep.keys():
            sklad_oklepajev.vstavi(znak)
        elif znak in oklep.values():
            if sklad_oklepajev.prazen(
            ) or znak != oklep[sklad_oklepajev.vrh()]:
                return False
            sklad_oklepajev.odstrani()
    return sklad_oklepajev.prazen()
def oklepaji(niz):
    '''Preveri, ali so oklepaji pravilno gnezdeni. Vrne True ali False.'''
    sklad = Sklad()
    for znak in niz:
        if znak in slovar_oklep:  # ce je znak v slovarju oklepaji, ga doda v sklad
            sklad.vstavi(znak)
        elif znak in slovar_oklep.values():  # ce je znak zaklepaj
            if sklad.prazen():
                return False
            if not slovar_oklep[sklad.vrh()] == znak:  # ce vrh ni enak znaku
                return False
            # nasli smo ustrezen par oklepajev
            sklad.odstrani()
    return sklad.prazen()  # ce je sklad prazen, vrne True, sicer pa False
def oklepaji(niz):
    '''Preveri, ali so oklepaji pravilno gnezdeni. Uporaba sklada.'''
    sklad = Sklad()
    for znak in niz:
        if znak in OKLEPAJI:
            sklad.vstavi(znak)
        elif znak in OKLEPAJI.values():
            if sklad.prazen():
                return False
            if not OKLEPAJI[sklad.poberi()] == znak:
                return False
    if not sklad.prazen():
        return False
    return True
Beispiel #7
0
def max_globina(niz):
    oklep = {'(': ')', '{': '}', '[': ']', '<': '>'}
    globina = 0
    naj_globina = 0
    sklad = Sklad()
    for znak in niz:
        if znak in oklep.keys():
            sklad.vstavi(znak)
            globina += 1
            naj_globina = max(globina, naj_globina)
        elif znak in oklep.values():
            if sklad.prazen() or znak != oklep[sklad.vrh()]:
                return False
            sklad.odstrani()
            globina -= 1
    return naj_globina if sklad.prazen() else False
def je_lahko_BST(pre):
    '''preveri ali premi pregled lahko predstavlja dvojiško iskalno drevo'''
    s = Sklad()

    # Trenutni koren = -inf
    koren = float('-inf')

    # Sprehodi se čez seznam
    for vrednost in pre:
        #Opomba:vrednost = pre[i] po
        #danem algoritmu

        # Če najdemo vrednost, ki je manjša od korena, vrni False
        if vrednost < koren:
            return False

        # Če je vrednost(pre[i]) v desnem poddrevesu
        # Odstrani elemente, ki so manjši kot je koren
        # in naredi zadnjega kot koren
        while not s.prazen() and s.vrh() < vrednost:
            koren = s.vrh()
            s.odstrani()

        # Na tej točki je sklad prazen ali je vrednost manjša
        # od korena, vstavi vrendost
        s.vstavi(vrednost)

    return True
Beispiel #9
0
    def odstrani_najmlajsega_najvecjega(self):
        """
        Iz sklada odstrani najmlajsi najvecji element
        """
        naj = 0
        ponovitve_naj = 0
        pomozen = Sklad()
        while not self.prazen():
            el = self.vrh()
            self.odstrani()
            if el > naj:
                naj = el
                ponovitve_naj = 1
            elif el == naj:
                ponovitve_naj += 1
            pomozen.vstavi(el)

        while not pomozen.prazen():
            el = pomozen.vrh()
            if el == naj:
                if ponovitve_naj == 1:
                    pomozen.odstrani()
                    continue
                else:
                    ponovitve_naj -= 1
                    self.vstavi(el)
            else:
                self.vstavi(el)
            pomozen.odstrani()
Beispiel #10
0
def obrni(v):
    pomozni = Sklad()
    while not v.prazna():
        pomozni.vstavi(v.zacetek())
        v.odstrani()
    while not pomozni.prazen():
        v.vstavi(pomozni.vrh())
        pomozni.odstrani()
Beispiel #11
0
def uredi_s_skladom(sklad):
    s = Sklad()
    skl = Sklad()
    while not sklad.prazen():
        vrh = sklad.vrh()
        sklad.odstrani()
        while not s.prazen() and s.vrh() > vrh:
            sklad.vstavi(s.vrh())
            s.odstrani()
        s.vstavi(vrh)
    while not s.prazen():
        skl.vstavi(s.vrh())
        s.odstrani()
    while not skl.prazen():
        sklad.vstavi(skl.vrh())
        skl.odstrani()
    return
Beispiel #12
0
def pregled_po_skladu(zacetno_drevo):
    '''pregleda drevo s skladom'''
    sklad = Sklad()
    sklad.vstavi(zacetno_drevo)
    while not sklad.prazen():
        drevo = sklad.poberi()
        if not drevo.prazno:
            sklad.vstavi(drevo.levo)
            sklad.vstavi(drevo.desno)
            yield drevo.podatek
Beispiel #13
0
def vagoni(prihod, odhod):
    """Vrne true, ce lahko s pomocjo slepega tira spremenimo zaporedje vlakov iz prihoda v odhod"""
    slepi_tip = Sklad()
    prihod = prihod[::-1]
    for vlak in prihod:
        if not slepi_tip.prazen() and slepi_tip.vrh() == odhod[-1]:
            slepi_tip.odstrani()
            odhod = odhod[:-1]
        if vlak == odhod[-1]:
            odhod = odhod[:-1]
        else:
            slepi_tip.vstavi(vlak)
    while not slepi_tip.prazen():
        if slepi_tip.vrh() == odhod[-1]:
            odhod = odhod[:-1]
            slepi_tip.odstrani()
        else:
            return False
    return slepi_tip.prazen()
 def prestej_elemente(self):
     '''Prešteje elemente s pomočjo metode pop in pomožnega sklada'''
     i = 0
     pomozni = Sklad()
     while not self.prazen():
         pomozni.vstavi(self.pop())
         i += 1
     while not pomozni.prazen():
         self.vstavi(pomozni.pop())
     return i
Beispiel #15
0
def max_globina(niz):
    '''Poišče globino najbolj globoko gnezdenega para oklepajev.'''
    sklad = Sklad()
    globina = 0
    naj_globina = 0
    for znak in niz:
        if znak in OKLEPAJI:
            sklad.vstavi(znak)
            globina += 1
            if globina > naj_globina:
                naj_globina = globina
        elif znak in OKLEPAJI.values():
            if sklad.prazen():
                return None
            if not OKLEPAJI[sklad.poberi()] == znak:
                return None
            globina -= 1
    if not sklad.prazen():
        return None
    return naj_globina
def prestej_elemente(s):
    pomozen = Sklad()
    stevec = 0
    while not s.prazen():
        pomozen.vstavi(s.vrh())
        stevec += 1
        s.odstrani()
    while not pomozen.prazen():
        s.vstavi(pomozen.vrh())
        pomozen.odstrani()
    return stevec
def permutacija_s_skladom(sez):
    '''Ali lahko dano permutacijo sestavimo s skladom'''
    n=0
    s = Sklad()
    for el in sez:
        while n < el:
            n+=1
            s.vstavi(n)
        if s.prazen() or el != s.vrh():
            return False
        s.odstrani()
    return True
def max_globina(niz):
    '''poisce globino najbolj globoko gnezdenega para oklepajev v izrazu niz'''
    slovar_oklep = {'(': ')', '{': '}', '[': ']', '<': '>'}
    sklad = Sklad()
    globina = 0
    naj_globina = 0
    for znak in niz:
        if znak in slovar_oklep:  #ce je znak v slovarju, ga doda v sklad
            sklad.vstavi(znak)
            globina += 1
            if globina > naj_globina:  #poiscemo ustreznega kandidata za naj_globino
                naj_globina = globina
        elif znak in slovar_oklep.values():  #ce je znak zaklepaj
            if sklad.prazen():
                return False
            if not slovar_oklep[sklad.vrh()] == znak:  #ce vrh ni enak znaku
                return False
            sklad.odstrani()
            globina -= 1
    if sklad.prazen():
        return naj_globina
    return False  #vsaj en znak ostane v skladu
Beispiel #19
0
def locevanje(sklad):
    seznam = [Sklad() for i in range(10)]
    obrat = Sklad()
    while not sklad.prazen():
        obrat.vstavi(sklad.vrh())
        sklad.odstrani()
    while not obrat.prazen():
        x = obrat.vrh()
        obrat.odstrani()
        sklad.vstavi(x)
        seznam[(x % 10)].vstavi(x)

    return seznam
Beispiel #20
0
def vagoni(prihod, odhod):
    '''Vrne True, če lahko z ustrezno permutacijo pridemo do preureditve.'''
    na_stranskem = ''
    sklad = Sklad()
    print(prihod, odhod)
    for prih, odh in zip(prihod, odhod):
        if prih != odh:
            na_stranskem += odh
            sklad.vstavi(prih)
    for odh in na_stranskem:
        if sklad.vrh != odh or sklad.prazen():
            return False
        sklad.odstrani()
    return True
def podvoji_sklad(s):
    podvojen = Sklad()
    pomozen = Sklad()
    while not s.prazen():
        pomozen.vstavi(s.vrh())
        s.odstrani()

    while not pomozen.prazen():
        x = pomozen.vrh()
        s.vstavi(x)
        pomozen.odstrani()
        podvojen.vstavi(x)
        podvojen.vstavi(x)
    return podvojen
def vzemi_sklad(sklad, kolicina):
    '''iz sklada vzame število izdelkov ali vrže izjemo'''
    pom = Sklad()
    odv_kol = 0
    while odv_kol < kolicina and not sklad.prazen():
        pom.vstavi(sklad.vrh())
        sklad.odstrani()
        odv_kol += pom.vrh()
    if odv_kol > kolicina:
        sklad.vstavi(odv_kol - kolicina)
    elif odvzeta_kolicina < kolicina:
        while not pom.prazen():
            sklad.vstavi(pom.vrh())
            pom.odstrani()
        raise IndexError
 def odstrani_najvecje(self):
     '''Odstrani vse največje'''
     if self.prazen():
         return None
     naj = float('-inf')
     pomozni = Sklad()
     while not self.prazen():
         el = self.vrh()
         self.odstrani()
         naj = max(el, naj)
         pomozni.vstavi(el)
     while not pomozni.prazen():
         if naj != pomozni.vrh():
             self.vstavi(pomozni.vrh())
         pomozni.odstrani()
Beispiel #24
0
def razmnozi_sklad(s, seznam):
    '''vrne nov sklad, v katerem se vsak element prvotnega sklada
    pojavi tolikokrat , kolikor je istolezece st v seznamu'''
    pomozen = Sklad()
    razmnozen = Sklad()
    
    while not s.prazen():
        pomozen.vstavi(s.vrh())
        s.odstrani()
    while not pomozen.prazen():
        s.vstavi(pomozen.vrh())
        for i in range(seznam.pop()):
            razmnozen.vstavi(s.vrh())
        pomozen.odstrani()
    return razmnozen
def locevanje(sklad):
    '''Vrne seznam desetih skladov, pri cemer i-ti sklad vsebuje tista stevila
     s sklada sklad, ki dajo ostanek i pri deljenju z 10'''
    seznam = [Sklad() for i in range(10)] #seznam desedtih skladov
    obrat = Sklad() #pomozni sklad
    while not sklad.prazen():
        obrat.vstavi(sklad.vrh())
        sklad.odstrani()
    while not obrat.prazen():
        x = obrat.vrh()
        obrat.odstrani()
        sklad.vstavi(x)
        seznam[(x % 10)].vstavi(x)

    return seznam
Beispiel #26
0
    def odstrani_najvecje(self):
        '''iz sklada odstrani vse najvecje elemente'''
        najvecji = 0
        sklad = Sklad()
        while not self.prazen():
            vrh = self.vrh()
            self.odstrani()
            if vrh > najvecji:
                najvecji = vrh
            sklad.vstavi(vrh)

        while not sklad.prazen():
            vrh = sklad.vrh()
            if vrh != najvecji:
                self.vstavi(vrh)
            sklad.odstrani()
Beispiel #27
0
def max_globina(niz):
    s = Sklad()
    naj = 0
    trenutna = 0
    if not oklepaji(niz):
        return
    for c in niz:
        if c in OKLEPAJI:
            s.vstavi(c)
            trenutna += 1
            naj = max(trenutna, naj)
        if c in OKLEPAJI.values():
            if s.prazen() or OKLEPAJI[s.vrh()] != c:
                return
            s.odstrani()
            trenutna -= 1
    return naj
Beispiel #28
0
def vagoni(prihod, odhod):
    '''Ali se lahko vlaki prerazporedijo'''
    vhod, izhod, slepi = Sklad(), Sklad(), Sklad()
    for el in prihod:
        vhod.vstavi(el)
    for el in odhod:
        izhod.vstavi(el)
    while not izhod.prazen():
        nasl = izhod.vrh()
        izhod.odstrani()
        while slepi.prazen() or slepi.vrh() != nasl:
            if vhod.prazen():
                return False
            slepi.vstavi(vhod.vrh())
            vhod.odstrani()
        slepi.odstrani()
    return True
Beispiel #29
0
    def odstrani_najstarejsega_najvecjega(self):
        ''''iz sklada odstrani najstarejsi najvecji element'''
        najvecji = 0
        sklad = Sklad()
        while not self.prazen():
            vrh = self.vrh()
            self.odstrani()
            if vrh > najvecji:
                najvecji = vrh
            sklad.vstavi(vrh)

        while not sklad.prazen():
            vrh = sklad.vrh()
            if vrh == najvecji:
                najvecji = ''
            else:
                self.vstavi(vrh)
            sklad.odstrani()
Beispiel #30
0
    def odstrani_najvecje(self):
        """
        Iz sklada odstrani vse najvecje elemente
        """
        naj = 0
        pomozen = Sklad()
        while not self.prazen():
            el = self.vrh()
            self.odstrani()
            if el > naj:
                naj = el
            pomozen.vstavi(el)

        while not pomozen.prazen():
            el = pomozen.vrh()
            if el != naj:
                self.vstavi(el)
            pomozen.odstrani()