Você está na página 1de 55

UNIDADE VII

Linguagem e Técnicas
de Programação

Prof. Fernando Almeida


Estrutura unidimensional – listas

Lista linear é uma cadeia de informações,


todas com a mesma estrutura, porém
correlacionadas. Cada uma dessas estruturas é
chamada de nó e, em alguns casos, registro.
Listas

Nó 1 Nó 2 Nó 3 Nó 4 Nó 5 Nó 6 Nó 7 ...

Chave: STRUCT

Nome:
Endereço:
ASCESSAMOS ATRAVES DE PONTEIROS

Operações fundamentais:
 Inclusão
 Busca
 Remoção
Listas ligadas

Uma lista ligada é um conjunto linear de


nós, que segue unidirecionalmente. Cada nó
é um conjunto de dados e um ponteiro
indicando o endereço do elemento seguinte.
Listas ligadas – posição física dos nós na memória
ARMAZENA A INFORMAÇÃO DO NÓ QUE ESTÁ
POSSUI CONTEÚDOS INTERNOS APONTANDO, NO CASO O "C".

ESPAÇO DE UM PONTEIRO

ÚLTIMO ELEMENTO DA LISTA

Fonte: livro-texto
Exemplo de um nó
Listas ligadas

 A sequência pode ter um número indeterminado de elementos, e o primeiro elemento deve


ser apontado por uma variável ponteiro.
Listas ligadas – posição lógica dos nós na memória

Fonte: livro-texto

Exemplo de um nó
Listas ligadas

Na linguagem C, o nó é um registro feito


por meio da estrutura heterogênea struct
(dados heterogêneos).

Fonte: livro-texto
Listas ligadas

Fonte: livro-texto
Interatividade

Com base no conceito de listas ligadas, assinale a alternativa incorreta:

a) Uma lista ligada é uma representação de uma sequência de objetos, todos do mesmo tipo.
b) Cada elemento da sequência é armazenado em uma célula (nó) da lista.
c) Uma lista ligada é uma sequência de células (nós), em que cada nó contém um objeto
(todos do mesmo tipo) e o endereço do próximo nó.
d) Cada nó é um registro que pode ser definido por meio de uma struct em linguagem C.
e) Estrutura heterogênea que permite a alocação de diferentes tipos de dados na
mesma estrutura.
Resposta

Com base no conceito de listas ligadas, assinale a alternativa incorreta:

a) Uma lista ligada é uma representação de uma sequência de objetos, todos do mesmo tipo.
b) Cada elemento da sequência é armazenado em uma célula (nó) da lista.
c) Uma lista ligada é uma sequência de células (nós), em que cada nó contém um objeto
(todos do mesmo tipo) e o endereço do próximo nó.
d) Cada nó é um registro que pode ser definido por meio de uma struct em linguagem C.
e) Estrutura heterogênea que permite a alocação de diferentes tipos de dados na
mesma estrutura.
Listas ligadas – função de inicialização

 Toda lista deve ser inicializada – lista vazia, sem nenhum nó.

 A lista é representada pelo ponteiro apontando para o primeiro elemento.

 Uma lista vazia é representada pelo ponteiro NULL.

 A função tem como valor de retorno a lista vazia (valor NULL).


Função de inicialização

Fonte: livro-texto
Função de inicialização

O ponteiro lista aponta para o endereço 101, que


armazena o valor NULL

Fonte: livro-texto
Função de inserção

 Cada novo elemento inserido na lista é alocado dinamicamente na memória e encadeado


na lista.

 A função de inserção insere o novo elemento no início da lista.

Fonte: livro-texto

Inserção de um novo nó na lista ligada


Função de inserção

A linguagem C define um
operador adicional ()
para acessar elementos
internos de estruturas por
meio de ponteiros

Fonte: livro-texto
Função de remoção

 A remoção deve ser feita sem que a lista perca a sua integridade.

 Deve continuar ser uma sequência em que cada elemento aponte para o nó seguinte.

 A função recebe a lista e o valor do elemento que será removido da lista, retornando o valor
atualizado dessa lista.

 Deve retornar o endereço atualizado, pois o nó a ser removido pode ser o primeiro
da sequência.
Remoção no início da lista

