Exercícios

Considere uma lista simplesmente ligada de strings que obedece à seguinte definição:

typedef struct node *link;

typedef char* Item;

struct node { 
        Item item; 
        link next; 
}; 

1. Implemente as seguintes funções para manipulação de items:

a) Item newItem (Item i);

A função newItem devolve um novo Item que é uma cópia do argumento.

b) int itemCompare (Item i1, Item i2);

A função itemCompare devolve 0 se os items são iguais. Devolve um valor positivo se i1 > i2 ou um valor negativo caso contrário.

c) void showItem (Item i);

A função showItem mostra o item i no standard output.

d) void deleteItem (Item i);

Liberta a memória associada ao item.

2. Implemente a função link insertSorted(link head, Item i) que insere o Item i de forma ordenada na lista cujo primeiro elemento é apontado por head. A função deverá devolver o primeiro elemento da lista. A ordenação deverá ser crescente. Use as funções do exercício anterior.

3. Implemente a função void show(link head) que mostra no standard output o conteúdo da lista cujo primeiro elemento é apontado por head. Use as funções do exercício 1. 

4. Implemente a função int search(link head, Item i) que devolve 1 se o item i estiver na lista ou 0 caso contrário. 

5. Implemente a função link remove(link head, Item i) que remove da lista a primeira ocorrência do Item i.

6. Faça um programa que insira numa lista todos os argumentos fornecidos na linha de comandos, e que podem ser obtidos através da tabela argv. De seguida, mostre o conteúdo da lista.

7. Defina que o tipo Item é um inteiro. Modifique as funções do exercício 1 de acordo com a nova definição e resolva os exercícios 2 a 5.