¿Me pueden ayudar a escribir el sort () en este programa?

#include

#include

struct Student

{

int std_id;

nombre del personaje [30];

char add [30];

char phn [30];

flotador dob;

char ini [10];

struct Student * next; // Puntero autorreferencial …

};

typedef struct Student Node;

Linkfloat vacío ()

{

flotante a = 0, * b; // Para crear un enlace de flotante a algún compilador …

b = & a;

a = * b;

}

Pantalla vacía (Nodo * cabeza)

{

Nodo * p;

int i;

if (cabeza == NULL)

{

printf (“No hay registros en la base de datos”);

}

más

{

p = cabeza;

para (i = 0; i <1; i ++)

{

printf (“-“);

}

printf (“Base de datos de estudiantes actualizada \ n”);

para (i = 0; i <1; i ++)

{

printf (“”);

}

printf (“”);

printf (“\ nstd_id Nombre Dob Dirección de contacto Nombre iniciales \ n”);

para (i = 0; i <10; i ++)

{

printf (“”);

}

printf (“”);

while (p! = NULL)

{

printf (“% d% s% 0.2f% s% s% s \ n”, p-> std_id, p-> nombre, p-> dob, p-> phn, p-> add, p-> ini) ;

printf (“”);

para (i = 0; i <1; i ++)

{

printf (“”);

}

printf (“”);

flushall ();

p = p-> siguiente; // Ir al siguiente nodo …

}

}

}

Nodo * Crear (Nodo * encabezado)

{

int n, i;

Nodo * nn, * p;

printf (“¿Cuántas entradas para crear una base de datos ??? \ n”);

scanf (“% d”, & n);

para (i = 0; i <n; i ++)

{

if (cabeza == NULL)

{

nn = (Nodo *) malloc (sizeof (Nodo)); // Creando el primer nodo …

printf (“Ingrese std_id No., Nombre y Dob Dirección de contacto \ n”);

scanf (“% d”, & (nn-> std_id));

flushall ();

obtiene (nn-> nombre);

scanf (“% f”, & (nn-> dob));

flushall ();

obtiene (nn-> phn);

obtiene (nn-> agregar);

obtiene (nn-> ini);

nn-> siguiente = NULL; // Establecer junto a NULL …

cabeza = nn;

}

más

{

p = nn = cabeza;

while (nn-> next! = NULL)

{

nn = nn-> siguiente;

}

nn-> siguiente = (Nodo *) malloc (sizeof (Nodo)); // Creando más nodos …

nn = nn-> siguiente;

printf (“Ingrese std_id, Nombre y Dob Dirección de contacto \ n”);

scanf (“% d”, & (nn-> std_id));

flushall ();

obtiene (nn-> nombre);

scanf (“% f”, & (nn-> dob));

flushall ();

obtiene (nn-> phn);

obtiene (nn-> agregar);

obtiene (nn-> ini);

nn-> siguiente = NULL;

nn = p;

}

}

cabeza de retorno;

}

tipo vacío (Nodo * cabeza)

{

// Ir al siguiente nodo …

}

Nodo * Insertar (Nodo * cabeza)

