Você está na página 1de 10

LISTAS LINEARES

Estrutura de Dados I
Prof. Sandro Moreira
moreira.sandro@gmail.com

DEFINIES

Forma simples de interligar os elementos de um conjunto

Agrupa informaes referentes a um conjunto de elementos


que se relacionam entre si de alguma forma.
So teis em aplicaes tais como manipulao simblica,
gerncia de memria, simulao e compiladores.
Inmeros tipos de dados podem ser representados por listas.
Alguns exemplos de sistemas de informao so: informaes
sobre os funcionrios de uma empresa, notas de alunos, itens
de estoque,etc.

DEFINIES

Estrutura em que as operaes inserir, retirar e localizar


so definidas.

Itens da lista podem ser acessados, inseridos ou retirados.

Podem crescer ou diminuir de tamanho durante a execuo


de um programa, de acordo com a demanda.

TAD LISTA (EXEMPLOS)

Criar uma lista linear vazia.

Inserir um novo item imediatamente aps o i-simo item.

Retirar o i-simo item.

Localizar o i-simo item para examinar e/ou alterar o contedo


de seus componentes.

Ordenar os itens da lista em ordem ascendente ou


descendente, de acordo com alguns de seus componentes.

Pesquisar a ocorrncia de um item com um valor particular em


algum componente.

IMPLEMENTAO DE LISTAS

H varias maneiras de implementar listas lineares. Cada


implementao apresenta vantagens e desvantagens
particulares.

Vamos estudar duas maneiras distintas

Usando alocao sequencial e esttica (com vetores).

Usando alocao no sequencial e dinmica (com


ponteiros): Encadeadas.

LISTA SEQUENCIAL ESTTICA

Itens em posies contguas de memria.

A lista pode ser percorrida em qualquer direo.

A insero de um novo item pode ser realizada aps o ltimo item com
custo constante.

A insero de um novo item no meio da lista requer um deslocamento de


todos os itens localizados aps o ponto de insero.

Retirar um item do incio da lista requer um deslocamento de itens para


preencher o espao deixado vazio.

IMPLEMENTANDO LS
//lseq.h
typedef struct tipolista TipoLista;
TipoLista *InicializaLista();
void EsvaziaLista (TipoLista *Lista);
int Vazia (TipoLista *Lista);
void Insere (int x, TipoLista *Lista);
int RetiraPosicao (int p, TipoLista *Lista);
int RetiraValor (int x, TipoLista *Lista);
void ModificaValorPosicao (int p, int x);
void Imprime(TipoLista *Lista);
int BuscaValor(int x, TipoLista *Lista);

IMPLEMENTANDO LS
//lseq.c

/* Inicializa uma lista */

#include <stdio.h>

TipoLista* InicializaLista(){

#include <stdlib.h>

TipoLista* lista =

#include "lseq.h"

(TipoLista*)malloc(sizeof(TipoLista))

#define InicioVetor 0

#define MaxTam 10

lista->Primeiro = 0;
lista->Ultimo = 0;

struct tipolista{
int Item[MaxTam];

return lista;
}

int Primeiro, Ultimo;


};

/* Faz a lista ficar vazia */


void EsvaziaLista (TipoLista* Lista)
{
Lista->Primeiro = InicioVetor;
Lista->Ultimo = Lista->Primeiro;
}

IMPLEMENTANDO LS
/* Insere apos o ultimo na lista */

//programa.c

void Insere (int x, TipoLista *Lista)

#include <stdlib.h>

#include <stdio.h>

if (Lista->Ultimo >= MaxTam)

#include lseq.h"

printf ("Lista esta cheia\n");


else

int main(int argc, char *argv[]){

TipoLista *l;

Lista ->Item[Lista->Ultimo] = x;
Lista->Ultimo++;
}
}

Insere(7,l);

void Imprime(TipoLista *Lista){


int i;
for (i = Lista->Primeiro; i <
Lista->Ultimo; i++)
{
printf("[ %d ] ",Lista->Item[i]);
}
}

l = InicializaLista();

Insere(8,l);
Insere(9,l);
Insere(10,l);
Imprime(l);
return 0;
}

LISTA SEQUENCIAL ESTTICA

Continue a implementao da Lista Esttica Sequencial

Crie tambm um programa principal que apresente um


menu para que o usurio possa inserir elementos ou
remover elementos da lista e imprimir a lista completa.

No se esquea de efetuar os deslocamentos necessrios.

Você também pode gostar