Escolar Documentos
Profissional Documentos
Cultura Documentos
<ponteiro>=(<tipo_dado>*) malloc(sizeof(<tipo_dado>));
onde:
- sizeof() uma funo que devolve o temanho, em bytes,
do tipo ou da expresso;
- malloc() uma funo que tem o objetivo de retornar um
ponteiro para uma rea livre de memria a ser identificada
por ela;
- <tipo_dado> o tipo do dado referente ao ponteiro.
Antes das operaes...
5
As operaes aqui demonstradas referem-se a lista lineares
por encadeamento de ns (ligao entre os ns),
simplesmente encadeadas.
Cada n representado basicamente por dois campos:
informao e ponteiro;
Estes campos so oriundos da definio de uma struct;
typedef struct No {
int valor; //campo de informao
struct No *prox;
} TNo;
Lista encadeada com cabea
7
Formas de implementao em uma lista encadeada:
Com cabea: um n que foi declarado
explicitamente no incio do programa, mas cujo contedo
irrelevante. Ou seja, ela serve apenas para marcar o
incio da lista, no contm nenhum valor pertencente a
lista. A primeira clula a cabea da lista.
TNo * inicio;
inicio = (TNo*)malloc(sizeof(TNo));
inicio->prox = NULL; //no h prximo n
Lista encadeada sem cabea
8
Sem cabea: no possui a clula cabea, mas apenas
um apontador para o n seguinte. Nesse caso, a lista est
vazia se o endereo de sua primeira clula (que no existe)
NULL.
Neste caso o ponteiro no tem a mesma estrutura dos ns
que participam da lista.
Ex:
TNo * inicio;
inicio = NULL;
Operao: Criar lista ligada
9
Objetivo: criar uma lista vazia, sem elementos;
Como a lista representada pelo ponteiro para o 1
elemento, uma lista vazia representada pelo ponteiro
apontando para NULL, para sinalizar que no existem
elementos na lista;
Detalhamento:
- Criar um ponteiro, p.ex., inicio e faz-lo
apontar para NULL (identifica o incio da
lista).
main() { main() {
TNo *inicio; TNo *inicio;
inicio=(TNo*)malloc(sizeof(TNo));
inicio = NULL; //sem cabea inicio->prox = NULL; //com cabea
} //melhor criar uma funo } //melhor criar uma funo para isto
Operao: Percorrer uma lista
10
Detalhamento:
- necessrio ter 2 ponteiros: um para o incio da
lista e outro que percorrer a lista (um ponteiro auxiliar);
- o ponteiro aux iniciar apontando para o 1
elemento, depois para o 2 e assim por diante at que
cheguar ao ltimo n que aponta para NULL.
- aux percorre uma lista atualizando seu contedo
com o endereo contido no campo prox do elemento
acessado no momento.
- critrio de parada: quando o campo prox do
ponteiro auxiliar apontar para NULL.
Operao: Percorrer uma lista
11
Operao: Percorrer uma lista
12
if (inicio == NULL) {
printf("\t\t\t L I S T A V A Z I A\n");
} else {
aux = inicio;
while (aux != NULL) {
printf("\t\t\t V A L O R: %d\n", aux -> valor);
aux = aux -> prox;
}
}
Operao: Procurar um elemento em uma lista
16
Detalhamento:
- utilizar o que j foi visto anteriormente para percorrer uma
lista e acessar um elemento;
- o campo valor do ponteiro aux ser utilizado para verificar
se o contedo do elemento acessado o elemento
procurado.
- critrio de parada: quando aux ou o campo prox de aux
apontar para NULL.
Operao: Procurar um elemento em uma lista
17
aux
2 1
4 Caso insero no meio de uma lista no
vazia. 27
Detalhamento (inserir em uma posio e manter a lista
ordenada):
- deve-se localizar o elemento da lista que ir preceder o
elemento novo a ser inserido.
- trs ponteiros: um para o inicio da lista, o segundo para
marcar o elemento anterior (ant) e um ponteiro auxiliar (aux)
que percorrer a lista e validar o elemento que ser
comparado ao elemento novo que ser quer inserir. Alm, do
prprio ponteiro do novo n;
- fazer o ponteiro aux percorrer a lista at chegar ao n
maior que o novo elemento a ser inserido. O ponteiro ant
iniciar NULL e ser atualizado com o endereo de aux antes
de aux avanar para o prximo n.
- ao chegar ao n maior que o novo, encadear o novo n
lista, fazendo o campo prox de novo receber o endereo do
campo prox de aux;
4 Caso insero no meio de uma lista no
vazia. 28
Detalhamento (inserir em uma posio e manter a lista
ordenada):
- encadear o elemento ant ao novo elemento, fazendo o
campo prox de ant receber o endereo do ponteiro novo.
- Critrio de insero: quando o n avaliado maior que o
novo n que se deseja inserir (lista ordenada crescentemente).
28
Operao: Insero de um elemento
29
Exerccios
30
1 Implementar as operaes vista at o momento
utilizando funes;
Implementar as operaes de insero no meio da lista,
nos dois casos especficos.