Baixe o app para aproveitar ainda mais
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); }
Compartilhar