¿Qué es un programa simple de C ++ para insertar un nodo en una lista vinculada?

Supongo que está hablando de una lista vinculada individualmente. Entonces empecemos.

Una inserción en una lista vinculada puede tener lugar en tres posiciones: inserción al principio, inserción al final e inserción en algún lugar en el medio (ni inicio ni principio). Vamos a entenderlo uno por uno. Utilizaremos la siguiente analogía para obtener una mejor imagen.

Imagínalo de esta manera. Hay una ciudad extraña donde cada localidad tiene varias casas. Ahora estas casas tienen un extraño sistema de numeración. Cada casa aquí como dos direcciones, su propia dirección y la dirección de una casa contigua. Si desea ir a la casa de su amigo que vive aquí, se le proporcionará un número de calle. Este número de calle es único para una serie de casas (en nuestra lista vinculada es la cabeza). Ahora este número de calle tendrá una dirección para la próxima casa. Esta casa puede o no ser la casa de su amigo (escribí esta declaración para que se dé cuenta de que buscar en una lista vinculada es difícil). Cuando llegas a la casa de al lado te dan otra dirección. Esto continúa hasta que llegues a la casa de tu amigo. A las personas aquí se les ordena dar solo el número de la calle cada vez que alguien les pregunta su dirección (les dice que el propietario está loco)

Afortunadamente, tu padre fue transferido a la misma localidad que tu amigo y ahora para vivir aquí debes construir una casa. Y el propietario le da tres lugares para construir una casa. Tienes que seguir las locas convenciones de la localidad para vivir allí.

Al principio de la localidad:

Entonces primero construyes la casa. Ahora tienes que cuidar la dirección. Como su casa es la primera de la localidad, el número de la calle debe contener su dirección. Y debe contener la dirección de la segunda casa. Entonces, lo que debe hacer es copiar primero la dirección del número de la calle en su propia casa (tenga en cuenta que no puede hacerlo al revés. Es decir, no puede borrar el número de la calle primero y luego copiar su dirección en su casa). Luego borras el número de la calle y escribes tu propia dirección allí.

Al final de la localidad

Entonces, lo primero que debes hacer es construir la casa. Luego, comienza desde el número de la calle y continúa hasta la siguiente casa hasta que encuentre una casa cuyos propietarios dicen que no tenemos ninguna dirección (NULL significa ausencia de dirección y no cero). Luego les da la dirección de su casa y les dice que si viene algún visitante, los dirige a esta dirección. Y ahora no contiene ninguna dirección (su dirección es NULL).

En algún lugar en el medio

Le han dicho que su casa debe ser la quinta casa desde el principio. Ahora es un poco complicado. Intenta seguir conmigo. Primero construyes la casa. Ahora primero va a la cuarta casa (comenzando desde el número de la calle y continuando hasta llegar a la casa 4) y les pregunta qué dirección tienen. Te dirán la dirección de la quinta casa. Ahora toma esta dirección y vente a tu casa. Y en tu placa de dirección escribes esta dirección. Ahora vas a la casa número 4 y les das tu dirección diciéndoles que ahora eres la casa 5. (Si vas a la casa número 4 y luego les das directamente tu dirección, perderás la dirección actual de la casa número 5).

Así que he tratado de hacerlo lo más simple posible. Si tiene alguna duda, también le proporcionaré el código fuente. Pero te insto a que lo escribas tú mismo. Espero que esto ayude.

Creo que estás preguntando “escribir” en lugar de “qué” y suponiendo que estás hablando de una lista vinculada individualmente. de todos modos!

Un nodo en la lista vinculada contiene 2 tipos de campos.

1.datos

2.Enlace al siguiente nodo

Programa

#include

Usando el espacio de nombres estándar;

Nodo de estructura // definiendo un nodo

{

Datos int;

Nodo * siguiente;

}

Nodo * cabeza;

Insertar vacío (int n, int x); // n es la posición y x son los datos

Int main ()

{

Cabeza = NULL;

Inserto (1,35); // el valor 35 se insertará en la posición 1

Devuelve 0;

}

Insertar vacío (int n, int x)

{

Nodo * temp = nuevo nodo ();

temp-> datos = x;

Temp-> siguiente = NULL;

Si (n == 1)

{

Temp-> siguiente = cabeza;

Cabeza = temp;

Regreso;

}

Nodo * temp1 = nuevo nodo;

Temp1 = cabeza;

Para (int i = 1; i

{

Temp1 = temp1-> siguiente;

}

Temp1-> siguiente = temp;

}

Por favor, corrígeme si estoy equivocado.

¿Qué es un programa simple de C ++ para insertar un nodo en una lista vinculada?

¡Aquí estás!

#include int main () {
std :: list theList;
theList.push_back (42);
}

