2013-02-03 16 views

Odpowiedz

1

Tam nie jest zbudowany w połączonej listy w Pythonie, ale u mogą korzystać rozkolejkowania, daje u dostępu do głowy i ogon obu, ale jeśli u chcą realizować swoje właścicielem połączonej listy może być u mogą korzystać

Python Linked List

1

Chyba że rzeczywiście potrzebujesz jawnie powiązanej struktury listy dla czegoś konkretnego, wbudowana lista Pythona ma wszystkie funkcje, które można uzyskać z listy połączonej. Na przykład, można użyć go jako stos, co następuje:

>>> x = [] 
>>> x.append(1) 
>>> x.append(2) 
>>> x 
[1, 2] 
>>> x.pop() 
2 
>>> x 
[1] 
>>> 

Lub, aby wstawić element po danym elemencie:

>>> x = [1,2,3,4,5,6,7] 
>>> x.insert(3,"a") 
>>> x 
[1, 2, 3, 'a', 4, 5, 6, 7] 
>>> 

Patrz, na przykład, w dokumentacji Pythona na data structures.

Jest to jednak użycie abstrakcyjnego typu danych "lista" (ADT). Natomiast "połączona lista" nie jest ADT, ale jednym z wielu możliwych sposobów wdrożenia tego ADT.

+0

To nie wyjaśnia, jak dodać/usunąć element gdzieś pomiędzy połączoną listą. Jest to nadal implementacja stosu/kolejki. – Mugen

+0

@Mugen: Dodałem to wyjaśnienie. Jednak odpowiedź gaureva była poprawna. W Pythonie nie ma wbudowanej listy połączonej, ale struktury 'list' i' deque' zapewniają wszystkie wymagane funkcje. – Simon

+0

Ale w najbardziej popularnej realizacji, CPython, lista wbudowana jest jak wektor w C++, prawda? Tak więc zajmie O (N) wstawienie elementu gdzieś na środku listy. Natomiast Lista Łączona jest często używana do wstawiania przez O (1) – Pavel

0

Wierzę, że klasa deque w pakiecie kolekcji jest zaimplementowana jako podwójnie połączona lista z osłonami głowy i ogona. Obsługuje wszystkie zwykłe interfejsy API domyślnej listy. Aby dołączyć do głowy, użyj funkcji leftappend.

from colletions import deque 
3

Tak, Python collections module zapewnia C-wdrożone deque obiekt, który wykorzystuje listę BLOCK s połączony wewnętrznie.

typedef struct BLOCK { 
    struct BLOCK *leftlink; 
    PyObject *data[BLOCKLEN]; 
    struct BLOCK *rightlink; 
} block; 

typedef struct { 
    PyObject_VAR_HEAD 
    block *leftblock; 
    block *rightblock; 
    Py_ssize_t leftindex;  /* 0 <= leftindex < BLOCKLEN */ 
    Py_ssize_t rightindex;  /* 0 <= rightindex < BLOCKLEN */ 
    size_t state;    /* incremented whenever the indices move */ 
    Py_ssize_t maxlen;   /* maxlen is -1 for unbounded deques */ 
    PyObject *weakreflist; 
} dequeobject; 

static PyTypeObject deque_type; 
Powiązane problemy