Untitled

mail@pastecode.io avatar
unknown
plain_text
a year ago
4.2 kB
7
Indexable
Never
from typing import Any
class ListaWpis:
    wart: Any
    nast: 'ListaWpis'
    poprz: 'ListaWpis'

    def __init__(self, wart:Any, nast: 'ListaWpis' = None, poprz: 'ListaWpis' = None) -> None:
        self.wart = wart
        self.nast = nast
        self.poprz = poprz

    def dodaj_po_nim(self, wart: Any):
        new_node = ListaWpis(wart)
        temp = self.nast
        self.nast = new_node
        new_node.nast = temp
        temp.poprz = new_node
        new_node.poprz = self

    def dodaj_przed_nim(self, wart: Any):
        new_node = ListaWpis(wart)
        temp = self.poprz
        temp.nast = new_node
        new_node.nast = self
        self.poprz = new_node
        new_node.poprz = temp

class Lista_2k_1w:
    wartownik: ListaWpis

    def __init__(self):
        wartownik = ListaWpis(None)
        self.wartownik = wartownik
        self.wartownik.nast = wartownik
        self.wartownik.poprz=  wartownik

    def drukuj(self) -> None:
        if self.wartownik.nast is self.wartownik:
            print("Lista jest pusta")
            return self.wartownik

        wskaznik = self.wartownik.nast
        drukValue = ''

        while wskaznik is not self.wartownik:
            if wskaznik.nast is self.wartownik:
                drukValue += f'{wskaznik.wart} '
            else:
                drukValue += f'{wskaznik.wart}; '
            wskaznik = wskaznik.nast
        print(drukValue)

    def pobierz_el(self, idx: int):
        if self.wartownik.nast is self.wartownik:
            print("Lista jest pusta")
            return None
        temp = self.wartownik.nast
        licznik = 0

        if idx >= 0:
            while temp.nast is not self.wartownik:
                if licznik == idx:
                    return temp
                licznik += 1
                temp = temp.nast
        else:
            licznik = -1
            temp = self.ostatni_el()
            while temp.poprz is not self.wartownik:
                if licznik == idx:
                    return temp
                licznik -= 1
                temp = temp.poprz


    def ostatni_el(self):
        if self.wartownik.nast is self.wartownik:
            print("Lista jest pusta")
            return self.wartownik

        temp = self.wartownik.nast
        while temp.nast is not self.wartownik:
            temp = temp.nast
        return temp

    def pierwszy_el(self):
        if self.wartownik.nast is self.wartownik:
            return self.wartownik

        return self.wartownik.nast

    def co_drugi(self) -> 'Lista_2k_1w':
        if self.wartownik.nast is self.wartownik:
            print("Lista jest pusta")
            return self.wartownik

        new_list = Lista_2k_1w()
        wskaznik = self.wartownik.nast
        licznik = 0
        while wskaznik is not self.wartownik:
            if licznik % 2 == 0:
                new_list.ostatni_el().dodaj_po_nim(wskaznik.wart)
            licznik += 1
            wskaznik = wskaznik.nast
        return new_list

    def wyszukaj(self, wart:Any)-> ListaWpis:
        if self.wartownik.nast is self.wartownik:
            print("Lista jest pusta")
            return self.wartownik

        wskaznik = self.wartownik.nast

        while wskaznik.nast is not self.wartownik:
            if wskaznik.wart == wart:
                return wskaznik.wart
            wskaznik = wskaznik.nast

        return None


    # def KOLOKWIUM(self):
    #     pierwszyel = self.wartownik.nast
    #     ostatni_element = self.wartownik.nast
    #     while ostatni_element.nast is not self.wartownik:
    #         ostatni_element = ostatni_element.nast
    #
    #     pierwszyel.nast = ostatni_element
    #     ostatni_element.poprz = pierwszyel


lista = Lista_2k_1w()
lista.pierwszy_el().dodaj_przed_nim(3)
lista.pierwszy_el().dodaj_po_nim(5)
lista.pierwszy_el().dodaj_po_nim(8)
lista.pierwszy_el().dodaj_po_nim(7)
lista.pierwszy_el().dodaj_po_nim(11)
lista.pierwszy_el().dodaj_po_nim(4)
lista.pierwszy_el().dodaj_po_nim(12)

lista.drukuj()