Docsity
Docsity

Prepare-se para as provas
Prepare-se para as provas

Estude fácil! Tem muito documento disponível na Docsity


Ganhe pontos para baixar
Ganhe pontos para baixar

Ganhe pontos ajudando outros esrudantes ou compre um plano Premium


Guias e Dicas
Guias e Dicas


Lista Duplamente Encadeada: Definição e Operações, Notas de estudo de Engenharia Telemática

A definição de uma lista duplamente encadeada, incluindo as operações de criar, verificar se está vazia, obter o tamanho, obter um elemento em uma determinada posição, pesquisar um determinado elemento e retornar sua posição, inserir um elemento em uma determinada posição e remover um elemento em uma determinada posição. O código fornecido é escrito em c.

Tipologia: Notas de estudo

Antes de 2010

Compartilhado em 30/11/2010

samuel-santos-22
samuel-santos-22 🇧🇷

4.6

(41)

262 documentos

1 / 3

Toggle sidebar

Esta página não é visível na pré-visualização

Não perca as partes importantes!

bg1
1
Disciplina: Estrutura de Dados I
Professor: Alex Sandro C. Rego
OPERAÇÕES: LISTA DUPLAMENTE ENCADEADA
Definição da Estrutura de Dados do tipo LISTA DUPLAMENTE ENCADEADA
#include<stdio.h>
#include<alloc.h>
#define VAZIA printf("\n >> Lista esta vazia <<")
#define SUCESSO printf("\n >> Operacao realizada com sucesso! <<")
// Definindo a estrutura de dados
typedef struct stnolista {
int dado; // campo de informacao
struct stnolista *prox; // campo do ponteiro para o proximo no
struct stnolista *ant;
}no;
// Criando o tipo lista
typedef no* Tlista;
Criar lista
/* Criando uma lista vazia */
void criar(Tlista *lst) {
*lst = NULL;
}
Verificar se a lista está vazia
/* Verificar se a lista esta vazia */
int vazia(Tlista lst) {
return (lst == NULL);
}
Obter o tamanho de uma lista
/* Obter o tamanho da lista */
int tamanho(Tlista lst) {
lista aux = lst;
int contador = 0;
while( aux != NULL) {
aux = aux->prox;
contador++;
}
return(contador);
}
Obter o i-ésimo elemento de uma lista
/* Obter o valor do elemento de uma determinada posicao */
int elemento (Tlista lst, int posicao, int *valor) {
/* dado ira receber o valor encontrado
Retorna 0 se a posicao for invalida. Caso contrario, retorna 1 */
lista aux = lst;
int contador = 1;
if (vazia(lst) || posicao < 1 )
return(0);
while( (aux!=NULL) && (contador < posicao) ) {
aux = aux->prox;
contador++;
}
*valor = aux->dado;
return(1);
}
pf3

Pré-visualização parcial do texto

Baixe Lista Duplamente Encadeada: Definição e Operações e outras Notas de estudo em PDF para Engenharia Telemática, somente na Docsity!

Disciplina: Estrutura de Dados I

Professor: Alex Sandro C. Rego

OPERAÇÕES: LISTA DUPLAMENTE ENCADEADA

Definição da Estrutura de Dados do tipo LISTA DUPLAMENTE ENCADEADA #include<stdio.h> #include<alloc.h>

#define VAZIA printf("\n >> Lista esta vazia <<") #define SUCESSO printf("\n >> Operacao realizada com sucesso! <<")

// Definindo a estrutura de dados typedef struct stnolista { int dado; // campo de informacao struct stnolista *prox; // campo do ponteiro para o proximo no struct stnolista ant; }no; // Criando o tipo lista typedef no Tlista;

Criar lista /* Criando uma lista vazia */ void criar(Tlista *lst) { *lst = NULL; }

Verificar se a lista está vazia /* Verificar se a lista esta vazia */ int vazia(Tlista lst) { return (lst == NULL); }

Obter o tamanho de uma lista /* Obter o tamanho da lista */ int tamanho(Tlista lst) { lista aux = lst; int contador = 0; while( aux != NULL) { aux = aux->prox; contador++; } return(contador); }

Obter o i-ésimo elemento de uma lista /* Obter o valor do elemento de uma determinada posicao */ int elemento (Tlista lst, int posicao, int valor) { / dado ira receber o valor encontrado Retorna 0 se a posicao for invalida. Caso contrario, retorna 1 */ lista aux = lst; int contador = 1;

if (vazia(lst) || posicao < 1 ) return(0);

while( (aux!=NULL) && (contador < posicao) ) { aux = aux->prox; contador++; } *valor = aux->dado; return(1); }

Pesquisando um determinado elemento, retornando sua posição /* Obter a posicao do elemento, cujo valor eh fornecido */ int busca(Tlista lst, int valor) { if (!vazia(lst)) { lista aux = lst; int contador = 1; while (aux != NULL) { if (aux->dado == valor) return contador; aux = aux->prox; contador++; } } return(0); }

Inserção de um elemento em uma determinada posição /* inserir um elemento na lista, dada a sua posicao */ int inserir( Tlista *lst, int posicao, int valor) { no *novo; lista aux; int contador;

if (posicao < 1 ) return 0;

// Teste de insercao para quando a lista estiver vazia if (vazia(lst)) { if (posicao != 1) return(0); if ( (novo = (no) malloc(sizeof(no))) == NULL ) return(0); novo->dado = valor; novo->prox = NULL; novo->ant = NULL; lst = novo; return(1); } // insercao na primeira posicao em uma lista nao vazia if ( posicao == 1) { if ( (novo = (no) malloc(sizeof(no))) == NULL ) return(0); novo->dado = valor; novo->prox = lst; novo->ant = NULL; (lst)->ant = novo; *lst = novo; return(1); } // insercao apos a primeira posicao em lista nao vazia aux = lst; contador = 1; while ( (contador < posicao-1) && (aux != NULL)) { aux = aux->prox; contador++; } if ( aux == NULL ) return 0; if ((novo = (no) malloc(sizeof(no))) == NULL) return 0; novo->dado = valor; novo->prox = aux->prox; novo->ant = aux;