Operations with linear queues, moving an element to first of the queue

0

I need an algorithm that manipulates a linear list of the FILA type. (In PASCAL, or it can be done in pseudo-code, or C, or whatever is preferable).

The algorithm must take an element from the queue, remove it, and insert this element at the beginning. The vector that holds the queue must be rearranged (since if you remove the element from the middle, you break the queue).

The ROW is circular, it comes back on itself, I will leave below the structure of the stack made in PASCAL:

type
ElementosF = integer; //tipo de dado que a fila ira receber
fila = record
              memoria:array[1..TAMF] of ElementosF; //memoria da fila
              final,inicio,total:integer; //ultimo, primeiro, total de elemento da fila
             end;

Doubt is, how do I do this? I tried in several ways, and all failed ... Thanks

    
asked by anonymous 26.09.2016 / 21:25

1 answer

2

There are several ways to make such an algorithm. I advise you to see the different forms of implementation that I put here and try to make your own code.

Queue in C .

#include <stdio.h>

#define MAX 5 // numero maximo de elementos na fila

// cria uma fila vazia
int comeco = 0;   // comeco da fila
int tamanho = 0;  // tamanho da fila (numero de elementos)
int queue[MAX];   // vetor da fila

void inserir( int );    // inserir elementos no fim da fila
void remover( void );   // remover elementos do comeco da fila

int main(void)
{
    int i; // contador

    inserir(1);
    inserir(10);
    inserir(100);
    inserir(1000);
    remover();
    inserir(6);
    remover();
    inserir(60);

    //// mostra fila na tela ////
    for(i = 0; i < MAX; i++)
        printf("fila[%i] = %i\n", i, queue);

//  system("pause"); // comente esta linha se for rodar no linux
    return ( 0 );

} // fim main    


void inserir( int elemento )
{
    //// checa se a fila esta cheia ////
    if( tamanho == MAX )
        printf("\nfila cheia\n");

    else {
        //// converte os valores virtuais (tamanho e comeco) para o valor real utilizando o operador modulo ////
        queue[ ((comeco + tamanho) % MAX) ] = elemento; 
        //// incrementa tamanho da fila (elemento foi inserido) ////
        tamanho ++; 
    } 

} // fim funcao


void remover(void)
{
    //// checa se a fila esta vazia ////
    if( tamanho == 0 )
        printf("\nfila vazia\n");

    else {
        //// apaga o primeiro elemento da fila deslocando o ponteiro do comeco para proximo elemento ////
        comeco ++;
        //// decrementa o contador de tamanho (um valor foi removido) ////
        tamanho --;
    }

} // fim funcao

See working at Ideone

On the internet you have several algorithms ready, see this site . He even details each function. In this site , it also has another implementation.

    
26.09.2016 / 22:10