Pular para o conteúdo principal

Exercícios De Estrutura de Dados Resolvidos.


Por Ariadne Costa Gomes

1.      Para que serve uma lista? 
  Uma lista serve para interligar os elementos de um conjunto.
2.      Quais operações podem ser realizadas com uma lista?
Podem ser realizadas com uma lista as seguintes operações: Inserir, Retirar e Localizar.
3.      Descreva sua facilidade durante a execução de um programa.
As listas são estruturas muito flexíveis, porque podem crescer sem diminuir de tamanho durante a execução de um programa, de acordo com a demanda.
4.      Como podem ser as operações com os itens na lista?
Itens podem ser acenados, inseridos ou retirados de uma lista.
5.      O que pode ser feito com uma lista muito grande ou duas listas pequenas?
Duas listas podem ser concatenadas para formar uma lista única, assim como uma lista pode ser partida em duas ou mais listas.
6.      Quando é aconselhável o seu uso?
Listas são adequadas para aplicações nas quais não é possível prever a demanda por memória, permitindo a manipulação de quantidades imprevisíveis de dados, de formato também imprevisível.
7.      Em que são úteis às listas?
Listas são úteis em aplicações tais como manipulação simbólica, gerência de memória, simulação e compiladores.
8.      Como é feita a definição em uma lista?
Uma lista linear é uma sequência de zero ou mais itens, x1, x2....,xn, na qual x1 é de um determinado item e xn representa o tamanho da lista linear.
9.      Descreva sua propriedade principal:
Sua principal propriedade estrutural envolve as posições relativas dos itens em uma dimensão. Assumindo n>=1, x1 é o primeiro item da lista e xn é o último item da lista.
– xi precede xi+1 para i = 1, 2, · · · , n − 1
– xi sucede xi−1 para i = 2, 3, · · · , n
– o elemento xi é dito estar na i-ésima posição da lista.
10.   Das várias estruturas que podem ser utilizadas, quais estudamos?
Listas Lineares.
11.   Descreva sobre os cinco pontos relacionados à implementação de uma lista.
1. FLVazia(Lista). Faz a lista ficar vazia.
2. Insere(x, Lista). Insere x após o último item da lista.
3. Retira(p, Lista, x). Retorna o item x que está na posição p da lista,
retirando-o da lista e deslocando os itens a partir da posição p+1
para as posições anteriores.
4. Vazia(Lista). Esta função retorna true se lista vazia; senão retorna
false.
5. Imprime(Lista). Imprime os itens da lista na ordem de ocorrência.
12.   Escreva a estrutura necessária para implementação de uma lista com arranjo.
Os itens são armazenados em
um array de tamanho suficiente
para armazenar a lista.
• O campo Último aponta para a
posição seguinte a do último ele-
mento da lista.
• O i-ésimo item da lista está arma-
zenado na i-ésima posição do ar-
ray, 1 ≤ i <Último.
• A constante MaxTam define o ta-
manho máximo permitido para a
lista.

13.  Escreva as funções utilizadas para operar sobre a lista.
void FLVazia(TipoLista Lista)
{ Lista−>Primeiro = INICIOARRANJO; Lista−>Ultimo = Lista−>Primeiro ; }
int Vazia(TipoLista Lista)
{ return ( Lista .Primeiro == Lista .Ultimo ) ; } / Vazia /
void Insere(TipoItem x , TipoLista Lista)
{ i f ( Lista −> Ultimo > MAXTAM)
pr int f ( "Lista esta cheia\n" ) ;
else { Lista −> Item[ Lista −> Ultimo − 1] = x;
Lista −> Ultimo++;
}
} / Insere /
void Retira(TipoApontador p, TipoLista Lista , TipoItem Item)
{ int Aux;
i f (Vazia(Lista ) | | p >= Lista > Ultimo)
{ pr int f ( "Erro : Posicao nao existe \n" ) ;
return;
} Item = Lista −> Item[p − 1];
Lista −> Ultimo−−;
for (Aux = p; Aux < Lista −> Ultimo ; Aux++)
Lista −> Item[Aux − 1] = Lista −> Item[Aux] ;
} / Retira /
void Imprime(TipoLista Lista)
{ int Aux;
for (Aux = Lista .Primeiro − 1; Aux <= (Lista .Ultimo − 2); Aux++)
pr int f ( "%d\n" , Lista . Item[Aux] .Chave) ;
} / Imprime /
14.  Escreva as vantagens de utilizar listas com arranjos.
Economia de memória (os apontadores são implícitos
nesta estrutura).
15.  Escreva as desvantagens de utilizar listas com arranjos.
– custo para inserir ou retirar itens da lista, que pode causar um
deslocamento de todos os itens, no pior caso;
– em aplicações em que não existe previsão sobre o crescimento da
lista, a utilização de arranjos em linguagens como o Pascal pode
ser problemática porque nesse caso o tamanho máximo da lista
tem de ser definido em tempo de compilação.
16.  Descreva a implementação de listas com apontadores.
• Cada item é encadeado com o seguinte mediante uma variável do tipo
Apontador.
• Permite utilizar posições não contíguas de memória.
• É possível inserir e retirar elementos sem necessidade de deslocar os
itens seguintes da lista.
• Há uma célula cabeça para simplificar as operações sobre a lista.
17.  Escreva as estruturas necessárias para implementar listas com apontadores.


