Documente Academic
Documente Profesional
Documente Cultură
Listas Lineares
- Pilhas
- Filas
Pilhas
É uma lista linear na qual o primeiro elemento a entrar é o último elemento a
sair.
pilha de pratos,
pilha de livros,
pilha de cartas de um baralho, Fonte: https://www.google.com/lbaralhoempilhado
etc.
Fonte: https://www.google.com/livro
Fonte: https://www.google.com/prato
Exemplo da Pilha em C
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <string>
struct lista{
int info;
struct lista *prox;
};
system("cls");
printf("----------------------------------------\n");
Fila
É uma lista linear na qual o primeiro elemento a entrar é o primeiro
elemento a sair.
Fonte: https://www.google.com/fila
Exemplo de Fila em C
#include <stdio.h>
#include <stdlib.h>
struct lista{
int info;
struct lista *prox;
};
Nodo genérico
PtLista
L1 L2 L3 L4
LL duplamente encadeadas
Operações
• Criar e inicializar uma lista
• Inserir novo nodo
• Remover um nodo Algoritmos
• Consultar um nodo
• Destruir lista Semelhantes a LL encadeada simples
Lista* Cria_lista(void)
{
return NULL;
}
LL duplamente encadeadas
L1 L2 L3 L4
PtLista L5
L1 L2 L3 L4
Inserção de um novo nodo no
inicio da lista
PtLista
L5
L1 L2 L3 L4
PtLista
L5 L1 L2 L3 L4
Algoritmo: inserir um nodo no inicio da lista
Lista* Insere_elem(Lista* Ptl,int elem)
Lista* Insere_elem(Lista *Ptl, int elem)
{
Lista *Ptnodo;
Ptnodo = (Lista*)malloc(sizeof(Lista));
if (Ptnodo == NULL)
return Ptl;
Ptnodo->info = elem;
Ptnodo->prox = Ptl;
Ptnodo->ant = NULL;
if(Ptl != NULL)
Ptl->ant = Ptnodo;
Ptl = Ptnodo;
return Ptl;
}
LL duplamente encadeadas
A B C D
PtLista
A B C D
Algoritmo:Remover um nodo de LL Duplamente Encadeada
Lista* Remove_elem(Lista *Ptl, int elem)
atual = Ptl;
while (atual != NULL && elem != atual->info)
{
atual = atual->prox;
}
if (atual == NULL)// não achou
return Ptl;
if (atual->prox != NULL)
atual->prox->ant = atual->ant;
free(atual);
return Ptl;
}
LL duplamente encadeadas
Consulta à lista
return NULL;
}
lladae2d.h
Lista* Cria_lista(void);
Lista* Libera_lista(Lista* Ptl);
int E_vazia(Lista* Ptl);
int E_cheia(Lista* Ptl);
Lista* Insere_elem(Lista* Ptl, int elem);
Lista* Remove_elem(Lista* Ptl, int elem);
int Tamanho_lista(Lista* Ptl);
int Consulta_nodo(Lista* Ptl, int pos, int *elem);
#include <stdio.h>
#include <stdlib.h>
#include "lladae2d.h“ lladae2d.c
struct no {
struct no* ant;
int info;
struct no* prox;
};
Lista* Cria_lista(void)
{……..}
Lista* Libera_lista(Lista *Ptl)
{…….}
int E_vazia(Lista *Ptl)
{…….}
int E_cheia(Lista *Ptl)
{…….}
Lista* Insere_elem(Lista *Ptl, int elem)
{.......}
Lista* Remove_elem(Lista *Ptl, int elem)
{.......}
int Tamanho_lista(Lista Ptl)
{…….}
int Consulta_nodo(Lista *Ptl, int pos,int *elem)
{……}
insereInicio(LISTA);
break;
case 3:
insereFim(LISTA);
break;
case 4:
inicia(LISTA);
break;
default:
printf("Comando invalido\n\n");
}
}