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


c - lista simp enc circ, Notas de estudo de Engenharia Telemática

Implementação das bibliotecas de lista simplesmente encadeada circular

Tipologia: Notas de estudo

Antes de 2010

Compartilhado em 30/11/2010

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

4.6

(41)

262 documentos

1 / 4

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
LISTA SIMPLESMENTE ENCADEADA CIRCULAR
Definição da Estrutura de Dados do tipo LISTA ENCADEADA
#include<stdio.h>
#include<alloc.h>
#define MAX 21
// Definindo a estrutura de dados
typedef struct stnolista {
char dado[MAX]; // campo de informacao
struct stnolista *prox; // campo do ponteiro para o proximo no
}no;
// criando o tipo boolean
typedef enum {
false,
true
}boolean;
// Criando o tipo lista
typedef no* lista;
Criar lista
/* Criando uma lista vazia */
void criar(lista *lst) {
*lst = NULL;
}
Verificar se a lista está vazia
/* Verificar se a lista esta vazia */
int vazia(lista lst) {
return (lst == NULL);
}
Obter o tamanho de uma lista
/* Obter o tamanho da lista */
int tamanho(lista lst) {
lista aux = lst;
int contador = 0;
if(!vazia(aux)){
do {
contador++;
aux = aux->prox;
} while( aux != lst);
}
return(contador);
}
Obter o i-ésimo elemento de uma lista
/* Obter o valor do elemento de uma determinada posicao */
int elemento (lista lst, int posicao, int *valor) {
/* valor: argumento que vai receber o dado armazenado na posição especificada
Retorna false se a posicao for invalida. Caso contrario, retorna true */
lista aux = lst;
int contador = 1;
if (posicao < 1 || posicao > tamanho(lst))
return(false);
pf3
pf4

Pré-visualização parcial do texto

Baixe c - lista simp enc circ e outras Notas de estudo em PDF para Engenharia Telemática, somente na Docsity!

Disciplina: Estrutura de Dados I

Professor: Alex Sandro C. Rego

LISTA SIMPLESMENTE ENCADEADA CIRCULAR

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

#define MAX 21

// Definindo a estrutura de dados typedef struct stnolista { char dado[MAX]; // campo de informacao struct stnolista *prox; // campo do ponteiro para o proximo no }no;

// criando o tipo boolean typedef enum { false, true }boolean;

// Criando o tipo lista typedef no* lista;

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

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

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

Obter o i-ésimo elemento de uma lista /* Obter o valor do elemento de uma determinada posicao */ int elemento (lista lst, int posicao, int valor) { / valor: argumento que vai receber o dado armazenado na posição especificada Retorna false se a posicao for invalida. Caso contrario, retorna true */ lista aux = lst; int contador = 1;

if (posicao < 1 || posicao > tamanho(lst)) return(false);

while (contador < posicao) { contador++; aux = aux->prox; }

strcpy(valor, aux->dado); return(true); }

Pesquisando um determinado elemento, retornando sua posição /* Obter a posicao do elemento, cujo valor eh fornecido */ int busca(lista lst, int valor) { if (!vazia(lst)) { lista aux = lst; int contador = 0;

do { contador++; if ( !strcmp(aux->dado,valor)) return contador; aux = aux->prox; } while (aux != lst); } return(0); }

Inserção de um elemento em uma determinada posição /* inserir um elemento na lista, dada a sua posicao */ int inserir( lista lst, int posicao, int valor) { no novo; lista aux; int contador; // insercao se a lista estiver vazia if (vazia(lst)) { if (posicao != 1) return(false); if ( (novo = (no) malloc(sizeof(no))) == NULL ) return(0); strcpy(novo->dado,valor); novo->prox = novo; lst = novo; return(true); } // insercao na primeira posicao em uma lista nao vazia if ( posicao == 1) { aux = lst; / Localizando o ultimo no, que fiz a volta / while (aux->prox != lst) aux = aux->prox; /-----------------/ if ( (novo = (no) malloc(sizeof(no))) == NULL ) return(0); strcpy(novo->dado,valor); novo->prox = *lst; lst = novo; / ajustando o link do ultimo no para novo */ aux->prox = novo; return(true); } // insercao apos a primeira posicao em lista nao vazia aux = *lst; contador = 1;

// Imprime todos os elementos da lista void imprime (lista lst) { printf("[ "); if (!vazia(lst)) { lista aux = lst; do{ printf("%s ", aux->dado); aux = aux->prox; } while (aux != lst); } printf("]\n"); }