typedef int TipoChave;
typedef struct {
TipoChave Chave;
/ outros componentes /
} TipoItem;
typedef struct TipoCelula TipoApontador ;
typedef struct TipoCelula {
TipoItem Item;
TipoApontador Prox;
} TipoCelula;
typedef struct {
TipoApontador Primeiro , Ultimo;
} TipoLista;
• A lista é constituída de células.
• Cada célula contém um item da
lista e um apontador para a cé-
lula seguinte.
• O registro TipoLista contém um
apontador para a célula cabeça
e um apontador para a última cé-
lula da lista.


18.  Escreva as funções necessárias para trabalha com listas utilizando apontadores.
void FLVazia(TipoLista Lista)
{ Lista−>Primeiro = (TipoApontador ) malloc(sizeof (TipoCelula ) ) ;
Lista−>Ultimo = Lista−>Primeiro ; Lista−>Primeiro−>Prox = NULL;
}
int Vazia(TipoLista Lista)
{ return ( Lista .Primeiro == Lista .Ultimo ) ; }
void Insere(TipoItem x , TipoLista Lista)
{ Lista−>Ultimo−>Prox = (TipoApontador ) malloc(sizeof (TipoCelula ) ) ;
Lista−>Ultimo = Lista−>Ultimo−>Prox; Lista−>Ultimo−>Item = x;
Lista−>Ultimo−>Prox = NULL;
}
void Retira(TipoApontador p, TipoLista Lista , TipoItem Item)
{ /−−O item a ser retirado e o seguinte ao apontado por p−−/
TipoApontador q;
i f (Vazia(Lista ) | | p == NULL | | p>Prox == NULL)
{ pr int f ( " Erro : Lista vazia ou posicao nao existe \n" ) ;
return;
}
q = p−>Prox; Item = q>Item; p>Prox = q>Prox;
i f (p−>Prox == NULL) Lista−>Ultimo = p;
free(q) ;
}
void Imprime(TipoLista Lista)
{ TipoApontador Aux;
Aux = Lista .Primeiro−>Prox;
while (Aux != NULL)
{ pr int f ( "%d\n" , Aux −>Item.Chave) ; Aux = Aux −>Prox ; }
}
19.  Quais as vantagens de utilizar listas com apontadores?
– Permite inserir ou retirar itens do meio da lista a um custo constante
(importante quando a lista tem de ser mantida em ordem).
– Bom para aplicações em que não existe previsão sobre o
crescimento da lista (o tamanho máximo da lista não precisa ser
definido a priori).
20.  Qual a desvantagem de utilizar listas com apontadores?
Utilização de memória extra para armazenar os apontadores.

Comentários

+ Vistas

Mais uma inovação da Google.

Sabe aqueles filmes em que um cientista possui um laboratório secreto onde faz seus experimentos mais malucos? O Google tem algo parecido, chamado "Google X". A operação foi descoberta e mostrada ao mundo neste domingo (13/11) em uma matéria do New York Times. E é de lá que podem sair duas tecnologias com potencial de mudar a forma como conhecemos os carros atualmente. De acordo com o site Electronista, uma fonte que não quis se identificar afirmou que a empresa planeja construir carros que dispensam a necessidade de motoristas. O Google os fabricaria nos EUA e os venderia para empresas locais que queiram eliminar a figura do condutor de seu quadro de funcionários. A outra invenção do Google X é relacionada à robótica. Máquinas poderiam, por exemplo, substituir os motoristas do Google Street View, encarregados de dirigir pelas cidades enquanto o sistema fotografa as ruas. Na equipe do Google X estão Sebastian Thrun, um dos maiores experts em robótica e inteligência a...

Existe uma fórmula padrão de Calculo de Estoque Mínimo e Máximo?

  Na verdade, não existe uma fórmula única e universal para calcular o estoque mínimo e máximo ideal para uma empresa de varejo, pois diversos fatores influenciam esses valores. No entanto, existem algumas fórmulas e métodos básicos que podem te ajudar a estimar esses níveis de forma eficiente, considerando as características específicas do seu negócio. Fórmula básica para o estoque mínimo: Estoque mínimo = Consumo médio diário x Tempo de reposição Essa fórmula leva em conta a quantidade média de produtos que você vende por dia e o tempo que leva para receber novos produtos do seu fornecedor. O objetivo é garantir que você tenha estoque suficiente para atender à demanda durante esse período de reposição, mesmo que haja imprevistos. Fórmula básica para o estoque máximo: Estoque máximo = Estoque médio + Lote de compra Essa fórmula considera o seu estoque médio, que é a quantidade média de produtos que você costuma ter em estoque, e o tamanho do lote de compra que você costuma fazer. ...

Instalando o novo Gnome 3 no Debian 6

Instalando o novo Gnome 3 no Debian 6 (Atualizado) Vi essa dica em um comentário no site  Br-Linux , e como eu testei e deu muito certo, decidi repassar a dica... Atenção: Faça por sua conta e risco, comigo a instalação ocorreu muito bem, mais isso não impede que em outras situações a instalação não ocorra como esperado.  Para instalar o Gnome 3 no Debian 6, vamos usar os repositórios  unstable e experimental, para isso abra um terminal e como root digite: #nano /etc/apt/sources.list  Adicione as linhas a seguir: #Instavel deb http://sft.if.usp.br/debian/ sid main non-free contrib deb-src http://sft.if.usp.br/debian/ sid main non-free contrib #Experimental deb http://sft.if.usp.br/debian/ experimental main non-free contrib deb-src http://sft.if.usp.br/debian/ experimental main non-free contrib  Agora digite ctrl+o e enter para salvar a configuração, e depois digite: #apt-get update    e para instalar: #apt-get install -t ...