Estructura de datos: construir una lista enlazada individualmente, insertar, eliminar, buscar, construir una lista enlazada circular, insertar, eliminar, buscar, etc.
#include
typedef char ElemType;
typedef struct LNode //definir el tipo de nodo de tabla vinculada única
{
ElemType data;
struct LNode *next; //Apunta al nodo sucesor
}.
LinkList;
void CreateListF(LinkList *&L,ElemType a[],int n)
// Insertar encabezado para crear una única lista enlazada
{< / p>
LinkList *s;int i;
L=(LinkList *)malloc(sizeof(LinkList)); //Crear nodo principal
L->next = NULL;
for (i=0 ;i { s=(LinkList *)malloc(sizeof(LinkList)) s->data=a[i]; s->next=L->next; //insertar *s antes del nodo inicial original, después del nodo principal L->next=s; } } void CreateListR(LinkList *&L,ElemType a[],int n ) //Inserción de cola para crear una única tabla vinculada { LinkList *s,*r int i; L=(LinkList *)malloc(sizeof(LinkList)); //crea el nodo principal L->next=NULL; r=L; al nodo de cola, comenzando desde el nodo principal for (i=0; i { s=(LinkList *)malloc ( sizeof(LinkList));//crear nuevo nodo s->data=a[i]; r->next= s; //insertar *s después de * r r=s; } r->next=NULL; //el siguiente campo del nodo terminal se establece en NULL } void InitList(LinkList *&L) { L=(LinkList *)malloc(sizeof(LinkList)); //crear nodo principal< / p> L->next=NULL; } void DestroyList(LinkList *&L) { ListaEnlaces *p=L,*q=p->siguiente; while (q! =NULL) { gratis(p); p=q; q=p->siguiente; } free(p); //En este momento q es NULL, p apunta al nodo de cola, suéltelo } int ListEmpty(LinkList *L ) p> { return(L-> next==NULL); } int ListLength(LinkList *L) { Lista de enlaces *p=L;int i=0; while (p->siguiente!=NULL) { i++; p=p->siguiente; } return(i); } void DispList(LinkList *L) { Lista de enlaces *p=L->siguiente; while (p!=NULL) { printf("%c ",p->datos); p=p ->siguiente; } printf("\n"); } int GetElem(LinkList *L,int i,ElemType &e) { int j=0; LinkList *p=L; p> mientras (j { j++; p=p->siguiente; } p> if (p==NULL) //No hay un nodo de datos i-ésimo return 0; else //el nodo de datos i-ésimo existe { e=p->data; return 1; } } int LocateElem(LinkList *L,ElemType e) { LinkList *p=L->siguiente; int n=1; while (p!= NULL && p->datos! =e) { p=p->siguiente; n++; } if (p==NULL) return(0); else return(n); } int ListInsert(LinkList *&L,int i,ElemType e) { int j=0; LinkList *p =L,*s; while (j { j++; p=p->next; } if (p==NULL) //nodo con orden de bits i-1 no encontrado return 0; else //nodo con orden de bits i-1 encontrado *p { s=(LinkList *)malloc(sizeof(LinkList));//crear nuevo nodo *s s-> datos=e; s->next=p->next; //insertar *s después de *p p->next=s; return 1; } } int ListDelete( LinkList *&L,int i,ElemType &e) p>{ int j=0; Lista de enlaces *p=L,*q; while (j { j++; p=p->next; } if ( p==NULL) //Nodo con orden de bits i-1 no encontrado return 0; else //Buscar nodo con orden de bits i-1 *p { q=p->next;//q apunta al nodo que se eliminará if (q==NULL) return 0 //Si el i-ésimo nodo no existe, return 0 e=q->data; p->next=q->next; //elimina el nodo *q de la tabla vinculada individualmente free(q); //libera el nodo *q return 1; } }