Sie sind auf Seite 1von 5

Recredenciada pelo Decreto de 17/10/2005

(Publicado no “Minas Gerais” de 18/10/2005)


Autorizada Pela Portaria do MEC Nº 366 de 12/03/1997 – D.O.U. de 13/03/1997
Faculdade Regional do Vale do Aço – FARV
Rua Salermo n.º 299 – Bethânia – Ipatinga - MG – Fone: (31) 3824 2992

CURSO: Ciência da Computação PERÍODO: 2º TURNO: Noturno


DISCIPLINA: Algoritmos e Estruturas de Dados I
PROFESSOR: Christiano Colen Venancio

Listas Estáticas
#define TAMMAX 10
typedef struct _item Titem;
typedef struct _lista Tlista;

struct _item
{
int chave;
};
struct _lista
{
Titem item[TAMMAX];
int ultimo;
};

void Inicia_lista(Tlista *lista)


{
lista->ultimo = -1;
}

int verifica_lista_vazia(Tlista *lista)


{
if (lista->ultimo == -1)
return(1);
else return(0);
}

UNIPAC – CAMPUS Ipatinga. 1


Algoritmos e Estruturas de Dados I – Prof. Christiano Colen Venancio
void Insere_Elemento(Tlista *lista, Titem item)
{ if (lista->ultimo + 1 == TAMMAX)
printf("lista cheia");
else
{
lista->ultimo++;
lista->item[lista->ultimo] = item;
}
}

void Elimina_Elemento(Tlista *lista, int chave)


{int contador,contador2;
if (verifica_lista_vazia(lista))
printf("erro: Lista vazia")
else
{contador = 0;
while ((contador <= lista->ultimo) && (chave != lista->item[contador].chave))
{ contador++
}
if (contador > lista->ultimo)
printf("Elemento não existe")
else
{
for (contador2=contador; contador2<lista->ultimo;contador2++)
{
lista->item[contador2] = lista->item[contador2+1];
}
lista->ultimo--;
}
}
}

UNIPAC – CAMPUS Ipatinga. 2


Algoritmos e Estruturas de Dados I – Prof. Christiano Colen Venancio
void Imprime_Lista(Tlista *lista)
{ int aux;
for (aux = lista->primeiro; aux<=lista->ultimo; aux++)
{
printf("%d",lista->item[aux].chave);
}
}

void Procura_Elemento(Tlista *lista, int chave)


{ int aux;
aux=0;
while ((aux <= lista->ultimo) && (chave != lista->item[aux].chave))
{
aux++
}
if (aux > lista->ultimo)
printf("Elemento não existe")
else
{
printf("%d",lista->item[aux].chave);
}
}

UNIPAC – CAMPUS Ipatinga. 3


Algoritmos e Estruturas de Dados I – Prof. Christiano Colen Venancio
Listas Dinâmicas
struct lista {
int info;
struct lista* prox;
};
typedef struct lista Lista;

Lista* Inicializa_Lista ( )
{
return NULL;
}

Lista* Insere_Elemento (Lista* l, int i)


{
Lista* novo = (Lista*) malloc(sizeof(Lista));
novo->info = i;
novo->prox = l;
return novo;
}

void Imprime_Lista (Lista* l)


{
Lista* p; /* variável auxiliar para percorrer a lista */
for (p = l; p != NULL; p = p->prox)
printf("info = %d\n", p->info);
}

int verifica_lista_vazia (Lista* l)


{
if (l == NULL)
return 1;
else
return 0;
}

Lista* Procura_Elemento (Lista* l, int v)


{
Lista* p;
for (p=l; p!=NULL; p=p->prox)
if (p->info == v)
return p;
return NULL; /* não achou o elemento */
}

/* função Elimina elemento da lista */


Lista* Elimina_Elemento (Lista* l, int v)
{
Lista* ant = NULL; /* ponteiro para elemento anterior */
Lista* p = l; /* ponteiro para percorrer a lista*/
/* procura elemento na lista, guardando anterior */
UNIPAC – CAMPUS Ipatinga. 4
Algoritmos e Estruturas de Dados I – Prof. Christiano Colen Venancio
while (p != NULL && p->info != v)
{
ant = p;
p = p->prox;
}
/* verifica se achou elemento */
if (p == NULL)
return l; /* não achou: retorna lista original */
/* retira elemento */
if (ant == NULL)
{
/* retira elemento do inicio */
l = p->prox;
}
else {
/* retira elemento do meio da lista */
ant->prox = p->prox;
}
free(p);
return l;
}

void Libera_Lista (Lista* l)


{ Lista* p = l;
while (p != NULL)
{
Lista* t = p->prox; /* guarda referência para o próximo elemento*/
free(p); /* libera a memória apontada por p */
p = t; /* faz p apontar para o próximo */
}
}

#include <stdio.h>
int main ( ) {
Lista* l; /* declara uma lista não iniciada */
l = Inicializa_Lista(); /* inicia lista vazia */
l = Insere_Elemento(l, 23); /* insere na lista o elemento 23 */
l = Insere_Elemento(l, 45); /* insere na lista o elemento 45 */
l = Insere_Elemento(l, 56); /* insere na lista o elemento 56 */
l = Insere_Elemento(l, 78); /* insere na lista o elemento 78 */
Imprime_Lista(l); /* imprimirá: 78 56 45 23 */
l = Elimina_Elemento (l, 78);
Imprime_Lista(l); /* imprimirá: 56 45 23 */
l = Elimina_Elemento (l, 45);
Imprime_Lista(l); /* imprimirá: 56 23 */
Libera_Lista(l);
system("pause");
}

UNIPAC – CAMPUS Ipatinga. 5


Algoritmos e Estruturas de Dados I – Prof. Christiano Colen Venancio