{

int ch, r;

char ans;

Nodo * p, * nn, * q;

hacer

{

printf (“¿Dónde quieres ingresar una nueva entrada ??? :::: \ t”);

printf (“\ http: //n1.En el comienzo http://2.En el medio Einführung Kurzdomains el final ::::: \ t”);

printf (“\ nIntroduzca su elección ::: \ n”);

scanf (“% d”, & ch);

interruptor (ch)

{

caso 1:

/ * Insertar al comienzo * /

p = cabeza;

nn = (Nodo *) malloc (sizeof (Nodo));

printf (“\ nIntroduzca std_id, nombre y dirección de contacto del dob :::: \ t”);

scanf (“% d”, & (nn-> std_id));

flushall ();

obtiene (nn-> nombre);

scanf (“% f”, & (nn-> dob));

flushall ();

obtiene (nn-> phn);

obtiene (nn-> agregar);

obtiene (nn-> ini);

nn-> siguiente = NULL;

nn-> siguiente = p;

cabeza = nn; // establece el primer nodo como cabeza …

printf (“\ nLa entrada se crea correctamente. \ n”);

Pantalla (cabeza);

descanso;

caso 2:

/ * Insertar en el medio * /

if (cabeza == NULL)

{

printf (“Sin embargo, la base de datos no se ha creado. \ n”);

printf (“La base de datos está vacía. \ n”);

printf (“Primero crear base de datos”);

}

más

{

printf (“Después de lo cual std_id ¿Desea insertar nuevos datos ???”);

scanf (“% d”, & r);

p = cabeza;

while (p-> std_id! = r && p-> next! = NULL)

{

p = p-> siguiente; // Ir a ese std_id no …

}

if (p-> std_id! = r)

{

printf (“No existe tal entrada”);

}

más

{

nn = (Nodo *) malloc (sizeof (Nodo));

printf (“Ingrese std_id, Nombre y dirección de contacto dob”);

scanf (“% d”, & (nn-> std_id));

flushall ();

obtiene (nn-> nombre);

scanf (“% f”, & (nn-> dob));

flushall ();

obtiene (nn-> phn);

obtiene (nn-> agregar);

obtiene (nn-> ini);

nn-> siguiente = NULL;

q = p-> siguiente;

p-> siguiente = nn;

nn-> siguiente = q;

printf (“La entrada se creó con éxito”);

Pantalla (cabeza);

}

}

descanso;

caso 3:

/ * Insertar al final * /

if (cabeza == NULL)

{

printf (“Sin embargo, la base de datos no se creó”);

printf (“La base de datos está vacía”);

printf (“Primero crear base de datos”);

}

más

{

p = cabeza;

nn = (Nodo *) malloc (sizeof (Nodo));

printf (“Ingrese std_id, Nombre y dirección de contacto dob”);

scanf (“% d”, & (nn-> std_id));

flushall ();

obtiene (nn-> nombre);

scanf (“% f”, & (nn-> dob));

flushall ();

obtiene (nn-> phn);

obtiene (nn-> agregar);

obtiene (nn-> ini);

nn-> siguiente = NULL;

nn-> siguiente = NULL;

while (p-> next! = NULL)

{

p = p-> siguiente; // Ir al último nodo …

}

p-> siguiente = nn;

printf (“La entrada se creó con éxito”);

Pantalla (cabeza);

}

descanso;

}

printf (“¿Desea insertar más datos (S / N) ???”);

flushall ();

scanf (“% d”, & ans);

} while (ans == ‘y’ || ans == ‘Y’);

cabeza de retorno;

}

Nodo * Eliminar (Nodo * encabezado)

{

Nodo * p, * q, * r;

char ans;

int ch, n;

hacer{

printf (“¿Qué entrada quieres eliminar ???”);

printf (“1.Primero 2.Medio 3.Fin”);

scanf (“% d”, & ch);

if (cabeza == NULL)

{

printf (“Sin embargo, la base de datos no se creó”);

printf (“La base de datos está vacía”);

printf (“Primero crear base de datos”);

}

más

{

interruptor (ch)

{

caso 1:

/ * Eliminar primer nodo * /

p = cabeza;

cabeza = cabeza-> siguiente; // Establecer el segundo nodo como cabeza …

libre (p);

printf (“La primera entrada se elimina”);

Pantalla (cabeza);

descanso;

caso 2:

/ * Eliminar nodo central * /

p = cabeza;

printf (“Ingrese std_id. que desea eliminar:”);

scanf (“% d”, & n);

while ((p-> next) -> std_id! = n && p-> next-> next! = NULL)

{

p = p-> siguiente; // Vaya hasta el nodo -1 que desea eliminar …

}

if (p-> next-> next == NULL)

{

printf (“No existe tal entrada”);

}

más

{

q = p-> siguiente;

r = q-> siguiente;

p-> siguiente = r;

libre (q); // Eliminar ese nodo …

printf (“La entrada se elimina”);

Pantalla (cabeza);

}

descanso;

caso 3:

/ * Eliminar el último nodo * /

p = cabeza;

while (p-> next-> next! = NULL)

{

p = p-> siguiente; // Vaya hasta el nodo -1 que desea eliminar …

}

q = p-> siguiente;

libre (q); // Eliminar el último nodo …

p-> siguiente = NULL;

printf (“Se eliminó la última entrada”);

Pantalla (cabeza);

descanso;

}

}

printf (“¿Desea eliminar más datos (S / N) ???”);

flushall ();

scanf (“% d”, & ans);

} while (ans == ‘y’ || ans == ‘Y’);

cabeza de retorno;

}

Buscar (Nodo * cabeza)

{

Nodo * p;

int r, cnt = 0;

if (cabeza == NULL)

{

printf (“Sin embargo, la base de datos no se creó”);

printf (“La base de datos está vacía”);

printf (“Primero crear base de datos”);

}

más

{

p = cabeza;

printf (“Ingrese std_id que desea buscar: \ n”);

scanf (“% d”, & r);

while (p-> std_id! = r && p-> next! = NULL) // Buscar std_id no …

{

p = p-> siguiente;

cnt ++;

}

if (p-> std_id! = r)

printf (“\ nNo hay tal entrada”);

más

{

printf (“\ nstd_id% d está en la posición% d th.”, r, (cnt + 1));

printf (“\ nstd_id Nombre Dob Dirección de contacto \ n”);

printf (“% d% s% 0.2f% d% s% s% s \ n”, p-> std_id, p-> nombre, p-> dob, p-> phn, p-> add, p-> ini);

}

}

}

Modificar (Nodo * cabeza)

{

Nodo * p;

int r;

if (cabeza == NULL)

{

printf (“Sin embargo, la base de datos no se creó”);

printf (“La base de datos está vacía”);

printf (“Primero crear base de datos”);

}

más

{

p = cabeza;

printf (“Ingrese el std_id. cuyos datos desea modificar:”);

scanf (“% d”, & r);

while (p-> std_id! = r && p-> next! = NULL)

{

p = p-> siguiente;

}

if (p-> std_id! = r)

{

printf (“No hay tal registro en la base de datos”);

}

más

{

printf (“Los datos ingresados ​​std_id son:”);

printf (“std_id Nombre Dob Contacto \ t dirección inicial”); // Mostrar datos que van a modificar …

printf (“% d% s% 0.2f% d% s% s% s \ n”, p-> std_id, p-> nombre, p-> dob, p-> phn, p-> add, p-> ini);

printf (“\ nIntroduzca nuevo std_id, nuevo nombre y dirección de contacto del dob para esta entrada: \ n”);

scanf (“% d”, & p-> std_id);

flushall ();

obtiene (p-> nombre); // Ingrese nuevos datos …

scanf (“% f”, & (p-> dob));

printf (“Los datos nuevos ingresados ​​son:”);

printf (“std_id Nombre Dob Dirección de contacto”);

printf (“% d% s% 0.2f% d% s% s% s \ n”, p-> std_id, p-> nombre, p-> dob, p-> phn, p-> add, p-> ini);

Pantalla (cabeza);

}

}

}

Cuenta (Nodo * cabeza)

{

Nodo * p;

int cnt = 0;

if (cabeza == NULL)

{

printf (“Sin embargo, la base de datos no se creó”);

printf (“La base de datos está vacía”);

printf (“Primero crear base de datos”);

printf (“Hay 0 registros en la base de datos”);

}

más

{

p = cabeza;

while (p-> next! = NULL)

{

p = p-> siguiente;

cnt ++; // Contando registros …

}

printf (“Hay% d registros en la base de datos”, (cnt + 1));

}

}

vacío principal()

{

int ch, i;

char op;

Nodo * cabeza;

cabeza = NULL;

printf (“\ n * ———- Studednt Database ———– * \ n”);

hacer

{

printf (“\ nMenu \ n1.Create Database \ n2.Insert \ n3.Delete \ n4.Search \ n5.Modify \ n6.Display \ n7.Display Reverse \ n8.Count Records \ n9.Exit \ n”);

printf (“Ingrese su elección \ n”);

scanf (“% d”, & ch);

interruptor (ch)

{

caso 1:

cabeza = Crear (cabeza); // Llamada para crear …

descanso;

caso 2:

cabeza = Insertar (cabeza); // Llamada para insertar …

descanso;

caso 3:

cabeza = Eliminar (cabeza); // Llamar para eliminar …

descanso;

caso 4:

Buscar (cabeza); // Llamada para buscar …

descanso;

caso 5:

Modificar (cabeza); // Llamada para modificar …

descanso;

caso 6:

Pantalla (cabeza); // Llamada para mostrar …

descanso;

caso 7:

ordenar (cabeza); // Llamada para mostrar reversar …

descanso;

caso 8:

Cuenta (cabeza); // Llamada para contar registros …

descanso;

caso 9:

salida(); //Salida…

defecto :

printf (“Has introducido una elección incorrecta ::: \ n”);

}

printf (“\ n ¿Desea salir (S / N) ??? \ n”);

flushall ();

scanf (“% c”, & op);

} while (op == ‘n’ || op == ‘N’);

}

Google