Estructura de datos c código fuente
#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*/ p>
{
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) 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
} p>
int main()
{ p>
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); p>
Dequeue(ampaskampd);
Printf("Elemento de cabecera de cola eliminado d\n ", d);
i=GetHead(q, ampd ); p>
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.