Tudo sobre Listas

Olá Pessoal, sou nova no GUJ, faço SI e estou vendo em Estruturas de Dados a tal da Fila kkkk
E confesso que estou com muita dificuldade, minha professora passa tudo estruturado, sem OO[color=darkblue] [/color], e isso me complica um bocado …
Gostaria que me ajudassem a entender Listas encadeadas com alocação dinâmica (SIMPLES/DUPLA)[color=red] [/color] :roll:

Essa não é uma pergunta fácil de se responder. Há muita coisa sobre filas.

O que exatamente você não entendeu? A fila é uma estrutura de dados onde o primeiro elemento que entra é também o primeiro elemento que sai. Exatamente igual a uma fila de banco (o primeiro que chega é o primeiro a ser atendido).

Wiki: http://pt.wikipedia.org/wiki/Estrutura_de_dados
Caelum: http://www.caelum.com.br/curso/cs-14-algoritmos-estruturas-dados-java/
Youtube: http://www.youtube.com/watch?v=VWpurzEmj24

Caso não entenda pega os pontos não entendidos e vamos discutir eles :wink:

“victorhsn”
Muito Obrigada, á Apostila de Estrutura de Dados do GUJ eu até já imprimi …
Vou ver todo o resto …
Pessoal, OBRIGADA !!!
Vou estudar este fim se semana caso eu tenha duvida entrarei em contato …
Bjão !!! :smiley:

Oi gente, eu li o materia que me mandaram e posso refinar minha pergunta.

Não entendi muito bem como se faz uma fila por prioridades. Minha professora passou um exercicos com esta Estrutura de Dados.

2- (fila) Considere a situação em que os elementos cheguem e saem de uma fila com prioridades. Mais que isso, suponha que um elemento nesse sistema possa ter prioridade A ou B (prioridade A= atendido primeiro).
a. Apresente um esquema alternativo (procedimentos básicos de manipulação de filas) para tratar tal situação. A remoção da fila é feita como no esquema convencional (no inicio).
b. Sugestão: implemente um arranjo par de fila, contendo as respectivas prioridades.

Sinceramente nem sei por onde começar …

:cry:

  1. Comece fazendo uma fila normal.
  2. Em seguida, apenas altere o nó para que ele contenha a informação da prioridade.
  3. Altere o método de inserção para buscar um nó com menor prioridade daquele sendo inserido, e colocar o nó sendo inserido na frente deste.

Uma “priority queue” (que é uma coisa que existe no Java, aliás) não é uma lista ligada e sim uma outra coisa.

Mas gente eu não posso usar as funções do JAVA, eu sei que tem um monte de função que faz tudo mas não posso usar tem que ser tudo feito na raça mesmo … entenderão …
= /

Por isso que estou penando pra fazer :cry:

Você já conseguiu fazer uma fila normal?

Seu professor passou alguma matéria sobre fila de prioridades? Pq ele pode fazer isso tanto como uma fila normal e fazendo busca na inserção (pouco eficiente) quanto ter passado para você a teoria de como usar um heap (mais eficiente, mas mais complexo).

A teoria ela passou, na sala ela falou pra gente fazer esse exercicio da seguinte maneira:

FAZEMOS 2 VETORES, um para receber o que o usuário digitar e um para receber a prioridade que ele digitar também. Até ai tudo bem, eu me enrolo na hora em que tem que remover pq o usuario tem que digitar o que ele quer remover e qual a prioridade isso eu não sei fazer …

IENFIM TUDO O QUE ELA PASSA TA PARECENDO POUCO EFICIENTE, mas fazer o que tenho que fazer do jeito dela, não posso usar OO e nem as funções do JAVA ! =/

Olá, fiquei meio sumida … estudando Estruturas de Dados pra varear. Gente estou com um problema.

EXERCICIO - 4- (pilha) Duas pilhas seqüenciais numéricas estão ordenadas crescentemente a partir do topo. Transferir os elementos dessas pilhas para uma terceira pilha, inicialmente vazia, de modo que ela fique ordenada decrescentemente com o maior valor no topo.
package projprova;

import java.util.Scanner;

/*
@author Adrielle
*/
public class projEx4doTrabalho
{
/*O Ex. e uma pilha, entao inicia do fim (add na posiçao final/ base da pilha)
* entao a variavel que add e o fim sendo esta tambem que remove, a cada add ela e incrementada.
*/

static int tMax = 5,tMaxR = 10, fimVetor1 = 0, fimVetor2 = 0, i = 0, auxiliar =0, j= 0;
static int vetor1[] = new int [tMax];
static int vetor2[] = new int [tMax];
static int vetResul[] = new int [tMaxR];

