Programación unidireccional
/* Escriba un programa de sistema de información para estudiantes utilizando una lista vinculada en lenguaje C, que requiere la salida del número de estudiante, nombre, sexo, número de estudiante, nombre, grado (agregar , eliminar, consultar, ordenar, promediar )*/
# include & ltstdio.h & gt
# include & ltiostream & gt
# include & ltstring .h & gt
# include & ltstdlib.h & gt
Usar espacio de nombres std
const int n = 5;
/ *
* nodeEntry: tipo de datos del nodo
* nodeADT: estructura del nodo
* linkADT: estructura de la lista enlazada
*/ p>
estructura typedef estudiante
{
int num
char nombre[30];
Sexo encantador; p>
puntuación flotante 1; //Idioma
Fracción flotante 2; //Matemáticas
Fracción flotante 3 //Inglés
//struct estudiante* siguiente
}Estudiante;
estructura typedef enlace CDT {
encabezado nodoADT;
} * enlaceADT
/*
* InitLink: Inicializar lista enlazada
* CreateNode: Crear nodo
* AppendLink: Agregar datos
*/
nodoADT CreateNode(entrada de estudiante){
nodo ADT p = (nodo ADT)malloc(tamañode * p);
p->;entrada =entry,p->next= 0;
Return p;
}
/*
SortLink: Ordenar lista enlazada
//Presione Ordenar por ID de estudiante
void SortLinkID(linkADT link) {
nodeADT pHead, pRear, p, TP;
Si (! link) regresa;
for(pHead = link-> head, pRear = 0; pHeadpHead = pHead-> next){
for (tp=pHead , p = pHead-> siguiente;p;tp=p,p=p->siguiente)?
if(pHead->entry.num >= p->;número de entrada)
TP->next = p->Siguiente, p ->next= pHead,pHead=p,p=tp
if (!pRear) enlace ->head=pHead
else pRear->next= pHead
pRear = pHead
}
//Ordenar por puntuación en inglés
void sort link English(enlace enlace ADT){
nodeADT pHead , pRear, p, TP;
if (! link) return;
for (pHead = link-> head, pRear = 0 ;pHeadpHead = pHead->next) {
for (tp=pHead, p = pHead->next;p;tp=p,p
= p-> siguiente)?
if(pHead->entry.score3 >= p->;entry.score3)
TP->siguiente = p->siguiente ,p->siguiente =pHead,pHead=p,p=tp
if (!pRear) enlace->head = pHead
else pRear-> >pRear = pHead
}
}
//Ordenar los nombres en el orden del diccionario
void SortLinkName(linkADT link) {
nodoADT pHead, pRear, p, TP;
Si (! link) regresa;
for(pHead = link ->head, pRear = 0; pHeadpHead = pHead->next){
for (tp=pHead, p = pHead->next;p;tp=p, p = p-> siguiente)?
if(pHead->entrada.nombre[0]>= p->entrada.nombre[0])
TP->siguiente = p ->Siguiente , p ->next=pHead,pHead=p,p=tp
if (!pRear) enlace ->head=pHead
else pRear-& gt; pHead
pRear = pHead
}
}
//Ordenar por longitud de nombre p>
void sort linkname longitud(enlace ADT enlace){
nodoADT pHead, pRear, p, TP;
If (! link) return;
for(pHead = link- >cabeza,pRear = 0;pHeadpHead = pHead->siguiente){
for (tp=pHead, p=pHead->siguiente ;p;tp=p,p=p-> próximo)?
if(strlen(pHead->entry.name)>= strlen(p->entry.name))
TP->siguiente = p -> siguiente , p -> next=pHead, pHead=p, p = tp
if (!pRear) link -> head = pHead
else pRear-& gt; /p>
pRear = pHead
}
La lista enlazada circular y la lista enlazada única son lo mismo.
Es una estructura de almacenamiento en cadena. La diferencia es que el puntero del último nodo de la lista enlazada circular apunta al primer nodo o nodo principal de la lista enlazada circular, formando así una cadena circular.
El funcionamiento de una lista enlazada circular es básicamente el mismo que el de una lista enlazada individualmente. Las diferencias son las siguientes:
1. Al establecer una lista enlazada circular, el puntero del último nodo debe apuntar al nodo principal, en lugar de establecerse en NULL como una lista enlazada individualmente. Este caso también se utiliza para insertar un nuevo nodo después del último nodo.
2. Al juzgar si se alcanza el final de la tabla, se juzga si el valor del dominio de la cadena del nodo es el nodo principal. Cuando el valor del campo de la cadena es igual al puntero principal, significa que se ha llegado al final de la lista. En lugar de juzgar si el valor del campo de la cadena está vacío como una lista enlazada individualmente.
Lista enlazada a la Enciclopedia Baidu