Fonte: livro-texto
Remoção no meio da lista

 Ocorre quando o nó a ser removido está dentro da sequência.


 Antes da remoção, o endereço apontado deve ser preservado.
 Após a remoção, o nó anterior da sequência recebe o endereço preservado.

Fonte: livro-texto
Função retira

 A função retira é bem mais complexa que a inserção, pois deve, inicialmente, ter uma rotina
para encontrar o nó a ser removido.
Função retira

Fonte: livro-texto
Função busca, impressão e liberação de memória

 A função busca é semelhante à função remoção, em que um laço de repetição utiliza a


variável do tipo No* e aux* como controle.

Fonte: livro-texto
Função busca, impressão e liberação de memória

 A mesma técnica é utilizada na impressão da lista.

Fonte: livro-texto
Função busca, impressão e liberação de memória

 A função libera serve para excluir toda a lista da memória.

Fonte: livro-texto
Interatividade

Trata-se de um conceito fundamental, em que uma estrutura desse tipo faz com que um nó
tenha uma parte com os dados e outra com um ponteiro apontando para o próximo nó. Os
novos nós são incluídos sequencialmente na ponta e a remoção é feita substituindo o nó e
mudando o endereço do nó anterior pelo endereço do próximo nó do elemento removido. Esse
conceito está associado a:

a) Estrutura de lista ligada.


b) Estrutura de pilha (LIFO).
c) Estrutura de fila (FIFO).
d) Ponteiros para filas.
e) Função de inserção em pilhas.
Resposta

Trata-se de um conceito fundamental, em que uma estrutura desse tipo faz com que um nó
tenha uma parte com os dados e outra com um ponteiro apontando para o próximo nó. Os
novos nós são incluídos sequencialmente na ponta e a remoção é feita substituindo o nó e
mudando o endereço do nó anterior pelo endereço do próximo nó do elemento removido. Esse
conceito está associado a:

a) Estrutura de lista ligada.


b) Estrutura de pilha (LIFO).
c) Estrutura de fila (FIFO).
d) Ponteiros para filas.
e) Função de inserção em pilhas.
Pilhas

Uma pilha é uma lista linear em que as operações são


sempre realizadas pelo topo (Last in First Out – LIFO).

Operações básicas:
 Empilhar (push) um novo elemento (inserção no topo).
 Desempilhar (pop) um elemento (removendo-o do topo).
Pilhas

 Vamos imaginar uma pilha composta pelos elementos que foram empilhados na
ordem A, B, C e D.

Aplicando a operação
push(E), a pilha fica:

Fonte: livro-texto
Operações de pilha

RETIRAR O "G"

Fonte: livro-texto
Pilhas

A estrutura do nó continua a mesma da lista

O controle da pilha é feito apontando para o topo, o primeiro nó da lista

Fonte: livro-texto
Criação da pilha com lista

A função main() cria um ponteiro p do tipo pilha.

Fonte: livro-texto
Inserção de elementos na pilha

Fonte: livro-texto
Inserção de elementos na pilha

Fonte: livro-texto
Remoção da pilha

 A rotina de remoção somente acontece pelo topo.

 Ao utilizar a estrutura de lista, somente o primeiro elemento é retirado.

 Dispensa a busca e simplifica muito o mecanismo.

 Inicialmente é preciso verificar se a lista está vazia.

 Uma pilha está vazia quando o topo é NULL.

Fonte: livro-texto
Remoção da pilha

 Uma vez verificado que a pilha não está vazia, a variável num recebe o conteúdo do topo.
 A dupla referência ptopoinfo obtém a informação que se encontra no lugar para onde o
nó do topo está apontando.

Fonte: livro-texto
Remoção da pilha

 Simulação

Fonte: livro-texto
Função de impressão e liberação de memória

Fonte: livro-texto
Interatividade

 Para criar uma pilha, a função malloc tem o propósito de reservar um espaço na memória.
Assinale a alternativa que melhor representa a implementação da função malloc no processo
de criação de uma pilha.

Fonte: livro-texto
Interatividade

a) Pilha* nova_pilha = (Pilha*) malloc(sizeof(Pilha));

b) Pilha nova_pilha = (Pilha*) malloc(sizeof(Pilha));

c) Pilha nova_pilha = (Pilha) malloc(sizeof(Pilha));

