Programação de Baixo Nível
Exercício sobre Lista encadeadas
Exercício I
Dada uma struct capaz de armazenar os dados de uma pessoa:
typedef struct temp {
char nome[100];
int idade;
struct temp* prox;
} TPESSOA;
Dada uma variável global que aponta o inicio de uma lista de pessoas:
TPESSOA *inicio;
Considere a seguinte função de impressão:
#include <stdio.h>
void imprimeLista(TPESSOA* start)
{
TPESSOA* aux;
aux = start;
if (start == NULL) {
printf("Lista Vazia !\n");
return; // encerra o método aqui
}
printf("----- INICIO DA LISTA -----\n");
while(aux != NULL) {
printf("Nome: %s - Idade: %d\n", aux->nome, aux->idade);
aux = aux->prox;
}
}
E crie as seguintes funções:
void InsereNoInicio(int idade, char *nome);
int BuscaNome(char * nome, int *idade); // retorna 1 se achar e 0 se não achar
void InsereNoFinal(int idade, char *nome);
void InsereEmOrdemDeNome(int idade, char *nome);
int Remove(char *nome); // retorna 1 se achar e 0 se não achar
Exercício II
Crie uma lista de ponteiros para objetos do tipo TPessoa, de forma que esta lista crie uma ordenação para a lista de pessoas da questão anterior.
typedef struct temp
{
TPESSOA *info;
struct temp *prox;
}TNODO;
TNODO* ListaOrdenada;
void InserePessoaEmOrdem(TPESSOA* aux)
{
// Esta função deve cria um TNODO e colocá-lo em uma lista
// de acordo com a ordem que se deseja para os objetos
// da lista de pessoas
// Note que neste ponte assume-se que a lista de pessoas já existe.
}
void InserePessoas(TPESSOA* start)
{
TPESSOA* aux;
aux = start;
if(start == NULL) {
printf("Lista Vazia !\n");
return; // encerra o método aqui
}
printf("----- INICIO DA LISTA -----\n");
while(aux != NULL) {
InserePessoaEmOrdem(aux);
aux = aux->prox;
}
}
FIM.