Buscar

lista dinamica simples descritor

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 3 páginas

Prévia do material em texto

#include <stdio.h>
#include <malloc.h>
#define true 1
#define false 0
typedef int KEY;
typedef int bool;
typedef struct {
KEY chave;
}REGISTRO;
typedef struct aux {
REGISTRO reg;
struct aux *prox;
}ELEMENTO, *PONT;
typedef struct {
PONT inicio;
PONT fim;
int qtd;
} LISTA;
 
void initialize(LISTA *lista){
lista->inicio = NULL;
lista->fim = NULL;
lista->qtd = 0;
}
 
void reinicializar(LISTA *lista){
PONT fim = lista->inicio;
while (fim != NULL){
PONT apagar = fim;
fim = fim->prox;
free(apagar);
}
lista->inicio = NULL;
lista->fim = NULL;
lista->qtd = 0;
}
 
int count(LISTA lista){ return lista.qtd; }
 
PONT busca(LISTA *lista, KEY ch){
if(lista->fim->reg.chave==ch) return lista->fim;
PONT ponto = lista->inicio;
while(ponto!=NULL){
if(ponto->reg.chave == ch) return ponto;
ponto = ponto->prox;
}
return NULL;
}
 
bool remove_inicio(LISTA *lista){
if((lista==NULL) || (lista->inicio==NULL)) return false;
PONT no = lista->inicio;
lista->inicio = no->prox;
free(no);
if(lista->inicio == NULL)
lista->fim = NULL;
lista->qtd--;
return true;
}
bool remove_fim(LISTA *lista){
if((lista==NULL) || (lista->inicio == NULL)) return false;
PONT ant, no = lista->inicio;
while(no->prox != NULL){
ant = no;
no = no->prox;
}
if(no == lista->inicio){
lista->inicio = NULL;
lista->fim = NULL;
} else {
ant->prox = no->prox;
lista->fim = ant;
}
free(no);
lista->qtd--;
return true;
}
bool add_inicio(LISTA *lista, REGISTRO reg){
if(lista==NULL) return false;
PONT no = (PONT) malloc(sizeof(ELEMENTO));
if(no==NULL) return false;
no->reg = reg;
no->prox = lista->inicio;
if(lista->inicio == NULL)
lista->fim = no;
lista->inicio = no;
lista->qtd++;
return true;
}
bool add_final(LISTA *lista, REGISTRO reg){
if(lista==NULL) return false;
PONT no = (PONT) malloc(sizeof(ELEMENTO));
if(no==NULL) return false;
no->reg = reg;
no->prox = NULL;
if(lista->inicio == NULL)
lista->inicio = no;
else
lista->fim->prox = no;
lista->fim = no;
lista->qtd++;
return true;
}
void print(LISTA *lista){
PONT fim = lista->inicio;
printf("LISTA: ");
while(fim!=NULL) {
printf("%i ", fim->reg.chave);
fim = fim->prox;
}
printf("\n");
}
 
void main(){
int i;
LISTA li;
initialize(&li);
REGISTRO r1,r2,r3,r4;
r1.chave = 1;
r2.chave = 2;
r3.chave = 3;
r4.chave = 4;
add_inicio(&li, r1);
add_inicio(&li, r2);
add_inicio(&li, r3);
add_inicio(&li, r4);
 
print(&li);
remove_inicio(&li);
print(&li);
remove_fim(&li);
print(&li);
add_final(&li,r1);
print(&li);
add_inicio(&li,r4);
print(&li);
 
PONT no = busca(&li,4);
printf("******************* %d *******************\n",no->reg.chave);
 
reinicializar(&li);
}

Outros materiais