d) Pilha* nova_pilha = (Pilha*) malloc(sizeof(Pilha*));

e) Pilha* nova_pilha = (nó*) malloc(sizeof(Pilha)).


Resposta

a) Pilha* nova_pilha = (Pilha*) malloc(sizeof(Pilha));

b) Pilha nova_pilha = (Pilha*) malloc(sizeof(Pilha));

c) Pilha nova_pilha = (Pilha) malloc(sizeof(Pilha));

d) Pilha* nova_pilha = (Pilha*) malloc(sizeof(Pilha*));

e) Pilha* nova_pilha = (nó*) malloc(sizeof(Pilha)).


Filas

Na estrutura fila, o primeiro elemento que entra é o


primeiro que sai (First in First Out – FIFO).

Operações básicas:
 Inserir (entrada) um novo elemento (sempre no final da fila).
 Retirar (saída) um elemento (sempre no início).
Situação inicial de uma fila

Ao fazermos entrada E, o final da fila se deslocará:


Fila com os elementos A, B, C e D.

Saindo um elemento da fila, o início dela passa para o


elemento que era o segundo, retornando o valor A.

Fonte: livro-texto
Fila

A estrutura do nó continua a mesma da lista

O controle da fila é feito apontando para o topo, o primeiro nó da lista

Fonte: livro-texto
Criação da fila com lista

 A função main() cria um ponteiro p do tipo fila.

Fonte: livro-texto
Inserção de elementos na fila

 A rotina de inserção também é a mesma da lista.


 A função que insere no topo realiza o controle de uma maneira diferente.
 Faz com que a lista passe a ser apontada pelo elemento posterior.
 Como se a lista andasse para trás.

O NÓ É CRIADO APONTANDO PARA NULL:


Lista: ini
fim

Fonte: livro-texto
Inserção de elementos na fila

 A partir do segundo nó, o elemento criado aponta para NULL, e o nó anterior passa a
apontar para o novo nó.

Ao inserir um nó, o inicial passa a apontar para o novo


nó, e o controle de início e fim da fila é atualizado

Fonte: livro-texto
Funções para entrar e inserir na fila

Assim, a função para


entrar na fila é:

A função insere da lista é:

Fonte: livro-texto
Remoção de nó da fila

 A remoção de nó da Fila acontece sempre em um lado da sequência (nesse caso, no início).

 Na função, uma vez verificado se está vazia, conferindo se o início da fila é NULL.

Fonte: livro-texto
Remoção da fila

 A função armazena o valor retirado na variável num e retira o nó, atualiza o controle do início
e verifica se a fila acabou.
 Atualiza o valor do controle do fim se realmente tiver acabado.

Fonte: livro-texto
Remoção da fila

 Simulação

Fonte: livro-texto
Função de impressão e liberação de memória

Fonte: livro-texto
Interatividade

A rotina de inserção em uma Lista pode ser considerada a mesma da Fila, porém a função
que insere no topo realiza o controle de uma maneira diferente, fazendo que a lista passe a ser
apontada pelo elemento posterior. Analise a função insere() e selecione a alternativa que
melhor descreve a assinatura da função:

Fonte: livro-texto
Interatividade

a) Função insere recebe por parâmetro um ponteiro e um inteiro, ao final retorna um ponteiro.

b) Função insere recebe por parâmetro uma lista e um inteiro, ao final retorna um ponteiro.

c) Função insere recebe por parâmetro um ponteiro, uma lista e um inteiro, ao final retorna
um ponteiro.

d) Função insere recebe por parâmetro um ponteiro e um inteiro, ao final retorna um


elemento da lista.

e) Nenhuma alternativa está correta.


Resposta

a) Função insere recebe por parâmetro um ponteiro e um inteiro, ao final retorna um ponteiro.

b) Função insere recebe por parâmetro uma lista e um inteiro, ao final retorna um ponteiro.

c) Função insere recebe por parâmetro um ponteiro, uma lista e um inteiro, ao final retorna
um ponteiro.

d) Função insere recebe por parâmetro um ponteiro e um inteiro, ao final retorna um


elemento da lista.

e) Nenhuma alternativa está correta.


ATÉ A PRÓXIMA!

Você também pode gostar