estructura de datos Tabla de un lineal 2-

concepto de mesa lineal

Definición: una secuencia finita que tiene los mismos elementos de datos de características.

El número de elementos se denomina la longitud de la forma lineal, está representado por n (n ≧ 0), y cuando n es 0, representa una mesa lineal es mesa vacía


1. Características lógicas: estructura lineal

Definición de estructura lineal: a uno lineal relación entre elementos de datos.

① Cuando hay un primer elemento (cabecera), hay un último elemento (pie de página) mesa vacía, el primer elemento pasado / está vacía

② Además del primer elemento, el otro elemento tiene un predecesor única
excepción del último elemento, el otro elemento tiene un sucesor único


2. Estructura de almacenamiento: Secuencia / cadena

estructura de almacenamiento secuencial es una tabla de acceso aleatorio lineal (por supuesto también el orden de acceso) estructura de memoria
se almacenan accede secuencialmente vinculado estructura de almacenamiento de la estructura lineal de una mesa.

1. La tabla de secuencia (almacena en orden):

(1) Definición de: una mesa lineal todos los elementos de acuerdo con su orden lógico, se almacenan secuencialmente en una partida memoria contigua ubicación de almacenamiento designada

(2) Características:
① acceso aleatorio

② ocupan espacio de almacenamiento contiguo, distribución de almacenamiento de espacio-tiempo

③ Para mover una pluralidad de elementos de inserto (añadido después de que el número de la tabla de la i-ésimo elemento de los elementos móviles ⇒ ni)

④ densidad de almacenamiento = 1


2. lista (cadena de tiendas):

(1) Definición: relación lógica entre el elemento de unión por medio de un puntero que indica la dirección de almacenamiento (campo de puntero adicional) FIG.
Tal como una sola información de dirección de nodo precursor de la cadena contenida en el nodo sucesor

(2) Características:
① no ocupan espacio de almacenamiento contiguo, el espacio de almacenamiento asignado veces

② no admite el acceso aleatorio, sólo el acceso secuencial (para ser leídos debe atravesar todos los elementos de un elemento que le precede a encontrar y leer)

② Puesto que la necesidad de dejar espacio para el campo de puntero,
la utilización del espacio de almacenamiento es baja, la densidad de almacenamiento <1

③ asignación de soporte dinámico de espacio de memoria (ahora dividida activo)

④ operación de inserción, sin elemento móvil


3. La cabeza puntero de cabecera:

① puntero del campo de puntero es un puntero a una variable independiente, ni una sola lista enlazada de nodos

③ lista de nodos cabeza no es necesario,
pero la cadena (cadena acíclica) debe tener el puntero de cabeza,

la posición del primer elemento de la tabla de secuencia también se puede utilizar para indicar el puntero de cabecera

Sólo la cabeza puede ser circular puntero de lista de punteros / cola para indicar (no se requiere puntero de cabecera)

③ puntero de cabeza tiene el efecto de identificación de la lista, la lista entera debe tener acceso a un puntero que empezar de cero, (el nombre de una variable de puntero) Cabeza de lista de nombres de puntero de etiquetado

④head-> Siguiente ⇔ (cabeza *) .A continuación
(puntero a los miembros del dominio puntero nodo principal, es decir, puntos de la cabeza a la siguiente nodos ⇒head-> próximos apunta al siguiente nodo de la siguiente)

⑤ Si el primer nodo tiene una lista, independientemente de si la lista está vacía, el puntero de cabeza no es nulo. El puntero de cabeza es un elemento esencial de la lista. (Primera declaración, ningún puntero salvaje al nodo de cabeza)

puntero de la tabla de secuencia es la tabla de secuencia vacía está vacía


4. Una lista de cinco formas

La lista no puede distinguir entre el plomo y los nodos de unión de plomo, utilizar el mismo caso, sola cadena


1. Lista única

Cada nodo, además de los campos de datos, que comprende además un campo siguiente puntero a punto al nodo subsiguiente. (Fin) campo de puntero de cola tabla de nodos es NULL

de cadena única (1) primer nodo

