Estados Unidos (sete) estrutura de dados da estrutura de estrutura de armazenamento da fila de pedido e de armazenamento cadeia

anuário

fila

estrutura de fila de armazenamento sequencial

fila Estrutura de armazenamento

operação enqueue

dequeue


fila

estrutura de fila de armazenamento sequencial

Filas, como o nome sugere, é um tipo de estrutura que normalmente se alinham, a seguinte JV com você uma visão detalhada de sua definição.

Fila (fila) só são permitidos na operação de inserção (a cauda) extremidade , enquanto a outra extremidade da operação de apagamento (HOL) linear forma. Ele FIFO (First In First Out), basta alinhar o mesmo.

Por operação de exclusão é O (n) fazer? Porque haverá um elemento móvel após eliminação cabeça equipe. Então, podemos pensar em uma maneira de otimizar um pouco e deixar a exclusão simples operação.

Dizemos que um fim de uma operação de exclusão é referido como a primeira equipe, mas não necessariamente exigido no próximo chefe de fila para a localização de 0, para que possamos introduzir dois ponteiros apontam para a cabeça ea cauda da fila, por isso não se mover quando a operação do elemento eliminação, mas para mover o cursor, de modo que a complexidade de tempo torna-se o (1) a partir de o (n).

OK, agora temos dois ponteiros: dianteira e traseira, respectivamente, apontam para a cabeça da equipe e da cauda.

Então, como podemos julgar esta fila está vazio está cheio dele? Alguns diriam que é muito simples, já que o ponto de frente para a cabeça da equipe, apontando traseira para a cauda, enquanto a frente = TRASEIRO , a fila estava cheia de cantar. Os estudantes você também somos amigos ingênuos, dê uma olhada na figura abaixo.

Você vê, ambos os quais não satisfazem a frente = traseira, mas uma equipe uma equipe completa de vazio, então, no final determinar como completo ou esvaziar a fila dele?

Na verdade, existem duas maneiras:

1, vemos que com estes dois casos é que a frente = traseira, exceto que um esvaziar completamente, há um todo. Então, podemos encontrar um lugar na fila dos mais agradável aos olhos de ver, de pé em um, quando a frente = traseira, julgamos a bandeira de lugar marcado flag-se a bandeira está vazia, toda a fila está vazia, caso contrário, o todo é cheio .

2, modificar as condições de julgamento já não permitem determinar a frente vazio = traseira completa, podemos redefinir: A frente = traseiro, força de ar, quando não é um elemento do espaço vazio é equipa, completo.

É esta sub-sub-drop ~

Vamos falar discutir por que, em vez de definir diretamente a frente = traseiro + 1 ou frente = rear-1 não? Como um ponteiro para gastar, nós certamente esperamos que a fila tem que ser um uso mais eficiente do espaço para a matriz possível, traseira pode aparecer na frente ou atrás da frente, mas quando você diz ao computador, não pode ser ambígua, por isso, quando nós definimos há um elemento do espaço está vazio equipe, completa.

Esta idéia de como dizer ao computador dele? Fornecida fila máxima dimensão QUEUESIZE, em seguida, a condição completa fila deve ser (traseira + 1)% QUEUESIZE == frente, comprimento da fila é calculada como: (traseiro-dianteiro + QUEUESIZE)% QUEUESIZE (devido a um vazio, ele não pode ser contado comprimento, ou seja, esta fórmula é calculada usando o comprimento da fila real) pode ser a frente da fila, praticá-la.

ok, então podemos começar a escrever código para ele

typedef int QElemType;

typedef struct
{
    QElemType data[MAXSIZE];
    int front;
    int rear;
}SqQueue;


//初始化一个空队列
Status InitQueue(SqQueue *Q)
{
    Q->front=0;
    Q->rear=0;
    return OK;
}

//返回队列的元素个数,即当前长度
int QueueLength(SqQueue Q)
{
    return (Q.rear-Q.front+MAXSIZE)%MAXSIZE;
}

//入队操作
Status EnQueue(SqQueue *Q,QElemType e)
{
    if((Q->rear+1)%MAXSIZE==Q->front)
        return ERROR;        //判断队列是否满了
    Q->data[Q->rear]=e;        //赋值
    Q->rear=(Q->rear+1)%MAXSIZE; //指向下一个
    return OK;
}

//出队操作,用e返回其值
Status DeQueue(SqQueue *Q,QElemType *e)
{
     if((Q->rear+1)%MAXSIZE==Q->front)
        return ERROR;        //判断队列是否满了
    *e=Q->data[Q->front];//将队头元素赋值给e
    Q->front=(Q->front+1)%MAXSIZE    //front指针向后移动一位
                                     //若到最后则转到数组头部
    return OK;
}

fila Estrutura de armazenamento

Armazenamento fila Estrutura, de facto, uma forma única cadeia linear, mas apenas a extremidade de entrada de somente a cabeça.

Quando a fila está vazia, dianteira e traseira ponto de nó principal.

typedef int QElemType;

typedef struct QNode  //结点结构
{
    QElemType data;
    struct QNode *next;
}QNode,*QueuePtr;

typedef struct 
{
    QueuePtr front,rear; //队头队尾指针
}LinkQueue;

operação enqueue

Status EnQueue(LinkQueue *Q,QElemType e)
{
    QueuePtr s=(QueuePtr)malloc(sizeof(QNode))
    if(!s)
        exit(OVERFLOW);
    s->data=e;
    s->next=NULL;
    Q->rear->next=s;
    Q->rear=s;
    return OK;
}

dequeue

//删除队头,并用e返回其值
Status DeQueue(LinkQueue *Q,QElemType *e)
{
    QueuePtr p;
    if(Q->front==Q->rear)   //判断是否为空
        return ERROR;

    p=Q->front->next;       
    *e=p->data;
    Q->front->next=p->next;

    if(Q->rear==p)
        Q->rear=Q->front;
    free(p);

    return OK;
}

 

Publicado 38 artigos originais · ganhou elogios 6 · vista 1906

Acho que você gosta

Origin blog.csdn.net/weixin_43827227/article/details/100903422
Recomendado
Clasificación