Você está na página 1de 3

Disciplina: Estrutura de Dados I Professor: Alex Sandro C.

Rego

OPERAES COM LISTAS SEQUENCIAIS Verso 1


Definio da Estrutura de Dados do tipo LISTA // Numero maximo de ns da lista #define MAX_ELEM 10 // Definicao da estrutura da lista typedef struct { int elemento[MAX_ELEM]; // vetor que vai armazenar os elementos da lista int posAtual; // posicao do ultimo elemento da lista } tlista; Criar lista void criaLista( tlista *lst) { lst->posAtual = 0; } Verificar se a lista est vazia int vazia( tlista lst) { return (lst.posAtual == 0); } Verificar se uma lista est cheia int cheia( tlista lst) { return (lst.posAtual == MAX_ELEM); } Obter o tamanho de uma lista int tamanho( tlista lst) { return (lst.posAtual); } Obter o i-simo elemento de uma lista /* Proposito: Obter o i-esimo elemento da lista Parametros: lst - A lista que vai ser pesquisada posicao - posicao na lista pela qual se deseja obter o elemento dado - passagem por referencia que vai receber o elemento encontrado Retorno: 0 : Se a posicao for invalida 1 : Se a posicao for valida */ int elemento( tlista lst, int posicao, int *dado) { if ( posicao > tamanho (lst) || posicao < 1) return (0); else { *dado = lst.elemento[ posicao - 1 ]; return (1); } }

Pesquisando um determinado elemento, retornando sua posio /* Proposito: Pesquisar um determinado elemento, retornando sua posicao */ int busca ( tlista lst, int dado) { int posicaoRetorno; for (posicaoRetorno = 1; posicaoRetorno <= lst.posAtual; posicaoRetorno++) if ( lst.elemento[posicaoRetorno-1] == dado) return(posicaoRetorno); return(0); } Insero de um elemento em uma determinada posio /* Proposito: Insercao de um elemento em uma determinada posicao Requer o deslocamento `a direita dos elementos v(i+1)...v(n) Retorno: 0 : se a posicao for invalida ou se a lista estiver cheia 1 : se a operacao for bem sucedida Obs: Debater sobre o teste do tamanho */ int inserir ( tlista *lst, int posicao, int dado) { int i; if ( (cheia(*lst)) || (posicao > tamanho(*lst)+1 ) || posicao < 1) return (0); else { // deslocando a direita for (i = lst->posAtual; i>=posicao; i--) lst->elemento[i] = lst->elemento[i-1]; lst->elemento[posicao-1] = dado; (lst->posAtual)++; return(1); } } Remoo do elemento armazenando em uma determinada posio /* Proposito: Remocao do elemento de uma determinada posicao. Requer o deslocamento `a esquerda dos elementos v(i+1)...v(n) Retorno: 0 : se a posicao for invalida 1 : se a operacao for bem sucedida Obs: Deveria ser feito o teste da lista vazia */ int remover ( tlista *lst, int posicao, int *dado) { int i; if ( posicao > tamanho(*lst) || posicao < 1) return (0); else { *dado = lst->elemento[posicao-1]; // deslocando a esquerda for (i = posicao; i<= (lst->posAtual)-1; i++) lst->elemento[i-1] = lst->elemento[i]; (lst->posAtual)--; return(1); } }

Imprimindo o contedo da lista /* Proposito: Imprimir o contedo atual de uma lista sequencial */ void imprime ( tlista lst ) { if ( !vazia(lst) ) { int i; for (i=0; i< lst.posAtual; i++ ) printf(%d , lst.elemento[i] ); printf(\n); } }

Você também pode gostar