Duda con listas ligadas (punteros) C++

publicado por: Anonymous

El ejercicio en cuestión es este:

introducir la descripción de la imagen aquí

Tengo ya este código en el header:

#ifndef HEADER_H
#define HEADER_H7

//Tipo dato Nodo
struct Nodo
{
    int dato;
    Nodo* izq;
    Nodo* der;
};

//Tipo dato Estructura
struct Estructura
{
   Nodo* inicio;
   Nodo* fin;
};


void inicializarEstructura(Estructura& est);
//{PRE: 'est.inicio' es nullptr y ‘est.fin’ es nullptr}

#endif // HEADER_H

Y este es el código que tengo de momento del main:

//Tema 1. Ejercicios punteros.

#include <iostream>
#include <header.h>

using namespace std;

int main()
{

    return 0;
}

void inicializarEstructura(Estructura& est)
{
     //1º Aquí asigno memoria dinámica para cada nodo
     Nodo* p = new Nodo;
     Nodo* q = new Nodo;
     Nodo* h = new Nodo;

     //2º Asigno los punteros correspondientes
     //2.1º Primero los punteros de la Estructura "est" a nodo
     *est.inicio = *q->der;
     *est.fin = *h->izq;
     //2.2º Segundo los punteros de nodo a nodo
     *q->der = *est.fin;
     *p->izq = *est.inicio;
     est.fin->izq = p->dato;
}

Me salta este error:

introducir la descripción de la imagen aquí

Sólo me da el error cuando intento apuntar con la variable izq(de tipo nodo) del tercer nodo, a la variable dato(de tipo int) del 1er nodo.

¿Cómo lo soluciono?

Gracias de antemano.

PD: Recibir una respuesta me es importante, necesito entender el concepto de puntero correctamente, y creo que al ver este ejercicio resuelto entenderé bastante mejor este tema.

solución

est.fin->izq = p->dato;

Si dato es un entero, no puedes asignarlo a un puntero.

Lo que quieres hacer, inicializar la lista, es muy simple

void inicializarEstructura( Estructura& est ) {
  nodo *izquierda = new Nodo;
  nodo *centro = new Nodo;
  nodo *derecha = new Nodo;

  izquierda->izq = nullptr;
  izquierda->dato = 2;
  izquierda->der = centro;

  centro->izq = izquierda;
  centro->dato = 1;
  dentro->der = nullptr;

  derecha->izq = centro;
  derecha->dato = 3;
  derecha->der = nullptr;

  est.inicio = izquierda;
  est.fin = derecha.
}

Preguntas sobre punteros hay unas cuantas en el sitio. Puedes consultarlas, para ver ejemplos varios y variados.

Respondido por: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *