Red de conocimiento informático - Aprendizaje de código fuente - ¿Cómo implementar la estructura de datos a través del lenguaje C? Dé un ejemplo y sea lo más detallado posible.

¿Cómo implementar la estructura de datos a través del lenguaje C? Dé un ejemplo y sea lo más detallado posible.

La estructura de los datos no es más que tablas: listas lineales, listas enlazadas, pilas, colas, cadenas, matrices, árboles, árboles binarios, gráficos, etc.

Es común utilizar punteros o matrices para crear estructuras de datos y luego realizar operaciones como insertarlas, eliminarlas, buscarlas y ordenarlas.

La siguiente es una cola circular implementada en lenguaje C:

#include

#include

#define MAX_QSIZE 5

struct SqQueue

{ QElemType *base; // Espacio de almacenamiento asignado dinámicamente

int front; si la cola no está vacía, apunta al elemento principal de la cola

int rear; // Puntero de cola, si la cola no está vacía, apunta a la siguiente posición del elemento final de la cola. queue

};

// bo3-4.cpp operaciones básicas (9) de la cola circular (estructura de almacenamiento definida por c3-3.h)

void InitQueue(SqQueue &Q)

{ //Construye una cola vacía Q. En la página 64 del libro de texto

Q.base=(QElemType*)malloc(MAX_QSIZE*sizeof(QElemType));

if(!Q.base) // Error en la asignación de almacenamiento

salir(OVERFLOW);

Q.front=Q.rear=0;

}

void DestroyQueue(SqQueue &Q)

{ // Destruye la cola Q, Q ya no existe

if(Q.base) // La cola Q existe

free(Q.base); // Libera el espacio de almacenamiento señalado por Q.base

Q.base=NULL; // Q.base no apunta a ninguna unidad de almacenamiento

Q.front=Q.rear =0;

}

void ClearQueue(SqQueue &Q)

{ // Borrar la cola Q como una cola vacía

Q. front=Q .rear=0;

}

int QueueEmpty(SqQueue Q)

{ // Si la cola Q es una cola vacía, devuelve TRUE; de lo contrario, devuelve FALSO

if(Q.front==Q.rear) // Bandera de cola vacía

devuelve TRUE;

else

return FALSE;

}

int GetHead(SqQueue Q,QElemType &e)

{ // Si la cola Q no está vacía, use e para regresar el encabezado del elemento Q y devuelve OK; de lo contrario, devuelve ERROR

if(Q.front==Q.rear) // La cola está vacía

return ERROR;

e= Q.base[Q.front]; // Asigna el valor del elemento principal de la cola a e

return OK;

}

int EnQueue(SqQueue &Q ,QElemType e)

{ // Inserta el elemento e como el nuevo elemento de cola de la cola Q.

En la página 65 del libro de texto

if((Q.rear+1)%MAX_QSIZE==Q.front) // La cola está llena

return ERROR;

Q.base[Q.rear]=e; //Inserta e al final de la cola

Q.rear=(Q.rear+1)%MAX_QSIZE; el puntero de cola a MAX_QSIZE Toma el resto

return OK;

}

int QueueLength(SqQueue Q)

{ // Devuelve el número de elementos en la cola Q, es decir, la longitud de la cola.

En la página 64 del libro de texto

return(Q.rear-Q.front+MAX_QSIZE)%MAX_QSIZE;

}

int DeQueue(SqQueue &Q,QElemType &e ) // En la página 65 del libro de texto

{ // Si la cola Q no está vacía, elimine el elemento principal de Q, devuelva su valor con e y devuelva OK, de lo contrario, devuelva ERROR<; /p>

if(Q.front==Q.rear) // La cola está vacía

return ERROR;

e=Q.base[Q.front] ; // Reemplazar el encabezado de la cola El valor del elemento se asigna a e

Q.front=(Q.front+1)%MAX_QSIZE // Mover el puntero del encabezado de la cola

return OK;

}

void QueueTraverse(SqQueue Q,void(*visit)(QElemType))

{ // Llama a la función de visita en cada elemento en la cola Q desde el principio hasta el final de la cola. ()

int i=Q.front; // i inicialmente apunta al elemento al principio de la cola

while(i!=Q.rear) // i apunta al elemento en la cola Q

{ visit(Q.base[i] // Llama a la función visit() en el elemento señalado; a por i

i=(i+1)%MAX_QSIZE; // Apuntado por i Siguiente elemento

}

printf("\n") ;

}

void main()

{

int j;

int i=0, m;

int d;

SqQueue Q;

InitQueue(Q); // Inicializa la cola Q, sal si falla

printf("Después de inicializar la cola, ¿está vacía? %u(1: vacío 0: no)\n", QueueEmpty(Q));

printf("Ingrese elementos de cola enteros (no más de %d), -1 es el terminador temprano: ",MAX_QSIZE-1);

do

{ scanf("%d",&d); // Ingrese el elemento de cola entero desde el teclado

if(d==-1) // La entrada es por adelantado Terminator

break // Salir del bucle de datos de entrada

i++; // Contador +1

EnQueue(Q,d); // Ingresa los elementos de entrada de la cola

} while(i

printf("La longitud de la cola es %d,",QueueLength (Q));

printf("¿La cola está vacía ahora? %u(1: Vacío 0: No)\n",QueueEmpty(Q));

printf("Los elementos se eliminan del encabezado de la cola %d veces consecutivas y los elementos se insertan desde el cola de la cola:\n",MAX_QSIZE );

for(m=1;m<=MAX_QSIZE;m++)

{ DeQueue(Q,d); // Eliminar el elemento principal y asigne su valor a d

printf("El elemento eliminado es %d, ingrese el elemento a insertar:",d);

scanf("% d",&d); // Ingresa el elemento a insertar Los elementos del equipo se entregan a d

p>

EnQueue(Q,d); // Poner en cola d

}

m=QueueLength(Q); // m es la longitud de la cola Q p>

printf("Los elementos de la cola ahora están");

QueueTraverse(Q,print); // Llama a la función de impresión en cada elemento de la cola Q secuencialmente desde el encabezado; hasta el final de la cola. ()

printf("***Insertar %d elementos al final de la cola.",i+MAX_QSIZE);

if(m -2>0)

printf("Ahora elimina %d elementos del encabezado de la cola",m-2);

while(QueueLength(Q)>2)

{ DeQueue( Q,d); // Elimina el elemento principal y asigna su valor a d

printf("El valor del elemento eliminado es %d,",d );

}

j=GetHead(Q,d); // Asigna el elemento principal de la cola a d

if(j) // Cola Q no está vacío

printf(" Ahora el elemento principal de la cola es %d\n",d);

ClearQueue(Q); // Borra la cola Q

printf("Después de borrar la cola, ¿está vacía?% u(1: Vacío 0: No)\n",QueueEmpty(Q));

DestroyQueue(Q); Destruir cola Q

}