Sei sulla pagina 1di 18

Prof.

Nelson Batista Leitão Neto

Análise de Algoritmo e Estrutura de Dados

Estrutura e dados do tipo Lista, Pilha e Fila

Lista

LISTAS SIMPLESMENTE ENCADEADAS

  São listas que contém o endereço de apenas um registro. Os “ponteiros” apontam para o próximo registro.

Implementação:

package lsimplesmente;

import java.io.*;

class LSimples {

/* Constrói um menu de opções para manipulação da lista*/

public static void escolhas () {

System.out.print ("Escolha a Opcao:");

System.out.print (" \n1. Inserir Nó no início");

System.out.print (" \n2. Inserir Nó no fim");

System.out.print (" \n3. Inserir Nó em uma posicao");

System.out.print (" \n4. Localizar Nó");

System.out.print (" \n5. Excluir Nó");

System.out.print (" \n6. Exibir lista");

System.out.print (" \n7. Sair");

System.out.print ("Opcao :\t ");

public static void main(String args[]){

ListaSimples Slist = new ListaSimples(); /*Slist = Simples Lista*/

BufferedReader entrada;

entrada = new BufferedReader(new InputStreamReader(System.in));

1
Prof. Nelson Batista Leitão Neto

int i = 0;

IntNoSimples temp_no; /*cria estrutura IntNoSimples*/

int valor;

try {

escolhas();

char opcao = entrada.readLine().charAt(0);

while (opcao != '7') {

switch (opcao) {

case '1' :

System.out.println("Insere um Nó no inicio da lista");

System.out.println("Digite um valor");

valor = Integer.parseInt(entrada.readLine());

Slist.insereNo_inicio(new IntNoSimples(valor));

break;

case '2' :

System.out.println("Insire um Valor no final da lista");

System.out.println("Digite um valor");

valor = Integer.parseInt(entrada.readLine());

Slist.insereNo_fim(new IntNoSimples(valor));

break;

case '3' :

System.out.println("Insire um Valor numa dada posicao");

System.out.println("Digite um valor");

valor = Integer.parseInt(entrada.readLine());

System.out.println("Digite a posicao");

int posicao = Integer.parseInt(entrada.readLine());

Slist.insereNo_posicao(new IntNoSimples(valor),posicao);

break;

case '4':

System.out.println("Localiza um valor");

2
Prof. Nelson Batista Leitão Neto

System.out.println("Digite um valor");

valor = Integer.parseInt(entrada.readLine());

Slist.buscaNo(valor);

break;

case '5':

System.out.println("Exclui um elemento da lista");

System.out.println("Digite o valor");

valor = Integer.parseInt(entrada.readLine());

Slist.excluiNo(valor);

break;

case '6':

System.out.println("Exibe a lista");

Slist.exibeLista();

break;

default : System.out.println ("Opcao Invalida !");

System.out.println();

escolhas();

opcao = entrada.readLine().charAt(0);

} catch (Exception erro){

System.out.println ("Erro de Entrada de Dados");

}}}

Classe ListaSimples

package lsimplesmente;

class ListaSimples{

IntNoSimples primeiro, ultimo;

3
Prof. Nelson Batista Leitão Neto

int numero_nos;

ListaSimples(){

primeiro = ultimo = null;

void insereNo_fim (IntNoSimples novoNo){

novoNo.prox = null;

if (primeiro == null)/*nesta condição, é o primeiro elemento a ser inserido*/

primeiro = novoNo;

if (ultimo != null)

ultimo.prox = novoNo;

ultimo = novoNo;

void insereNo_inicio (IntNoSimples novoNo){

if (primeiro != null)

novoNo.prox = primeiro;

else

{ if (primeiro == null)

primeiro = novoNo;

ultimo = novoNo;

int ContarNos()

{ int tamanho = 0;

IntNoSimples temp_no = primeiro;

while (temp_no != null)

{ tamanho++;

temp_no = temp_no.prox;

return tamanho;

4
Prof. Nelson Batista Leitão Neto

void insereNo_posicao(IntNoSimples novoNo, int posicao)

{IntNoSimples temp_no = primeiro;

int numero_nos = ContarNos();

int pos_aux;

if(posicao == 0)

{novoNo.prox = primeiro;

if(primeiro == ultimo)

{ultimo = novoNo;}

primeiro = novoNo;}

else

{if (posicao <= numero_nos)

{ pos_aux = 1;

while(temp_no != null && posicao > pos_aux)

{temp_no = temp_no.prox;

pos_aux ++;

novoNo.prox = temp_no.prox;

temp_no.prox = novoNo;

else

{if(posicao > numero_nos)

{ultimo.prox = novoNo;

ultimo = novoNo;

} } }}

IntNoSimples buscaNo (int buscaValor){

int i = 0;

IntNoSimples temp_no = primeiro;

while (temp_no != null)

{ if (temp_no.valor == buscaValor)

{System.out.println("No " + temp_no.valor + " posicao " + i);

5
Prof. Nelson Batista Leitão Neto

return temp_no;

i++;

temp_no = temp_no.prox;

return null;

void excluiNo (int valor)

{ IntNoSimples temp_no = primeiro;

while (temp_no != null && temp_no.valor != valor)

{temp_no = temp_no.prox;

temp_no.prox = temp_no.prox.prox;

if (ultimo == temp_no.prox)

ultimo = temp_no;

void exibeLista()

{IntNoSimples temp_no = primeiro;

int i = 0;

while (temp_no != null)

{System.out.println("Valor " + temp_no.valor + " posicao "+ i);

temp_no = temp_no.prox;

i++;

}}}

Classe IntNoSimples

package lsimplesmente;

class IntNoSimples{

int valor;

IntNoSimples prox;/*variável com mesmo nome da classe, onde prox faz referência ao próx
elemento da lista. Java não aceita ponteiros */

6
Prof. Nelson Batista Leitão Neto

IntNoSimples(int valorNo){

valor = valorNo;

prox = null;

LISTAS DUPLAMENTE ENCADEADAS

  São listas que contém endereço do registro anterior e posterior.

Implementação:

package ldupla;

class LDuplamente{

public static void main(String[] args){

ListaDupla Slist = new ListaDupla ();

Slist.insereNo (new IntNoDuplo (1));

Slist.insereNo (new IntNoDuplo (3));

Slist.insereNo (new IntNoDuplo (5));

Slist.insereNo (new IntNoDuplo (7));

IntNoDuplo temp_no = Slist.primeiro;

while (temp_no != null){

System.out.println (temp_no.valor);

temp_no = temp_no.prox;

Slist.incluiNo (new IntNoDuplo (2), 1);

System.out.println ("Apos incluir o no 2...");

7
Prof. Nelson Batista Leitão Neto

temp_no = Slist.primeiro;

while (temp_no != null){

System.out.println (temp_no.valor);

temp_no = temp_no.prox;

Slist.excluiNo (2);

System.out.println ("Apos excluir o no 3...");

temp_no = Slist.primeiro;

while (temp_no != null){

System.out.println (temp_no.valor);

temp_no = temp_no.prox;

Classe ListaDupla

package ldupla;

class ListaDupla{

IntNoDuplo primeiro, ultimo;

int numero_nos;

ListaDupla (){

primeiro = ultimo = null;

numero_nos = 0;

void insereNo (IntNoDuplo novoNo){

novoNo.prox = null;

8
Prof. Nelson Batista Leitão Neto

novoNo.ant = ultimo;

if (primeiro == null)

primeiro = novoNo;

if (ultimo != null)

ultimo.prox = novoNo;

ultimo = novoNo;

numero_nos++;

IntNoDuplo pegarNo (int indice){

IntNoDuplo temp_no = primeiro;

for (int i = 0; (i < indice) && (temp_no != null); i++)

temp_no = temp_no.prox;

return temp_no;

void incluiNo (IntNoDuplo novoNo, int indice){

IntNoDuplo temp_no = pegarNo (indice);

novoNo.prox = temp_no;

if (novoNo.prox != null){

novoNo.ant = temp_no.ant;

novoNo.prox.ant = novoNo;

}else{

novoNo.ant = ultimo;

ultimo = novoNo;

if (indice == 0)

primeiro = novoNo;

else

novoNo.ant.prox = novoNo;

numero_nos++;

9
Prof. Nelson Batista Leitão Neto

void excluiNo (int indice){

if (indice == 0){

primeiro = primeiro.prox;

if (primeiro != null)

primeiro.ant = null;

}else{

IntNoDuplo temp_no = pegarNo (indice);

temp_no.ant.prox = temp_no.prox;

if (temp_no != ultimo)

temp_no.prox.ant = temp_no.ant;

else

ultimo = temp_no;

numero_nos--;

Classe IntNoDuplo

package ldupla;

class IntNoDuplo{

int valor;

IntNoDuplo prox;

IntNoDuplo ant;

IntNoDuplo (int valorNo){

valor = valorNo;

prox = ant = null;

10
Prof. Nelson Batista Leitão Neto

Pilha

Estrutura de dados simples e bastante utilizada. O acesso é feito pelo topo. Se introduzido
novo elemento, este fica no topo. O único elemento a ser removido é o do topo. O primeiro
elemento que entrou é o último a sair. FILO = FIRST IN LAST OUT.

11
Prof. Nelson Batista Leitão Neto

Implementação

package pilhas;

import java.io.*;
class usaPilha {
public static void escolhas () {
System.out.println ("Escolha a Opcao:");
System.out.print ("\n1. Inserir");
System.out.print (" \n2. Saída");
//System.out.print (" \n3. Exibir a Pilha");
System.out.print (" \n4. Sair");
System.out.print ("\n. Opcao :\t ");
}
public static void main(String args[]){
Pilha objPilha = new Pilha(4);
BufferedReader entrada;
entrada = new BufferedReader(
new InputStreamReader (System.in) );
Object valor;
try {
escolhas();
char opcao = entrada.readLine().charAt(0);
while (opcao != '4') {
switch (opcao) {
case '1' :
if (objPilha.cheia() == false)
{System.out.println ("Digite valor: ");
valor = entrada.readLine();

12
Prof. Nelson Batista Leitão Neto

objPilha.empilhar(valor);
}
else
{System.out.println("Pilha Cheia ! ");
}
break;
case '2' :
if (objPilha.vazia() == false)
{System.out.println (objPilha.desempilhar());
}
else
{System.out.println("Pilha Vazia ! ");
}
break;
/*case '3' :
objPilha.exibePilha();
break;*/
default : System.out.println ("Opcao Invalida !");
}
System.out.println();
escolhas();
opcao = entrada.readLine().charAt(0);
}
} catch (Exception erro){
System.out.println ("Erro de Entrada de Dados. Provável Pilha Cheia");
}
}
}

Classe Pilha

package pilhas;

class Pilha {
int tamanho;
int topo;
Object vetor[];
Pilha(int tam) {
topo = -1;
tamanho = tam;
vetor = new Object[tam];
}
public boolean vazia ()
{if (topo == -1)
return true;
else
return false;
}
public boolean cheia ()
{if (topo >= tamanho)
return true;
else
return false;
}

13
Prof. Nelson Batista Leitão Neto

public void empilhar(Object elem)


{if ( !cheia( ) )
{topo++;
vetor[topo] = elem;
}
else
{System.out.println("Pilha Cheia");
}
}
public Object desempilhar()
{Object valorDesempilhado;
if ( vazia( ) == true )
{ System.out.print("Pilha Vazia");
valorDesempilhado = null;
return valorDesempilhado;
}
else
{ valorDesempilhado = vetor[topo];
topo--;
return valorDesempilhado;
}
}
/*public void exibePilha()
{for(int i = topo; i >= 0; i--)
System.out.println("Elemento " + vetor[i] + " posicao " + i);
}*/
}

Fila

Estrutura de dados também simples e bastante utilizada. O acesso é feito pelo início. São
acessados na ordem que foram inseridos. O elemento novo vai pro final da fila e quando é
removido, será o primeiro elemento inserido. Primeiro que entrou e o primeiro que sai. (FIFO –
FIRST IN FIRST OUT).

14
Prof. Nelson Batista Leitão Neto

15
Prof. Nelson Batista Leitão Neto

Implementação

package filas;

import java.io.*;
class usaFila {
public static void escolhas () {
System.out.println ("Escolha a Opcao:");
System.out.print ("\n1. Inserir");
System.out.print (" \n2. Saída");
// System.out.print (" \n3. Exibir a Fila");
System.out.print (" \n4. Sair");
System.out.print ("\n. Opcao :\t ");
}
public static void main(String args[]){
Fila objFila = new Fila(4);
BufferedReader entrada;
entrada = new BufferedReader(
new InputStreamReader (System.in) );
Object valor;
try {
escolhas();
char opcao = entrada.readLine().charAt(0);
while (opcao != '4') {
switch (opcao) {
case '1' :
if (!objFila.cheia())
{System.out.println ("Digite Valor: ");
valor = entrada.readLine();
objFila.enfileirar(valor);
}
else
{System.out.println("Fila Cheia ! ");
}
break;
case '2' :
if (objFila.vazia() == false)
{System.out.println(objFila.desenfileirar());
}
else
{System.out.println("Fila Vazia ! ");

16
Prof. Nelson Batista Leitão Neto

}
break;
/* case '3' :
objFila.exibeFila();
break;*/
default : System.out.println ("Opcao Invalida !");
}
System.out.println();
escolhas();
opcao = entrada.readLine().charAt(0);
}
} catch (Exception erro){
System.out.println ("Erro de Entrada de Dados");
}
}}

Classe Fila

package filas;

class Fila {
int tamanho;
int inicio;
int fim;
int total;
Object vetor[];
Fila(int tam) {
inicio = 0;
fim = 0;
total = 0;
tamanho = tam;
vetor = new Object[tam];
}
public boolean vazia () {
if (total == 0)
return true;
else
return false;
}
public boolean cheia () {
if (total >= tamanho)
return true;
else
return false;
}
public void enfileirar(Object elem) {
if ( !cheia())
{ vetor[fim] = elem;
fim++;
total++;
if (fim >= tamanho)
fim = 0;
}

17
Prof. Nelson Batista Leitão Neto

else
{ System.out.println("Fila Cheia");
}
}
public Object desenfileirar()
{ Object excluido;
{ if (vazia() == false)
{excluido = vetor[inicio];
inicio++;
if (inicio >= tamanho)
inicio = 0;
total --;
return excluido;
} else
{ excluido = null;
return excluido;
}
}
}
/*public void exibeFila()
{for (int i = 0; i < total; i++)
{System.out.println("posicao " + i +" valor "+vetor[i]);
}
}*/}

18

Potrebbero piacerti anche