Código fuente de datos dinámicos

# include & ltstdio.h & gt

# include & ltmalloc.h & gt

# include & ltstring.h & gt#El número máximo de nombres definidos es 50

#Definir NOMAX 20

#Definir tipo de datos estudiante

nodo de estructura typedef

{

void *data;

Nodo de estructura * izquierda

Nodo de estructura *derecha;

} nodo; estructura typedef

{

Estructura nodo *cabeza;

Nodo de estructura*actual;

Nodo de estructura*trasero;

int count;

}Lista vinculada; estructura

p>

{

nombre char[nombre max];

int edad

char no[nombre max] ;

}Tipo de datos; void init _ linklist(lista de enlaces * lista)

{

Lista-> Lista->actual = NULL

Lista->rear=empty;

Lista->count=0;

} void add_linklist(lista de enlaces * lista, void *datos)

{

NODO * nuevoNodo

nuevo NODO =(NODO *)malloc(tamañode(NODO));

Nuevo nodo->data=data;

if (list->head==NULL)

{

Lista-> = newNode

Lista -> actual = newNode

Lista -> rear = newNode

Nuevo nodo -> left = NULL

Nuevo nodo->right=null;

Lista->count++;

}

Otro

{

Lista->detrás->right = newNode

Nuevo nodo->left = lista->detrás;

Nuevo nodo ->right=null

Lista ->rear = newNode

Lista ->current = newNode

Lista ->count++;

}

}

void free_list(lista enlazada * lista, tipo de datos *)

{

NODE * tmp = list->head;

Y (tmp! =nulo)

{

if(tmp-& gt; left==NULL)

{

tmp = tmp-& gt; derecha;

Continuar;

}

si(tmp-& gt;right==NULL)

{

gratis((tipo de datos*)(tmp->datos));

gratis(tmp);

descanso;

}

Otro

{

gratis((tipo de datos*)(tmp->left->data));

Gratis(tmp->izquierda);

p>

tmp = tmp-& gt;

}

} init _ linklist(lista);

}void printlist(lista vinculada * lista, tipo de datos *)

{

NODO * tmp = lista-& gt; I = 0;

Y (tmp!=null)

{

Printf("Artículo %d registro:\n ",++ I);

printf("-\ n ");

Printf ("nombre: %s\n ", ((DATATYPE *)(tmp-& gt; datos))-& gt; nombre);

Printf ("Edad: %d\n ", ((DATATYPE *)(tmp-& gt;data))-& gt; edad);

Printf("ID de estudiante:% s\n", ((tipo de datos*)(tmp-->;data))->No);

printf("-\n ") ;

tmp = tmp-& gt; Derecha;

}

Retorno;

}int main()

{

DATATYPE * pStu = NULL

char buf[50]= { 0 };

lista de enlaces;

init _ lista de enlaces(& lista);

mientras(1)

{

pStu=(tipo de datos*)malloc(tamañode(tipo de datos) <); /p>

memset(pStu, 0, sizeof (tipo de datos)); Printf ("Ingrese su nombre:");

fgets(pStu-& gt; nombre, NAMEMAX, stdin) ;

pStu->; nombre[strlen(pStu->nombre)-1]= 0; Printf("Ingrese su edad:");

scanf("% d ", & amp(pStu->;age));

getchar();Printf("Ingrese el número de serie:");

fgets(pStu -> no,nomax,stdin);

pStu->no [strlen(pStu->no)-1]= 0 add_linklist(&list,pStu) ;

Printf("Hacer desea continuar agregando (y/n):");

memset(buf, 0, 50);

fgets(buf , 50, stdin);

buf[strlen(buf)-1]= 0;

Si (! strcmp("y ",buf) ||! strcmp("Y ",buf))

Continuar;

Otro

Pausa;

}

printf(" \ n resultado:\ n ");

Imprimir lista (& lista amp, 0

Lista libre (& lista amp, 0);

Return 0;

}// Lista de impresión nula (lista de enlaces * lista, TIPO DE DATOS *) El tipo detrás del tipo de datos de abajo es muy aburrido de decirte, esto es un énfasis en el tipo de datos usar Se muestra en el interior, pero no se usa en Imprimir lista (& lista, 0; esta oración puede reflejar otro efecto si lo ha considerado al liberar memoria);

Aunque se pueden liberar punteros void* gratuitos, si el puntero void* se libera directamente en C++ sin especificar su tipo, el objeto se liberará inesperadamente. #define DATATYPE STUDENT El propósito de definir esta macro es liberar memoria de manera conveniente e inteligente. Si cambia la estructura de ESTUDIANTE sin este nombre, entonces debe cambiar el nombre en el código correspondiente. Solo necesito modificar esta macro. ¿Es mi escritura tan complicada? Déjame decirte que este código básicamente se copia directamente. Este código ha sido escrito antes. Acabo de interceptar parte de la función que escribí. El código está escrito para ser versátil y reutilizable.

class="endnav">

Copyright 2024 Red de conocimientos turísticos All Rights Reserved.