 public static boolean cheio(int tMax)
{
    if (tMax > 5)
        return false;
    else return true;
}

public static boolean addVetor1 (int valor)
{

      if (cheio(tMax))
        return false;
    else
    {
        for (i=0;i<tMax;i++)
        vetor1[fimVetor1]=valor;
        if (fimVetor1 < tMax)
        fimVetor1++;

      for (int e=0;e<fimVetor1;i++) // FOR PARA PERCORRER O VETOR TODO
      {
          for (int d=0;d<fimVetor1;i++) // PARA PERCORRER O VETOR E SEGURAR UMA POSIÇAO PARA COMPARAR OS VALORES
          {
              if (vetor1[i]>vetor1[i+1]) // se  valor da posiçao i (atual)for maior do que o valor da prox pos.
                  auxiliar = vetor1[i]; // entao aux guarda o valor do maior
                  vetor1[i] = vetor1[i+1]; // faz ele receber o valor menor do proximo
                  vetor1[i+1] = auxiliar; // e ele recebe ao maior valor guardado no aux ASSIM FICA CRESCENTE - A PARTIR DO TOPO !!!!
          }
      }
    }
  return true;
}
public static boolean addVetor2(int valor)
{
    if (cheio(tMax))
        return false;
    else
    {
        for (i=0;i<tMax;i++)
        {
        vetor2[fimVetor2]=valor;
        if (fimVetor2 < tMax)
        fimVetor2++;
        }

      for (int e=0;e<fimVetor2;i++) // FOR PARA PERCORRER O VETOR TODO
      {
          for (int d=0;d<fimVetor2;i++) // PARA PERCORRER O VETOR E SEGURAR UMA POSIÇAO PARA COMPARAR OS VALORES
          {
              if (vetor2[i]>vetor2[i+1]) // se  valor da posiçao i (atual)for maior do que o valor da prox pos.
              { auxiliar = vetor2[i]; // entao aux guarda o valor do maior
                  vetor2[i] = vetor2[i+1]; // faz ele receber o valor menor do proximo
                  vetor2[i+1] = auxiliar; // e ele recebe ao maior valor guardado no aux ASSIM FICA CRESCENTE - A PARTIR DO TOPO !!!!
              }
          }
      }
     }
    return true;
}

public static boolean addResultante ()
{
   for (i=0;i<tMaxR; i++) // adicionando valores no vetor.
   {
       vetResul[j]= vetor1[i];
       j++;
       vetResul[j] = vetor2[i];
       j++;
   }
   for (i=0; i < tMaxR;i++) // ordenando os valores no vetor
   {
       for (j=0;j<tMaxR;j++)
     {
           if (vetResul[j] < vetResul[j+1])
          {
           auxiliar = vetResul[j];
            vetResul[j] = vetResul[j+1];
            vetResul[j+1] = auxiliar;
          }
     }
   }
   return true;
}
public static void main(String args[])
{
    Scanner entrada = new Scanner (System.in); // inicializando
    int valor; // valor a ser digitado
    String x; // variavel para o menu
    char letra='0'; // variavel para o caso
    // entrada
    do
    {
        System.out.println("1 - Adicionar valores no Vetor1");
        System.out.println("2 - Adiconar valores no Vetor 2");
        System.out.println("3 - Mostrar Vetor Resultante");
        System.out.println("4 - Sair");
        System.out.println("Escolha uma opção (1-4)");
        x=entrada.next();
        letra = x.charAt(0);
        //saida
        switch (letra)
        {
            case '1': System.out.print("\n Entre com os Valores para o Vetor 1:\n ");
                      valor =entrada.nextInt();
                      if(!cheio(valor))
                          System.out.println("O Vetor 1  está cheio !");
                      break;

            case '2': System.out.print("\n Entre com os Valores para o Vetor 2:\n ");
                      valor =entrada.nextInt();
                      if(!cheio(valor))
                          System.out.println("O Vetor 2  está cheio !");
                      break;

            case '3': System.out.println("\n Vetor Resultante: \n");
                             for (i=0;i<tMaxR;i++)
                             { System.out.println(vetResul[i] + "\n");                                                                          }

            default: System.out.println("\n Escolher entre 1 e 4 !\n");
                     break;
      }
    } while  (letra != '4');
}

}

Esse algoritmo tem um erro na inserção de dados eu insiro e ele volta para o menu …
Não sei concertar, por favor me ajudem …

Obrigada … =*

[quote=asparducci]Olá, fiquei meio sumida … estudando Estruturas de Dados pra varear. Gente estou com um problema.

EXERCICIO - 4- (pilha) Duas pilhas seqüenciais numéricas estão ordenadas crescentemente a partir do topo. Transferir os elementos dessas pilhas para uma terceira pilha, inicialmente vazia, de modo que ela fique ordenada decrescentemente com o maior valor no topo.
package projprova;

fiz meu projeto mas quando se insere o primeiro valor do vetor ele sempre volta para o menu principal e adiciona até dar erro e depois não consigo fazer mais nada … =/

No switch case voce nao esta inserindo no vetor 1 nem no vetor2.