UNIVERSIDADE FEDERAL DO ESPÍRITO SANTO
CENTRO UNIVERSITÁRIO NORTE DO ESPÍRITO SANTO
Disciplina: Programação II
Professor: Renato E. N. de Moraes
Aluno:
Turma: 2EPR
Data: 08/11/2011
Semestre: 2011-2 Valor: X%
Lista de Exercı́cios 07
Nota:
(07.31) Considere a implementação de uma lista encadeada para armazenar números inteiros
dada pelo tipo abaixo:
struct lista {
int info;
struct lista* prox;
};
typedef struct lista Lista;
Implemente uma função que receba duas listas e teste se a segunda lista é uma sub- lista da
primeira, isto é, se a seqüência de valores armazenados na segunda lista aparece exatamente
da mesma forma em algum ponto da primeira lista. A função deve retornar 1 para o caso
da segunda lista ser uma sub-lista da primeira e zero no caso contrário, e deve ter o seguinte
protótipo: int sublista (Lista* l1, Lista* l2);
(07.32) Considere uma lista encadeada que armazena strings. O tipo que representa cada nó da
lista é dado por:
struct lista {
char* str; /* string armazenada */
struct lista* prox; /* ponteiro para próximo elemento */
};
typedef struct lista Lista;
Escreva uma função que receba como parâmetros uma lista encadeada e uma string, e retire da
lista todos os nós que armazenam uma string igual àquela passada como parâmetro. A função
deve ter como valor de retorno o ponteiro para o primeiro nó da lista resultante. O protótipo
dessa função é dado por: Lista* retira (Lista* l, char* n);
(07.33) Considere uma lista encadeada que representa um conjunto de alunos. O tipo que representa cada nó da lista é dado por:
struct lista {
int mat; /* número de matrı́cula */
char nome[81]; /* nome do aluno */
struct lista* prox; /* ponteiro para próximo elemento */
};
typedef struct lista Lista;
Escreva uma função que retire um aluno da lista. A função deve receber como parâmetro o
ponteiro para o primeiro nó da lista e o nome do aluno a ser retirado, e deve ter como valor de
retorno o ponteiro para o primeiro nó da lista após a retirada do aluno. Considere que não há
nomes repetidos na lista. O protótipo dessa função é dado por: Lista* retira (Lista* l,
char* n);
(07.34) Considere a implementação de uma lista encadeada para armazenar as médias dos alunos
de uma turma. O tipo que representa a lista é dado a seguir:
struct lista {
char nome[81];
float media;
struct lista *prox;
};
typedef struct lista Lista;
Assumindo que a lista está em ordem alfabética pelo nome do aluno, escreva uma função para
inserir um novo elemento na lista que mantenha essa ordenação (considere que todos os nomes
estão em letras minúsculas). O protótipo da função deve ser: Lista* insere (Lista* l,
Centro Universitário Norte do Espı́rito Santo
Rodovia BR 101 Norte, Km 60, Bairro Litorâneo, CEP: 29.932-540, São Mateus – ES
Tel.: +55 (27) 3312.1511, Fax.: +55 (27) 3312.1510
Sı́tio eletrônico: http://www.ceunes.ufes.br/
UNIVERSIDADE FEDERAL DO ESPÍRITO SANTO
CENTRO UNIVERSITÁRIO NORTE DO ESPÍRITO SANTO
char* nome, float media);
(07.35) Considere a implementação de listas encadeadas para armazenar inteiros dada pelo tipo
abaixo:
struct lista {
int info;
struct lista* prox;
};
typedef struct lista Lista;
Escreva uma função que receba como entrada duas listas, L e M , e remova da lista L todos os
elementos que também pertençam à lista M , devolvendo a lista L modificada. A função deve
obedecer ao protótipo: Lista* dif (Lista* L, Lista* M); Assuma que:
1. Em cada uma das listas não ocorrem elementos duplicados.
2. Cada uma das listas, ou ambas, podem ser vazias.
(07.36) Dada uma lista encadeada de números inteiros cujo tipo que representa um nó da lista
é dado por:
struct lista {
int info;
struct lista *prox;
};
typedef struct lista Lista;
Implemente uma função que receba uma lista encadeada do tipo Lista e retorne um vetor de
números inteiros, alocado dinamicamente, contendo as informações presentes na mesma ordem
que na lista, e o número de elementos neste vetor. Assim, se for recebida a lista
será retornado o vetor {1, 89, 54, 5} e o número de elementos igual a 4. Se a lista for vazia, o
vetor retornado deverá ser NULO (NULL) e o número de elementos igual a 0. O protótipo da
função é dado por: int* Copia_Lista(Lista* L, int* n);
(07.37) Dada uma lista encadeada que armazena a média dos alunos de uma turma, cujo tipo
que representa um nó da lista é dado por:
struct tipo_al {
int Mat;
char Nome[81];
float Media;
};
typedef struct tipo_al Aluno;
struct Lista {
Aluno info;
struct lista *prox;
};
typedef struct lista Lista;
Observe que cada nó da lista possui como informação a estrutura correspondendo aos dados
alunos. Implemente uma função que receba uma lista encadeada do tipo Lista e retorne uma
nova lista dos alunos aprovados, ou seja, os alunos com Media ≥ 7.0. O protótipo da função é
dado por: Lista* Copia_Aprovados (Lista* L);
Observação: a Lista L deverá permanecer inalterada.
Centro Universitário Norte do Espı́rito Santo
Rodovia BR 101 Norte, Km 60, Bairro Litorâneo, CEP: 29.932-540, São Mateus – ES
Tel.: +55 (27) 3312.1511, Fax.: +55 (27) 3312.1510
Sı́tio eletrônico: http://www.ceunes.ufes.br/
UNIVERSIDADE FEDERAL DO ESPÍRITO SANTO
CENTRO UNIVERSITÁRIO NORTE DO ESPÍRITO SANTO
Considere para as próximas duas questões um cadastro dos livros em estoque de uma livraria
armazenado como uma lista encadeada em que cada elemento é do tipo Livro descrito a seguir:
struct livro {
int cod;
char titulo[81];
int quant;
struct livro* prox;
};
typedef struct livro Livro;
Observe que Livro corresponde a um tipo estruturado em que o campo cod é um inteiro que
armazena o código exclusivo do livro, o campo titulo é uma cadeia de caracteres com o tı́tulo
do livro, o campo quant é um inteiro que armazena a quantidade de exemplares daquele tı́tulo
em estoque e o campo prox aponta para o próximo elemento de uma lista encadeada.
(07.38) Implemente uma função que busca um livro na lista a partir de seu código. A função
recebe como parâmetros o ponteiro l para o inı́cio da lista e o inteiro cod, contendo o código
do livro que se deseja localizar, e deve retornar o ponteiro para o livro, se este for encontrado,
ou NULL, caso contrário. A função tem como protótipo: Livro* busca(Livro* l, int cod);
(07.39) Implemente uma função para inserir a quantidade de um determinado livro no estoque. A
função deve receber como parâmetros o ponteiro l para o inı́cio da lista, o inteiro cod, contendo
o número de código do livro, o ponteiro titulo, para a cadeia de caracteres contendo o tı́tulo
do livro, e o inteiro quant, indicando o número de exemplares e proceder da seguinte maneira:
• caso o livro com este código seja encontrado na lista, adicionar esta quanti- dade ao valor
já existente na lista;
• se o livro não existir na lista, ele deve ser inserido como um novo elemento no inı́cio da
lista, tendo seus campos preenchidos com os valores fornecidos como parâmetros.
A função deve retornar o ponteiro para o inı́cio da lista atualizado e seu protótipo é dado por:
Livro* insere (Livro* l, int cod, char* titulo, int quant);
(07.40) Considere uma estrutura de lista duplamente encadeada que armazenam valores inteiros.
O tipo que representa um nó da lista é dado por:
struct lista_d {
int info;
struct lista_d* prox;
struct lista_d* ant;
};
typedef struct lista_d Lista_d;
Escreva uma função que recebe como parâmetro o ponteiro para o primeiro nó da lista duplamente encadeada L e um número n, retornando uma nova lista resultante da movimentação do
enésimo elemento da lista para a primeira posição da lista. Seja a lista
e n igual a 3, após a execução da função será retornado a lista:
Centro Universitário Norte do Espı́rito Santo
Rodovia BR 101 Norte, Km 60, Bairro Litorâneo, CEP: 29.932-540, São Mateus – ES
Tel.: +55 (27) 3312.1511, Fax.: +55 (27) 3312.1510
Sı́tio eletrônico: http://www.ceunes.ufes.br/
UNIVERSIDADE FEDERAL DO ESPÍRITO SANTO
CENTRO UNIVERSITÁRIO NORTE DO ESPÍRITO SANTO
O protótipo da função é dado por: Lista_d* Altera_Pos(Lista_d* L, int n);
Observação: Se n for maior que o número de nós da lista ou se n for menor ou igual a 0, a lista
deve ser retornada inalterada.
Centro Universitário Norte do Espı́rito Santo
Rodovia BR 101 Norte, Km 60, Bairro Litorâneo, CEP: 29.932-540, São Mateus – ES
Tel.: +55 (27) 3312.1511, Fax.: +55 (27) 3312.1510
Sı́tio eletrônico: http://www.ceunes.ufes.br/
Download

struct lista - Renato EN Moraes