Probablemente esto no sea lo que esperabas, pero eso es lo que pediste. Si, en cambio, desea un ejemplo de cómo implementar una lista vinculada en C ++, este ya no sería un programa simple. Afortunadamente, la plantilla de la lista ya está implementada y estandarizada, por lo que no es necesario inventar otra.

Sin embargo, tenga en cuenta que hay muy pocos casos de uso real para std :: list en C ++ (o listas vinculadas con nodos asignados dinámicamente en general), en la mayoría de los casos se debe usar std :: vector o std :: deque para obtener un mejor rendimiento .

La Biblioteca de plantillas estándar tiene una estructura de datos de “lista” que puede usar. Tiene una construcción en “insertar” operación que también puede usar. Supongo que puede escribir el “principal” o hacer que se genere automáticamente para usted. Solo tendrá que proporcionar el tipo de datos para enumerar. Puede ser int para enteros o un tipo personalizado de su propia creación.

FYI: recientemente escuché de Chandler Carruth para evitar listas vinculadas si tiene problemas de eficiencia. Si bien la inserción es mucho más rápida que con un vector, aparentemente el hecho de que las listas no usan memoria contigua realmente lo arruina.

Hay tres formas de insertar un nuevo nodo en una lista vinculada.

  1. al comienzo de la lista vinculada
  2. al final de la lista vinculada
  3. entre la lista vinculada

Esto se explica en detalle en la publicación Insertar un nuevo nodo en una lista vinculada en C ++.

El programa final en C ++ se escribe a continuación.

#include

usando el espacio de nombres estándar;

nodo de estructura
{
datos int;
nodo * siguiente;
};

clase enlace_lista
{
privado:
nodo * cabeza, * cola;
público:
lista enlazada()
{
cabeza = NULL;
cola = NULL;
}

void add_node (int n)
{
nodo * tmp = nuevo nodo;
tmp-> datos = n;
tmp-> siguiente = NULL;

if (cabeza == NULL)
{
cabeza = tmp;
cola = tmp;
}
más
{
cola-> siguiente = tmp;
cola = cola-> siguiente;
}
}

nodo * gethead ()
{
cabeza de retorno;
}

visualización de vacío estático (nodo * cabeza)
{
if (cabeza == NULL)
{
cout << "NULL" << endl;
}
más
{
cout << head-> data << endl;
pantalla (cabeza-> siguiente);
}
}

vacío concatenado estático (nodo * a, nodo * b)
{
if (a! = NULL && b! = NULL)
{
if (a-> next == NULL)
a-> siguiente = b;
más
concatenar (a-> siguiente, b);
}
más
{
cout << "O a o b es NULL \ n";
}
}

frente nulo (int n)
{
nodo * tmp = nuevo nodo;
tmp -> datos = n;
tmp -> siguiente = cabeza;
cabeza = tmp;
}

nulo después (nodo * a, valor int)
{
nodo * p = nuevo nodo;
p-> datos = valor;
p-> siguiente = a-> siguiente;
a-> siguiente = p;
}
};

int main ()
{
lista_enlace a;
a.add_node (1);
a.add_node (2);
a. frente (3);
lista_enlace :: pantalla (a.gethead ());
devuelve 0;
}

Próxima pregunta.

More Interesting

¿Existe un algoritmo de clasificación que pueda ordenar los n números dados en O (1) donde n> 2?

¿Qué tan valioso sería ser ubicado para aprender la estructura de datos usando C?

¿Qué es una explicación intuitiva de MapReduce?

¿Cómo se implementan las estructuras matemáticas básicas como +, -, *, / en los lenguajes de programación?

¿Cuál es la diferencia entre binario, algoritmo y lenguaje de programación?

Los electrones son extraños. ¿Cómo conocen el camino más corto al suelo? ¿No tendrían que 'mirar' hacia adelante?

Cómo resolver este problema de integración definitiva

Resolví el problema de la Torre de Hanoi de una manera que no requiere conocer el movimiento anterior o siguiente. ¿Se ha hecho esto antes?

Descubrí el algoritmo de Dijkstra yo mismo. ¿Puedo decir que soy bueno en informática?

¿Cuáles son las ventajas de los algoritmos de aprendizaje de refuerzo como LinUCB sobre otros algoritmos de predicción de CTR en línea como la regresión logística en línea?

¿Cuáles son algunos métodos de diagnóstico utilizados en un algoritmo de agrupamiento?

¿Cuáles son las mejores estructuras de datos y algoritmos de entrenamiento en kolkata durante 2 meses?

No tengo ningún talento en estructuras de datos y algoritmos, ¿debería abandonar mi título de CS?

¿Qué significa front = rear = null y front = rear = -1 en la cola de las estructuras de datos en C ++?

En términos simples, ¿qué es la complejidad del tiempo amortizado?