Este artículo proviene de: el blog RDCC
Gracias Autor: ACHelloWorld
Ver el original: Ir Idioma (descripción contenedor)
envase: 容器| envase
Como puede verse que comprende tres partes: montón, lista y anular. Se introdujeron los siguiente
1. montón
montón es el montón, es una estructura de datos común, en el que la fuente, proporciona las necesidades de interfaz a ser implementadas en el uso práctico.
El siguiente es un ejemplo sobre el uso de montón.
código:
principal del paquete de importación ( " FMT " " Contenedor / montón " ) // montón proporciona la necesidad interfaz para implementar un método de tipo Heap [] int // configuración de la pila de la parte superior es pequeño, un gran cambio de la pila superior basta siguientes símbolos func (H * Heap) Menos (I, J int ) BOOL { retorno (* H) [I] <(* H) [J] } FUNC (H * Heap) Intercambiable (I, J int ) { ( * H) [ I], (H *) [J] = (H *) [J], (* H) [I] } FUNC (H * Heap) len () int { retorno len (* H) } FUNC (H* Heap) Pop () interfaz {} { x: = (* h) [h.Len () - 1 ] * h = (* h) [: h.Len () - 1 ] retorno x } func (h * Heap) de inserción (x interfaz {}) { * h = append (* h, x. ( int )) } func (h * Heap) Quitar (idx int ) interfaz {} { h.Swap (idx, h.Len ( ) - 1 ) volver h.Pop () } func main () { // 创建一个montón h: = & Heap {} heap.Init (h) //Insertar elementos en el montón h.Push ( . 5 ) h.Push ( 2 ) h.Push ( . 1 ) h.Push ( . 8 ) h.Push ( . 4 ) h.Push ( . 6 ) h.Push ( 2 ) // Output montón de elementos, el equivalente de una matriz, la matriz original fmt.Println (H) // esto debe ser reheapify, establecer una buena montón de heap.Init (H) // posición superior pequeña pila elemento correspondiente en la matriz de FMT. println (H) // eliminar el elemento de marcado 5, y el subíndice se inicia desde 0 (h.Remove 5 ) // salida en forma de una pila para h.Len ()> 0 { fmt.Printf (" % D " , heap.Pop (h)) } fmt.Println () }
2. lista
lista se doblemente enlazada tipo de lista, se utilizan como sigue
código:
principal paquete de importación ( " FMT " " Contenedor / Lista " ) FUNC main () { // crear una lista doblemente enlazada LS: = list.New () // insertará en la lista 26 letras minúsculas doblemente enlazadas por I: = 97 ; I < 123 ; I ++ { ls.PushFront (I) // PushFront () en nombre de la parte de cabeza se inserta, el mismo empuje, () en nombre insertado desde la parte trasera } // iterar a través de todas las letras en las ls lista doblemente enlazada para IT: = ls.Front () ; IT = nil ;! IT = it.Next () { fmt.Printf ( " % C " , it.Value) } fmt.Println () }
List
Y Element
. El ex lograron una lista doblemente enlazada (en lo sucesivo, la lista), que representa la estructura de los elementos de la lista.
List
Y Element
todo tipo de estructuras. Tipo de estructura tiene una característica, es decir, que tienen valor cero será su estructura particular, pero ningún valor cualquier contenido personalizado, el equivalente de una concha
Lista de los métodos principales:
MoveBefore
: Elementos dados a la parte delantera de los otros elementos
MoveAfter
: Dadas elemento se mueve detrás de otro elemento
MoveToFront
: El elemento dado se mueve a la vanguardia de la lista
MoveToBack
: El elemento dado se mueve al extremo más posterior de la lista
Front
: Obtener la vanguardia de la lista
Back
: Obtener la lista de la última final
InsertBefore
Insertar un nuevo elemento antes de que los elementos que se especifican:
InsertAfter
: Insertar un nuevo elemento después del elemento especificado
PushFront
: Se utiliza para insertar un nuevo elemento a la cabeza de la lista.
PushBack
: Se utiliza para insertar un nuevo elemento a la cabeza de la lista.
3. anillo
anillo es una lista enlazada circular, se puede hacer referencia al uso específico del código siguiente
código:
principal del paquete de importación ( " FMT " " Contenedor / anillo " // paquete cerrado se introduce, véase / usr / local / Go / la src / PKG Contenedor / anillo / ) FUNC main () { // crear un elementos de bucle 10 r: como ring.New = ( 10 ) // para asignaciones de elementos de bucle cerrado para I: = 1. ; I <= r.Len (); I ++ { r.Value = I R & lt = r.Next () } // bucle para imprimir bucle el valor del elemento r.Do ( FUNC (P interfaz {}) { el println (P) }) // después del elemento actual de los elementos obtenidos 5 R5: r.Move = ( . 5 ) fmt.Println (R5) fmt.Println (r) // Enlace el elemento actual r y r5, los elementos correspondientes a la eliminada entre R y R5 R1: = r.Link (R5) fmt.Println (R1) fmt.Println (R & lt) }