Você está na página 1de 7

Universidade Federal de Uberlndia - Bacharelado em Cincia da Computao

Lista de Exerccios de Algoritmos e Estruturas de Dados

Listas Dinmicas Encadeadas - Cclicas, Duplas e Simples

Prof. Denise Guliato

Monitora: Larissa Alves Pereira

1) Implementar um TAD referente lista ordenada, usando alocao


dinmica simplesmente encadeada.

a) A estrutura de dados dada a seguir:

struct no{
int info;
Struct no* prox;
};

typedef struct no Lista;

b) Operaes que o TAD deve contemplar:


. Inicializar a lista
. Verificar se lista vazia
. Inserir um dado elemento
. Remover um dado elemento
. Tamanho: retorna o nmero de elementos da lista
. Iguais: recebe duas listas ordenadas e verifica se elas so iguais
. Mdia: retorna a mdia aritmtica simples dos elementos da lista
. Busca: verifica se um dado valor pertencente lista
. Elimina: elimina todas as ocorrncias de um dado elemento
. Elimina_ : elimina um elemento que est em uma dada posio definida
pelo usurio

Obs.: importante verificar se a posio vlida.

. Insere na direita: insere um dado valor direita do -simo elemento da


lista
Obs.: importante verificar se a posio vlida.
. Insere na esquerda: insere um dado valor esquerda do -simo elemento
da lista
Obs.: importante verificar se a posio vlida.
2) Dado duas listas dinmicas simplesmente encadeadas (com a mesma
estrutura do item 1) com ordenao,L1 e L2, crie um algoritmo que ir
gerar uma terceira lista com as seguintes caractersticas:

. Inverter: recebe uma lista, L1 ou L2, e retorna uma nova lista L3,
formada pelos elementos da lista recebida na ordem inversa.

. Retornar mpares: recebe as listas L1 e L2 e retorna uma nova lista L3,


formada apenas com os elementos mpares das duas listas.

. Concatena: recebe as listas L1 e L2 e retorna uma nova lista L3 formada


pela concatenao entre a lista L1 e L2.

. Conjunto interseco: gerar uma terceira lista com a interseco entre


os nmeros da primeira e da segunda lista.

. Intercalar: a funo recebe as duas listas ordenadas e retorna a lista


com os elementos das duas listas intercalados conforme a ordem com que
elas se dispe na lista, segundo exemplificado abaixo.

. Intercalar ordenadamente: o mdulo recebe as duas listas ordenadas e


retorna a lista com os elementos das duas listas intercalados, porm
obedecendo a ordem crescente dos nmeros.

3) Dada uma lista encadeada que armazena nmeros inteiros, escreva uma
funo que transforma a lista dada em duas listas encadeadas: a primeira
contendo os elementos cujo contedo par e a segunda contendo os
elementos com contedos impares. Sua funo deve manipular somente os
apontadores e no o contedo das clulas. Exemplo:
4) Implementar o TAD lista no ordenada usando alocao dinmica com
encadeamento CCLICO.

A estrutura de dados dada abaixo:

typedef struct data{


char nome[30];
float CRA;
int matricula;
} DATA;

struct no{
DATA info;
Struct no* prox;
};

typedef struct no Lista;

Operaes que o TAD deve contemplar:

. Inicializar lista
. Verificar lista vazia
. Inserir novo elemento no final da lista
. Remover um dado elemento do incio da lista
. Inserir em uma dada posio: insira o elemento de entrada em uma
posio definida pela na entrada.

Obs.: importante verificar se a posio valida.

. Remove elemento de uma dada posio: remover o elemento que se encontra


na posio especificada na entrada.
Obs.: Se a posio no existir na lista, retorne mensagem de falha na
tela.

. Tamanho: retorna o nmero de elementos da lista

. Maior: retorna o valor do maior CRA da lista.

. Remover todos os alunos cujo nome comea com a letra A.

5) Implementar o TAD lista ordenada usando alocao dinmica com


encadeamento duplo. Adapte a estrutura do item 4 para este problema.
Operaes que o TAD deve contemplar:

