Você está na página 1de 3

Universidade​ ​Tecnológica​ ​Federal​ ​do​ ​Paraná

Campus​ ​Campo​ ​Mourão​ ​-​ ​DACOM


Prof.​ ​Marcos​ ​Silvano
LT33B​ ​–Estruturas​ ​de​ ​Dados

Exercícios​ ​04​ ​_​ ​Listas​ ​Sequenciais

Instruções​ ​Gerais:
● Implemente​ ​o​ ​programa​ ​abaixo​ ​em​ ​um​ ​novo​ ​projeto.
o Finalizado​ ​o​ ​trabalho,​ ​compacte​ ​em​ ​zip​ ​e​ ​o​ ​envie​ ​pelo​ ​Moodle.
● Você​ ​pode​ ​utilizar​ ​o​ ​projeto​ ​da​ ​aula​ ​como​ ​base,​ ​alterando​ ​a​ ​estrutura​ ​e​ ​as​ ​operações.

Lista​ ​Sequencial
Implemente​ ​as​ ​operações​ ​abaixo​ ​em​ ​uma​ ​Lista​ ​Sequencial​ ​Estática.

//​ ​Insere​ ​elemento​ ​em​ ​uma​ ​dada​ ​posição​ ​da​ l​ ista,​ ​abrindo​ ​espaço​ ​para​ ​o​ ​mesmo
//​ ​Retorna:​ ​0​ ​para​ ​sucesso​ ​e​ ​-1​ ​para​ ​erro
int​​ ​listInsertAt(List*​ ​list,​ ​int​​ ​pos,​ ​int​​ e ​ )

//​ ​Remove​ ​elemento​ ​de​ ​uma​ ​dada​ ​posição​ ​da​ ​lista,​ ​fechando​ ​o​ ​espaço​ ​resultante
//​ ​Retorna:​ ​0​ ​para​ ​sucesso​ ​e​ ​-1​ ​para​ ​erro
int​​ ​listRemoveAt(List*​ ​list,​ ​int​​ ​pos)

//​ ​Insere​ ​elemento​ ​de​ ​forma​ ​ordenada​ ( ​ crescente)​ ​na​ ​lista


//​ ​Retorna:​ ​0​ ​para​ ​sucesso​ ​e​ ​-1​ ​para​ e​ rro
int​​ ​listInsertSorted(List*​ ​list,​ ​int​​ e ​ )

Lista​ ​Sequencial​ ​Esparsa


Em uma Lista Sequencial Esparsa as remoções de elementos deixam “buracos”: espaços disponíveis marcados com
-1 no array ​data​. A operação de inserção deve procurar sequencialmente o próximo espaço disponível no array
(marcado com -1) para poder adicionar um novo elemento à lista. A operação de remoção apenas marca a posição
com​ ​-1.
Observações:
● Esta lista somente permite a inserção de números inteiros positivos, uma vez que -1 é usado para controle de
espaços​ ​disponíveis.
● O controle de espaços disponíveis (-1) elimina a necessidade do controle pelo campo ​size​. Logo, ele não está
presente​ ​na​ ​estrutura​ ​List​.
Considerando​ ​informações​ ​fornecidas,​ ​implemente​ ​a​ ​TAD​ ​Lista​ ​Sequencial​ ​Esparsa​ ​e​ ​as​ ​operações​ ​solicitadas​ ​abaixo.

struct​​ ​List​ ​{
​ ​ ​ ​ ​static​​ ​const​​ ​int​​ ​MAX​ ​=​ ​10​;​ ​ ​//​ ​capacidade​ ​máxima​ ​da​ ​lista
​ ​ ​ ​ ​int​ ​data​[​MAX​];
};

//​ ​Cria​ ​lista​ ​e​ ​prepara​ ​array​ ​(todas​ ​as​ ​posições​ ​recebem​ ​-1,​ ​pois​ ​estão​ ​vazias)
List​*​ ​listCreate​();

//​ ​Devolve​ ​a​ ​quantidade​ ​de​ ​posições​ ​não​ ​vazias,​ ​isto​ ​é,​ ​diferentes​ ​de​ ​-1
int​​ ​listSize​(​List​*​ ​list​);

//​ ​Insere​ ​elemento​ ​na​ ​próxima​ ​posição​ ​disponível​ ​da​ ​lista​ ​(marcada​ ​com​ ​-1)
int​​ ​listInsert​(​List​*​ ​list​,​ ​int​ ​e​);
//​ ​Procura​ ​e​ ​remove​ ​o​ ​elemento​ i ​ nformado​.​ ​Marca​ ​posição​ ​com​ ​-1​ ​(disponível)
int​​ ​listRemove​(​List​*​ ​list​,​ ​int​​ e​ ​);

//​ ​Imprime​ ​todos​ ​os​ ​elementos​ ​na​ ​lista​ ​(incluindo​ ​as​ ​posições​ ​vazias)
void​​ ​listPrint​(​List​*​ ​list​);

//​ ​Move​ ​os​ ​elementos​ ​para​ ​a​ ​esquerda​ ​de​ ​forma​ ​a​ ​eliminar​ o
​ s​ ​espaços​ v​ azios​ ​(-1)
//​ ​entre​ ​os​ ​mesmos.​ ​Ao​ ​final,​ ​todos​ ​os​ ​elementos​ ​estarão​ à ​ ​ ​esquerda​ e​ ​ ​os​ ​espaços
//​ ​vazios,​ ​a​ ​direita.
void​​ ​listDefrag​(​List​*​ ​list​);
Exemplo​ ​de​ ​uso​ ​da​ ​Lista​ ​Sequencial​ ​Esparsa

List*​ ​l​ ​=​ ​listCreate();

listPrint(l);

//​ ​[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1]

listInsert(l,​ ​4);
listInsert(l,​ ​5);
listInsert(l,​ ​2);
listInsert(l,​ ​8);
listInsert(l,​ ​3);
listInsert(l,​ ​7);

listPrint(l);

//​ ​[​ ​4,​ ​5,​ ​2,​ ​8,​ ​3,​ ​7,-1,-1,-1,-1]

listRemove(l,​ ​4);

listPrint(l);

//​ ​[-1,​ ​5,​ ​2,​ ​8,​ ​3,​ ​7,-1,-1,-1,-1]

​ );
listRemove(l,​ 2
listRemove(l,​ 8​ );

listPrint(l);

//​ ​[-1,​ ​5,-1,-1,​ ​3,​ ​7,-1,-1,-1,-1]

listDefrag(l);

listPrint(l);

//​ ​[​ ​5,​ ​3,​ ​7,-1,-1,-1,-1,-1,-1,-1]

Você também pode gostar