Red de conocimiento informático - Aprendizaje de código fuente - Estructura de datos: construir una lista enlazada individualmente, insertar, eliminar, buscar, construir una lista enlazada circular, insertar, eliminar, buscar, etc.

Estructura de datos: construir una lista enlazada individualmente, insertar, eliminar, buscar, construir una lista enlazada circular, insertar, eliminar, buscar, etc.

#include

#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 )

{

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;

mientras (j

{ j++;

p=p->siguiente;

}

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;

}

}