Ficha Nº7
Exercício Nº1
2008.04.21

Listas em Memória "Estática"


Relembre o exercício realizado na última aula teórica onde se implementou uma lista de alunos através de um array em C. Os alunos são armazenados pela ordem em que chegam no entanto o acesso à informação quer-se feito por ordem alfabética de nome. Para isso, acrescentou-se um campo adicional ao aluno que permite criar uma ordenação lógica entre alunos.

Os tipos de dados definidos na aula para modelar o problema foram os seguintes:
#define MAXALUNO 100
	    		
typedef struct sAluno
  {
    char * nome;
    int idade;
    int prox;
  } Aluno;
	    	
typedef struct sListAluno
  {
    int cabeca; /* -- cabeça da lista -- */
    int livre;  /* -- primeira posição livre -- */
    Aluno lista[MAXALUNO];
    } ListAluno;

Tomaram-se as seguntes decisões:

Depois de analisar bem os tipos de dados definidos (faça um esquema com alguns elementos de informação), atente no seguinte esqueleto de programa:
int main()
  {
    Aluno a1 = {"Carlos", 17, -1},
          a2 = {"Ana", 19, -1},
          a3 = {"Zulmira", 18, -1},
          a4 = {"Paulo", 18, -1},
          a5 = {"David", 19, -1};
    ListAluno l1;
    int i;
	    	
    l1 = initLista(l1);
    l1 = insereAluno(l1, a1);
    l1 = insereAluno(l1, a2);
    l1 = insereAluno(l1, a3);
    l1 = insereAluno(l1, a4);
    l1 = insereAluno(l1, a5);
	    	
    listAluno(l1);
    i = procuraAluno(l1, "Ana");
    consultAluno(l1, i);
    }

Desenvolva, ao longo das alíneas seguintes, as funções necessárias para colocar o programa a funcionar:

(a)A função de inicialização que deverá inicializar uma estrutura do tipo ListAluno:

ListAluno initLista(ListAluno l);

(b)A função de procura que dada uma lista e um nome dá como resultado o índice onde esse aluno se encontra na lista (devolve -1 se o aluno não pertencer à lista):

int procuraAluno(ListAluno l, char* nome);

(c)A função de consulta que dada uma lista e um índice, escreve no monitor a informação relativa ao aluno armazenado nesse índice:

void consultAluno(ListAluno l, int indice);

(d)A função de inserção que recebe uma lista e um aluno e coloca o aluno na lista actualizando o índice (campo próximo) e devolvendo uma nova lista alterada:

ListAluno insereAluno(ListAluno l, Aluno a);

(e)A função de listagem que recebendo uma lista produz uma listagem ordenada alfabeticamente por nome dos alunos presentes na lista:

void listAluno(ListAluno l);

(f)A função de remoção que dada uma lista e um nome remove o respectivo aluno da lista devolvendo a lista alterada:

ListAluno removeAluno(ListAluno l, char *nome);