En el plomo en una única lista enlazada de nodos, el primer nodo que tiene la ambigüedad
con el primer elemento con el elemento de nodo representa un nodo
de un nodo representa un nodo (el primer nodo / primera mesa lineal elemento de nodo)

① el primer nodo (la longitud de la lista se pueden almacenar). No hay campo de puntero gama de información / metadatos apunta al primer nodo

② almacén apuntador cabeza a cabeza la posición de memoria del primer nodo (siempre apunta hacia el nodo principal), el puntero de cabeza está siempre se vacía (cuando el puntero de cabecera de la declaración aunque no es el primer nodo, pero no está vacío punteros salvajes)
del puntero , la posición de almacenamiento que, que apunta a

③ el nodo sucesor nodo de cabecera almacenar el primer elemento de datos se inicia de nodo

④head-> siguiente = NULL, la lista está vacía


(2) no conduce a un único nodo de lista enlazada

En primer lugar (elemento) nodo como nodo de inicio

se dirijan directamente al nodo de inicio, cuando la cabeza es NULL, la lista está vacía


2. lista doblemente enlazada

Se añade un campo de puntero en los puntos de la lista de nodos vinculados individuales antes del predecesor del nodo actual

Todavía no distinguir entre el plomo y el nodo de enlace de plomo, y la misma cadena única

(Normal) acaba de añadir un precursor lista campo de puntero doblemente enlazada, cualquier ciclo no
determinado Tabla vaciar cadena única idéntica con ordinario

3. Ciclo lista enlazada

El último campo un único puntero lista enlazada (el extremo del puntero unión campo de tabla) apunta a la primera nodo.

Aquí el primer nodo se refiere al primer nodo / nodos primer elemento
porque el bucle todavía puede distinguir entre un único nodo de lista enlazada y plomo sin nodo de cabecera

(2) tabla de determinación de vaciar
sin nodo de cabeza:
cabeza = NULL

En primer nodo:
= cabeza-> cabeza siguiente
ciclo primer nodo puntero de lista (simple / doble) no es nulo

4. El doblemente enlazada circular

(1) Definición:
El nodo terminal de doble ligado (pies de página de nodo) un primer puntero al siguiente nodo en la lista enlazada
al primer nodo puntero de lista de antes de la nodo de terminación

plomo distinguibles y nodo de enlace sin plomo


(2) determina la tabla vacía
sin nodo de cabeza:
cabeza = NULL

En primer nodo:
cabeza-> Siguiente == cabeza y cabeza-> antes = cabeza
de todas las determinaciones a un
puntero de lista de nodos doblemente enlazada circular de plomo no es nulo

Una lista doblemente enlazada circular de cualquier nodo no nulo puntero precursor

5. lista estática

Por medio de una matriz unidimensional, una lista enlazada requiere el espacio continuo

Cada puntero apunta a la ubicación del nodo sucesor componente nodo de la matriz

"Componente Pointer": variable entera que apunta a los siguientes nodos de la posición relativa array

Una matriz de primera posición de reposo (similar al primer nodo), puntos de nodo al primer elemento de
S [0] .cur nodo es la primera posición



La lista enlazada de nodos asociado a distinguir el puntero

1. Relación: Cuando definimos un puntero que apunta a un nodo A, ya que el nombre del nodo no es, por lo que se utilizó un puntero al nombre de A como el nombre del nodo

Significado A: ① ② el nodo un puntero al nodo

2. distinguir:
① Un punto se refiere aquí que puntero ⇒ Un
②free () liberar A⇒A presente documento se refiere al nodo
ya que la variable puntero es en sí misma requiere espacio de almacenamiento asignado por el sistema, la necesidad de usuario no libera. propio espacio de memoria asignada del usuario (espacio de memoria la malloc / nodo) necesita su propia liberación



estructura de lista lineal se define y el funcionamiento básico

I. estructura se define

1. tabla de orden

(1) typedef struct {} Sqlist ;
definir una tabla de secuencia (estructura) y el tipo de cambio llamado Sqlist

(2) miembros de la elemento de la matriz (por un puntero a la elemento de matriz de la matriz elem dirección de base) int * elem;
una longitud de la matriz y la longitud de espacio listsize tamaño de asignación

Inicializar una lista vacía 1-2 lineal

