Sei sulla pagina 1di 3

01/04/2017

Listas ligadas
Tcnicas de Programao T01 So estruturas de dados dinmicas, onde
Prof. Flvio Ferry de Oliveira Moreira, MSc.
os dados so mantidos juntos a ponteiros
que referenciam o prximo valor;
Aula 02
Os programas que usam listas
normalmente precisam de dados
ordenados em tempo real.

01/04/2017 2013 - DC - UFPI 2

Listas duplamente ligadas Manipulando listas


Variao da lista anterior, onde os As operaes para manipulao de uma
ponteiros se referem ao prximo valor e lista so:
um outro se refere ao anterior; inserir - insere num determinado ponto uma
Uma aplicao prtica desta estrutura o informao na lista.
processador de textos. adicionar - adiciona ao final da lista uma
informao.
apagar - deleta um n da lista.
atual - retorna a informao corrente da lista.

01/04/2017 2013 - DC - UFPI 3 01/04/2017 2013 - DC - UFPI 4

Manipulando listas Exemplo em C


prximo - desloca o ponteiro atual da lista O exemplo mostrado no slide a seguir faz
caminhando para o final. parte do pacote de exemplos inserido no
anterior desloca o ponteiro atual da lista no SIGAA, entre os arquivos desta disciplina.
sentido do incio.
O nome do arquivo :
primeiro - desloca o ponteiro atual da lista
programa_lista_01.C
caminhando para o incio da lista.
ultimo - desloca o ponteiro atual da lista
caminhando para o final da lista.

01/04/2017 2013 - DC - UFPI 5 01/04/2017 2013 - DC - UFPI 6

1
01/04/2017

/* programa_lista_01.c */ lista = calloc(1,sizeof(struct LISTA));


#include <stdio.h> if( lista == NULL )
#include <stdlib.h> {
struct LISTA printf("\nErro de alocacao de memoria!");
{ exit(-1);
char string[41]; }
int numero; lista->NEXT = NULL;
struct LISTA * NEXT; /* guardando o inicio da lista */
}; inicio = lista;
int main(void)
{
int i;
struct LISTA *lista;
struct LISTA *inicio;
01/04/2017 2013 - DC - UFPI 7 01/04/2017 2013 - DC - UFPI 8

for(i=0;i<25;i++) /* volta para o inicio da lista */


{ lista = inicio;
lista->numero = i;
while(lista->NEXT != NULL )
sprintf(lista->string, "Numero %02d", i);
/* aloca o proximo elemento da lista */ {
printf("\nNumero = %d, String = %s",
lista->NEXT = calloc(1,sizeof(struct LISTA)); lista->numero, lista->string);
if( lista->NEXT == NULL ) /* caminha elemento a elemento da lista */
{
lista = lista->NEXT;
printf("\nErro de alocacao de memoria!");
exit(-1); }
}
/* posiciona no proximo elemento */
lista = lista->NEXT;
lista->NEXT = NULL;
}

01/04/2017 2013 - DC - UFPI 9 01/04/2017 2013 - DC - UFPI 10

lista = inicio;
while( lista->NEXT != NULL )
{ Pilha
/* mantem referencia do proximo elemento */
struct LISTA *next; Esta estrutura, tambm pode ser montada
next = lista->NEXT; com ponteiros, permite empilhar dados
/* libera o espaco do endereco atual e "limpa" o
tal qual uma pilha de livros ou de pratos,
endereco atribuindo NULL */ ou seja, possvel inserir ou retirar
free(lista); apenas o ltimo elemento colocado;
lista = NULL;
lista = next; muito til em controles internos como
} em Sistemas Operacionais controlando os
return 0;
programas abertos na memria RAM.
}

01/04/2017 2013 - DC - UFPI 11 01/04/2017 2013 - DC - UFPI 12

2
01/04/2017

Ilustrando uma pilha Operaes com Pilha


push - coloca uma informao na pilha
Somente o Dado 05, que se
encontra no topo da pilha (empilha).
pode ser manipulado. pop - retira uma informao da pilha
(desempilha).
As operaes permitidas so:
size - retorna o tamanho da pilha.
PUSH e POP, que significam
EMPILHAR e DESEMPILHAR o stackpop - retorna o elemento superior
dado. da pilha sem remov-lo (equivalente s
Estrutura conhecida como operaes de pop e um push).
LIFO Last In First Out. empty - verifica se a pilha est vazia.
01/04/2017 2013 - DC - UFPI 13 01/04/2017 2013 - DC - UFPI 14

Exemplo em C FIM
Verifique nos arquivos o programa
chamado:
programa_pilha_01.c

01/04/2017 2013 - DC - UFPI 15 01/04/2017 2013 - DC - UFPI 16

Potrebbero piacerti anche