. Inicializar lista;
. Verificar lista vazia;
. Inserir um novo nodo na lista;
. Remover um nodo que contenha um dado nome;
. Tamanho: retorna o nmero de elementos da lista;
. Mdia: retornar a mdia aritmtica simples dos CRAs da lista;
. Remover todos: remove todas as ocorrncias de um dado valor de CRA em
uma lista;
. Remover maior: remove da lista o nodo que contem o maior CRA.

Obs.: Remover todas as ocorrncias deste elemento.

6) Implementar o problema de Josephus utilizando o TAD lista com


encadeamento cclico. Defina a estrutura de dados para resolver esse
problema.

Problema: um grupo de soldados est cercado pelo inimigo e existe apenas


um cavalo para a fuga. Decidiu-se que o soldado que se salvar ser
definido na sorte, independente da patente. O processo de escolha ser
por eliminao, sendo que o ltimo soldado a ser selecionado se salvaria.
O processo de eliminao consiste em: organizar os soldados em volta da
fogueira; escolher um soldado para iniciar a contagem e sortear um nico
nmero. Ao final da contagem, o soldado escolhido eliminado e o
processo reiniciado a partir do prximo soldado, at s restar o
soldado ganhador.

Entradas:

. Nomes dos soldados que esto cercados


. Opo de incio de contagem:

(1) Iniciar contagem a partir do primeiro soldado da lista.

(2) Iniciar contagem a partir de um soldado sorteado aleatoriamente da


lista.

(3) Informar o nome do soldado para iniciar a contagem.

Sadas:

. No caso da opo de contagem (2), imprimir o nome do soldado sorteado.


. Imprimir o nmero sorteado.
. Imprimir os nomes dos soldados eliminados, na ordem de eliminao.
. Imprimir o nome do soldado sobrevivente.

7) Implementar um programa para manipulao de polinmios do tipo

Para tal, o polinmio deve ser armazenado usando uma lista ordenada,
sendo que cada elemento i da lista deve armazenar o n-simo termo do
polinmio (diferente de 0), e deve conter o valor da potncia de
(inteiro) e o coeficiente correspondente (inteiro). Por
exemplo, o polinmio:

deve ser representado pela lista:

Fica a critrio do aluno a escolha da tcnica de implementao, tanto em


relao forma de alocao, quanto forma de agrupamento. A utilizao
de nodo descritor, encadeamento cclico/simples/duplo tambm fica a
critrio do aluno. Deve ser criada uma interface que permita ao usurio
executar qualquer uma das operaes a seguir, a qualquer momento:

. Inicializar um polinmio.

. Inserir um novo termo no polinmio existente.

Se j existe um termo no polinmio, o valor do coeficiente do novo termo


deve ser adicionado ao j existente, assim:

. Imprimir P(x)

Se o polinmio for

a sua representao interna ser:

A seguinte expresso dever ser visualizada na tela: +7 -3x^2 +2x^5

. Eliminar o termo associado n-sima potncia.

Se o polinmio atual for


como no exemplo anterior, e o usurio solicitar a remoo do termo
associado potncia 2 de x, o polinmio resultante ser P(x) = 2x5+7,e o
n referente potncia de deve ser liberado resultando na estrutura:

. Reinicializar um polinmio.

Fazer P(x)=0x0 e liberar os ns do P(x) anterior.

. Calcular o valor de P(x) para um dado valor de x.

Por exemplo, se o polinmio atual for

e o usurio solicitar o clculo de P( x) para x = 2 , o valor de P(2)


deve ser calculado: P(2)= 2*26 2*24 + 23 + 5*2 + 2 = 180 e o resultado
deve ser apresentado na tela.

8) Escreva uma funao Quebra para o TAD lista duplamente encadeada


circular com n cabealho, que recebe um valor X que pertence lista e
devolve uma lista duplamente encadeada circular com os elementos a partir
de X, como mostrado na figura abaixo.
9) Escreva um algoritmo que recebe uma lista simplesmente encadeada e
inverte essa lista, alterando somente os campos dos ponteiros e sem usar
listas auxiliares.

Você também pode gostar