Estado inicial (SqList & L) // inicializar un vacío referencia de matriz
{
L.elem = (int ) el malloc (listsize la sizeof (int))
//L.elem de asignación de puntero apunta matriz a la memoria asignada

si la salida (desbordamiento) (L.elem!); // Error de asignación de memoria (L.elem es NULL, el proceso de salida y el desbordamiento de retorno)

L.length = 0;
L.listsize = listsize;
devolver bien;
}


2. lista enlazada

(1) typedef struct LNode {} LNode, * LinkList;
define un único nodo de lista enlazada (estructura) y el tipo de cambio llamado LNode,

Y cambiar el nombre struct LNode * (nodo puntero) Tipo LinkList

Encuadernación int * (punteros int) TIPO apreciado

Para ser entendido como un tipo int *

LinkList L; define un nodo de variable de tipo puntero L

L es (puntos a) tipo de nodo de variables de puntero,
la identificación de toda la tabla de secuencia


(2)
nodo comprende un campo de datos (miembros) de datos INT

Y un campo de puntero (miembros) LNode struct * próxima
se define por la estructura misma, de manera que la estructura en sí no es una provincia
próxima puntero al siguiente nodo

3. lista doblemente enlazada

(. 1) {} typedef struct DLNode DLNode, * DuLinkList;
DLNode doble ligado de tipo lista de nodos,
DuLinkList lista doblemente enlazada tipos de puntero nodo

(2) un campo de datos de datos INT;
dos campo de puntero
struct DLNode * anteriores; apunta al nodo predecesor puntero
DLNode struct * siguiente; sucesor puntero nodo señalador



tabla de secuencia de dos operación

1. Pulse los valores de los elementos del algoritmo de búsqueda

Para encontrar el i-ésimo valor en las tablas de secuencia satisface r comparan (elemento)

int LocateElem (SqList L, Elemtype correo, de estado (* comparar) (Elemtype, Elemtype)) {~}

(1) para una llamada de SqList L
no cambia la tabla de secuencia en la memoria de

(2) puntero de función

Status (* comparar) (int, int)
puntero de función para comparar retorno (tipo) del Estado, de parámetros (tipo) de int, int función de

Asignación (la asignación de llamadas): LocateElem (L, E, COMP)
comp es una función de su definición, el puntero apunta a comparar, comparar y puede ser llamado por

Llamar: comparar (a, b) / (* comparar) (a, b)


(3) un primer elemento del valor de la matriz se almacena en elem [0] / * elem, la (primera matriz dirección elem == y elem [0])

* Elem acceso elementos de la matriz con secuencia de bits de elementos ⇒ (1-n)

// valor i orden del elemento, como el valor inicial 1.
Int 1 = I.;

// dirección base p asignado a la tabla de orden, la tabla de fin de atravesar a través ++ p
elemType L.elem = * p;

while (i <= L.length && (* comparar) (* p ++, e)!) ++ i;
si (i <= L.length) i retorno;
else return 0;
}


3. Insertar elemento

Estado Insert (SqList & L, int i, int e) // e se inserta antes del i-ésimo posición
{
IF (i <1 || i.> + L.length 1.) De retorno de error;
// ser el primero (1 ~ n antes +1) posiciones de inserción

SI (L.length> = L.listsize)
{
elemType * NewBase;
NewBase = (int *) realloc (L.elem, (+ L.listsize increament) * sizeof (elemType));
SI Salir (el desbordamiento (NewBase!) );
// añadir una determinación, para evitar el fallo de la asignación, la matriz original se vacía más

L.elem=newbase;
L.listsize+=increament;

}

* P int;
P = & L.elem [. -I 1];
// inserto posición del elemento (asignaciones de variables dirección)
for (int * Q = & L.elem [-L.length 1.]; Q> = P; Q-)
// q es el final de la posición del elemento de tabla
* (q + 1) = * q;

    *p=e;
L.length++;

devolver bien;
}

Publicado 46 artículos originales · elogios ganado 15 · Vistas a 30000 +

Supongo que te gusta

Origin blog.csdn.net/qq_41850194/article/details/97374861
Recomendado
Clasificación