Red de conocimiento informático - Aprendizaje de código fuente - Estructura de datos c código fuente

Estructura de datos c código fuente

Este es el código para la cola encadenada:

#Contains "stdio.h"

#Contains "stdlib.h"

#Contains "io.h "

#Contiene "math.h"

#Contiene "time.h"

#Definición OK 1

#Error de definición 0

#define true 1

#define false 0

#define MAXSIZE 20 /*Asignación inicial de espacio de almacenamiento*/

typedef int status;

typedef int QElemType/* El tipo de qelemtype depende de la situación real, asumiendo que es int */

Estructura Typedef QNode /*estructura de nodo*/

{

QElemType datos;

struct QNode * next

}QNode, * QueuePtr

Typedef struct /* Estructura de la lista vinculada de cola */

{

QueuePtr antes y después /*Líder del equipo y puntero de cola del equipo*/

} LinkQueue

Estado de acceso (QElemType c)

{

printf("d ", c);

Regresar OK;

}

/*Construir una cola vacía Q */

Cola de inicialización de estado (cola de enlace *Q)

{

q-> ; frente = Q - gt;rear =(cola ptr)malloc(sizeof(QNode));

if (!q->;positivo)

Salir (desbordamiento);

q->;front-gt;next = NULL

Regresar OK;

}

/*Destruir cola Q */

Cola de destrucción de estado (cola de enlaces *Q)

{

mientras(Q->; positivo)

{

q -> trasero = Q- gt; frente - gt; siguiente;

libre (Q-> frente);

q-> frente = Q- gt; ;

}

Volver OK;

}

/*Borrar Q a la cola vacía*/

Cola de borrado de estado (cola de enlace *Q)

{

QueuePtr p, q;

q->; /p>

p = Q- gt; positivo- gt; siguiente;

q->; positivo- gt; siguiente = NULL

mientras(p)

{

q = p;

p = p- gt;

Gratis

}

Devuelve OK;

}

/*Si Q es una cola vacía, devuelve VERDADERO; de lo contrario, devuelve FALSO */

Cola de estado vacía (cola de enlaces Q)

{

if(Q.front==Q.rear)

Devuelve VERDADERO

Otros

Devuelve FALSE

}

/*Encontrar la longitud de la cola*/

int QueueLength (cola de enlace Q)

{

int I = 0;

q

ueue ptr p;

p = Q.front

Y (Q.trasero!=p)

{

i ;

p = p- gt; Siguiente;

}

Volver a I

}

/* Si la cola no está vacía, use e para devolver el elemento principal de la cola de Q y devuelva OK; de lo contrario, devuelva ERROR */

Estado GetHead (cola de enlace Q, QElemType *e)

{

cola ptr p;

if(Q.front==Q.rear)

Error de retorno;

p = q.front - gt; Siguiente;

* e = p- gt

Regresar

}

/*Insertar un nuevo elemento de cola cuyo elemento E es Q */

Cola de estado (cola de enlace *Q, tipo de cola e)

{

cola ptr s =(queue ptr)malloc(sizeof(QNode));

Si (!S) /*Falló la asignación de almacenamiento*/

Salir (desbordamiento);

s- gt; data = e;

s- gt; next = NULL

q->; back- gt; El nuevo nodo S se asigna al sucesor del nodo de cola original, como se muestra en la Figura ① */

q->; rear = s /*Establece el S actual como el nodo final de la cola; , y la parte trasera apunta a S, como se muestra en la Figura ② */

Return OK;

}

/*Si la cola no está vacía, elimine el elemento principal de la cola de Q, devuelve su valor con E y devuelve OK; de lo contrario, devuelve ERROR */

Estado fuera de la cola (cola de enlaces *Q, tipo de cola *e)

{

cola ptr p;

if(q->front == Q-gt;rear)

Error de retorno;

p = Q-gt;front-gt;next;/*será El nodo líder del grupo eliminado se almacena temporalmente en P, como se muestra en la Figura ① */

* e = p- gt; *Asigne el valor del nodo principal de la cola que se eliminará a e */

q->; Front - gt; next = p- gt /*Reemplace el sucesor del nodo líder original con p->; Luego asigne un valor al nodo sucesor del nodo principal, como se muestra en la Figura ② * /

If (Q->; Rear==p) /*If el jefe del equipo es la cola del equipo, elimínela y apunte la parte trasera al nodo principal, como se muestra en la Figura ③ */

q ->; >Gratis (p);

Regresar OK

}

/* Salida*/

Recorrido de cola de estado (cola de enlace Q) )

{

cola ptr p;

p = q . p>

{

Por favor visite (p->;data);

p = p- gt;

}

printf(" \ n ");

Devolver Aceptar

}

int main()

{

int I;

QElemType d;

cola de enlace q;

p>

I = cola de inicio(amp;q) ;

If (yo)

Printf("¡Se construyó correctamente una cola vacía!\n ");

Queue(ampq,-5);

Queue(ampq,5);

Queue(ampq,10);

Printf("Después de insertar tres elementos (-5, 5, 10), la longitud de la cola es d \n ",longitud de la cola(q));

Printf("Los elementos de la cola son: ");

queue traverse(q);

i =GetHead(q, ampd);

If (i==OK)

Printf("El elemento principal de la cola es: d\n ", d);

Dequeue(ampaskampd);

Printf("Elemento de cabecera de cola eliminado d\n ", d);

i=GetHead(q, ampd

If (i==OK)

Printf("El nuevo elemento líder del grupo es: d\n ", d);

borrar cola( amp; q );

Printf("Después de borrar la cola, q . front = q . front = u q . rear = u q . front->-->; next=u\n ", q.front, q .rear, q . front- gt; next);

destroy queue(amp; q);

Printf("Después de destruir la cola, q.front = u.q.rear = u \n ", q.front, q.rear);

Devuelve 0;

}

Este es un código transversal de postorden de árbol binario:

pedido posterior nulo (raíz del árbol binario)

{

if(root==NULL)

Return;

Después del pedido (root - gt; l child); // Llamada recursiva, luego recorre el subárbol izquierdo.

Postorder(root-gt;rchild); // Llama recursivamente y luego recorre el subárbol de la derecha.

printf("c", root- gt; data); //Datos de salida

}

Espero que pueda ayudarte. Si aún no lo entiendes, puedes agregarme en QQ: 11301655.