elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Usando Git para manipular el directorio de trabajo, el índice y commits (segunda parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  ¿Como controlar punteros a estructuras y meterlo en una funcion?
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: ¿Como controlar punteros a estructuras y meterlo en una funcion?  (Leído 2,146 veces)
jucarlos

Desconectado Desconectado

Mensajes: 2


Ver Perfil
¿Como controlar punteros a estructuras y meterlo en una funcion?
« en: 25 Marzo 2022, 03:55 am »

tengo una tarea de estructura de datos, donde debo de poner para cada nodo un siguiente, un anterior y un dato de tipo string.

Código:
struct node {
    string data;
    struct node* prev;
    struct node* next;
};

El problema es que tengo que hacer una lista doblemente ligada circular, que no tengo problema al crearla de la siguiente manera:

Código:
#include <iostream>
#include <stdlib.h>

using namespace std;
int main()
{
    struct node* head = makeNode();
    head->data = "Juan";

    struct node* newnode = makeNode();
    newnode->data = "Carlos";

    struct node* temp = head->next;
    newnode->next = temp;
    newnode->prev = head;
    head->next = newnode;
    newnode->prev = head->next;

    Print(head);
    Print(newnode);

    return 0;
}

Corrida de escritorio:
node->prev: 0x6000009782a0
node->data: Juan
node->next: 0x6000009782d0

node->prev: 0x6000009782d0
node->data: Carlos
node->next: 0x6000009782a0

donde se cumple que el 'siguiente' de el ultimo nodo es la direccion de el 'anterior' del primer nodo.

pero al momento de ponerlo en una funcion, todo truena como siempre en los metodos no soy tan habilidoso.

Código:
struct node* addEnd(struct node* head, string data)
{
    struct node* newnode = makeNode();
    if(head == NULL)
    {
        head = newnode;
        return newnode;
    }
    else
    {
        struct node* temp = head->next;
        newnode->next = head;
        head->next = newnode;
        newnode->prev = head->next;
        return head;
    }
}

algun alma bendita que me pueda ayudar porfavor :( llevo como dos semanas intentado que funcione, pero lo maximo que he logrado es sin usar funciones.

tambien intente lo siguiente en el metodo de addEnd():

Código:
temp = head;
while(temp->next !=head)
{
temp = temp->next;
}


En línea

MAFUS


Desconectado Desconectado

Mensajes: 1.603



Ver Perfil
Re: ¿Como controlar punteros a estructuras y meterlo en una funcion?
« Respuesta #1 en: 26 Marzo 2022, 11:03 am »

Sé que C++ tiene otra forma de hacer las cosas, con referencias y tal. No sé.

Pero en C sería algo así:
Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. typedef struct node {
  5.    int data;
  6.    struct node* prev;
  7.    struct node* next;
  8. } node;
  9.  
  10. node* add(node **head, int data) {
  11.    node *new = malloc(sizeof(node));
  12.    if(!new) {
  13.        return NULL;
  14.    }
  15.  
  16.    new->data = data;
  17.  
  18.    if(*head) {
  19.        new->prev = (*head)->prev;
  20.        new->next = *head;
  21.        (*head)->prev->next = new;
  22.        (*head)->prev = new;
  23.    } else {
  24.        new->next = new;
  25.        new->prev = new;
  26.        *head = new;
  27.    }
  28.  
  29.    return new;
  30. }
  31.  
  32. void drop(node **head) {
  33.    node *aux;
  34.    if(!*head) {
  35.        return;
  36.    }
  37.  
  38.    (*head)->prev->next = NULL;
  39.    while(*head) {
  40.        aux = *head;
  41.        *head = (*head)->next;
  42.        free(aux);
  43.    }
  44. }
  45.  
  46. int main() {
  47.    node *list = NULL;
  48.    add(&list, 0);
  49.    add(&list, 1);
  50.    add(&list, 2);
  51.  
  52.    printf("%d ", list->data);
  53.    printf("%d ", list->next->data);
  54.    printf("%d ", list->prev->data);
  55.  
  56.    drop(&list);
  57. }


En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Duda: ¿Como especificar parámetros dentro de estructuras de una función?
ASM
.:UND3R:. 2 3,549 Último mensaje 13 Mayo 2012, 18:53 pm
por .:UND3R:.
Ayuda en estructuras como funcion
Programación C/C++
Kensei_G 1 1,860 Último mensaje 30 Mayo 2012, 19:35 pm
por durasno
Punteros a estructuras...???
Programación C/C++
Ja_90 4 2,423 Último mensaje 11 Noviembre 2014, 21:10 pm
por eferion
Estructuras con Punteros
Programación C/C++
jgonzalezo 1 1,627 Último mensaje 13 Abril 2015, 09:02 am
por eferion
Estructuras como argumento de funcion
Programación C/C++
BigMuff 1 1,291 Último mensaje 31 Julio 2018, 13:18 pm
por MAFUS
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines