Estructura de datos --- cola (lenguaje c)

cola

Definición de cola

  • Una estructura de almacenamiento que implementa " primero en entrar, primero en salir "

clasificación

  • Cola encadenada: realizada con una lista vinculada
  • Cola estática: implementada con una matriz.
    Las colas estáticas generalmente deben ser colas circulares, para reducir el desperdicio de memoria.

Explicación de la cola circular

  1. ¿Por qué una cola estática es una cola circular?
    Inserte la descripción de la imagen aquí
  2. La cola circular necesita varios parámetros para determinar.
    Dos parámetros: los dos parámetros tienen diferentes significados en diferentes situaciones , similar a lo siguiente:
    (1) frente : apunta al primer elemento
    (2) detrás : apunta al siguiente elemento del último elemento
  3. El significado de cada parámetro de la cola circular Los
    dos parámetros tienen significados diferentes en diferentes situaciones: Las situaciones son las siguientes:
    (1) Inicialización de la cola:
    Los valores de fuente y posterior son ambos cero
    (2) La cola no está vacía. La
    fuente representa el primer elemento de la cola y la parte posterior representa Es el siguiente elemento del último elemento de la
    cola (3)
    El valor de la fuente vacía y la parte posterior de la cola son iguales, pero no necesariamente cero
  4. Cola circular en el pseudo algoritmo del equipo en
    Inserte la descripción de la imagen aquí
  5. Cola circular del equipo para explicar el pseudo algoritmo
    Inserte la descripción de la imagen aquí
  6. Cómo juzgar si la cola circular está vacía.
    Si el valor de la parte delantera y trasera son iguales, la cola debe estar vacía
  7. Cómo juzgar si la cola circular está llena
    Los valores de front y back son irregulares, es decir, pueden ser grandes, pequeños e iguales de
    dos formas:
    (1) Agregar un parámetro de identificación de tabla más
    (2) Usar un elemento de cola menos (solo uno, No afecta)
    ----- Por lo general, se usa el segundo método.
    Si los valores de ryf están cerca el uno del otro, la cola está llena , es decir:
    pseudoalgoritmo en lenguaje C significa:
    if ((r + 1)% array length = = f)
    está lleno
    más
    insatisfecho

    Inserte la descripción de la imagen aquí

Implementación del algoritmo de cola circular (lenguaje c)

#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>

typedef enum _bool {
    
    false = 0,true = 1} bool;

typedef struct queue
{
    
    
    int * pBase;
    int front;
    int rear;
}QUEUE;

void init(QUEUE *);
bool en_queue(QUEUE *,int);
void traverser_queue(QUEUE *);
bool full_queue(QUEUE *);
bool out_queue(QUEUE *,int *);
bool empty_queue(QUEUE *);

//初始化队列
void init(QUEUE *pQ)
{
    
    
    pQ->pBase = (int *)malloc(sizeof(int)*6);
    pQ->front = 0;
    pQ->rear = 0;

    return ;
}

//插入
bool en_queue(QUEUE * pQ,int val)
{
    
    
    if(full_queue(pQ))
    {
    
    
        return false;
    }
    else
    {
    
    
        pQ->pBase[pQ->rear] = val;
        pQ->rear = (pQ->rear + 1) % 6;

        return true;
    }
}

//判断是否满
bool full_queue(QUEUE * pQ)
{
    
    
    if((pQ->rear + 1) % 6 == pQ->front)
    {
    
    
        return true;
    }

    return false;
}


//遍历队列
void traverser_queue(QUEUE *pQ)
{
    
    
    int i = pQ->front;
    while(i != pQ->rear)
    {
    
    
        printf("data in queue is %d\n",pQ->pBase[i]);
        i = (i + 1) % 6;
    }

    return ;
}

bool empty_queue(QUEUE * pQ)
{
    
    
    if(pQ->front == pQ->rear)
        return true;
    else
        return false;
}

//出队
bool out_queue(QUEUE *pQ,int * pVal)
{
    
    
    if(empty_queue(pQ))
    {
    
    
        return false;
    }
    else
    {
    
    
        *pVal = pQ->pBase[pQ->front];
        pQ->front = (pQ->front + 1) % 6;
        return true;
    }
}

int main()
{
    
    
    QUEUE q;

    int val;

    init(&q);

    //入队
    en_queue(&q,1);
    en_queue(&q,2);
    en_queue(&q,3);
    en_queue(&q,4);
    en_queue(&q,5);
    en_queue(&q,6);
    en_queue(&q,7);
    en_queue(&q,8);

    if(full_queue(&q))
    {
    
    
        printf("队列已满!其中元素为\n");
        traverser_queue(&q);
    }
    else
    {
    
    
        printf("队列未满\n");
        traverser_queue(&q);
    }

    //出队测试
    if(out_queue(&q,&val))
    {
    
    
        printf("出队成功,出队的值为 %d\n",val);
        traverser_queue(&q);
    }
    else
    {
    
    
         printf("出队失败!\n");
    }
    return 0;
}

Aplicación específica de cola

  • Todas las operaciones relacionadas con el tiempo tienen la sombra de una cola

Supongo que te gusta

Origin blog.csdn.net/qq_41782149/article/details/92384309
Recomendado
Clasificación