Ir para conteúdo
  • Cadastre-se

Plugin

Membros
  • Total de itens

    3
  • Registrou-se em

  • Última visita

Tudo que Plugin postou

  1. #include <stdio.h> #include <stdlib.h> #include "ListaDinamicaOrdenada.h" int main(){ testaLista(); system("PAUSE"); return 0; } #include <stdio.h> #include <stdlib.h> #include "ListaDinamicaOrdenada.h" int main(){ testaLista(); system("PAUSE"); return 0; } ****************************************** Biblioteca C onde tudo acontece: ListaDinamicaOrdenada.h ***************************************** CODE struct no { int conteudo; struct no *prox; // Ponteiro - Estrutura Recursiva }; typedef struct no Lista; void imprimeLista (Lista *ini); void cria(Lista **ini) { *ini = NULL; } int vazia(Lista *p) { if (p == NULL) return 0; else return 1; } Lista *resto(Lista *p) { return p->prox; } int primeiro(Lista *p) { int x = p->conteudo; return x; } void insere (int x, Lista **p) { Lista *L = *p; Lista *nova; nova = malloc (sizeof (Lista)); nova->conteudo = x; // Se a lista estiver Vazia if (vazia(L) == 0) { nova->prox = NULL; *p = nova; // Se o item é menor ou igual ao primeiro } else if (nova->conteudo <= L->conteudo) { nova->prox = L; *p = nova; } else { Lista *ant = L; Lista *aux = ant->prox; do { //.. if (aux==NULL){ ant->prox=nova; nova->prox=NULL; } //.. // Se o item é maior que o iesimo elemento else if ((nova->conteudo <= aux->conteudo)) { nova->prox = aux; ant->prox = nova; aux = NULL; // Se o item e maior que todos elementos } else if (aux->prox == NULL) { aux->prox = nova; nova->prox = NULL; aux = NULL; // Anda na lista } else { ant = aux; aux = aux->prox; } } while (aux != NULL); } } void removerX (int x, Lista **p) { Lista *L = *p; if (vazia(L) == 0) { printf("\n Lista esta vazia!"); // se o elemento 'e menor que o primerio elemento ele não esta na lista } else if (x < L->conteudo) { printf("\n O elemento não esta na lista!"); // Se o elemento e igual ao primeiro ao elemento da lista } else if (x == L->conteudo) { Lista *morta; morta = L; L = morta->prox; free (morta); *p = L; } else { Lista *ant = L; Lista *morta = L->prox; while (morta != NULL) { if (x == morta->conteudo) { ant->prox = morta->prox; morta = NULL; } else { ant = morta; morta = morta->prox; } } free(morta); *p = L; } } int pertence(int x, Lista *p) { int a = 1; Lista *L = p; while (vazia(L) == 1) { if (primeiro(L) == x) { a = 0; L = NULL; } else { L = resto(L); } } return a; } int acessa(int ind, Lista *p) { Lista *L = p; while ((vazia(L) == 1) & (ind > 1)) { L = resto(L); ind--; } if (vazia(L) == 0 | ind < 1) return -1; else return (int) primeiro(L); } void destroi(Lista **p) { Lista *L = *p; while (L != NULL) { Lista *morta = L; L = resto(L); free(morta); } } void imprimeLista (Lista *ini) { printf("\n Lista: ["); Lista *p; for (p = ini; p != NULL; p = resto(p)) printf ("%d -> ", primeiro(p)); // printf("NULL]"); } void testaLista() { Lista *ini; cria(&ini); insere(300, &ini); imprimeLista(ini); insere(20, &ini); imprimeLista(ini); insere(10, &ini); imprimeLista(ini); insere(40, &ini); imprimeLista(ini); insere(4, &ini); insere(5, &ini); imprimeLista(ini); insere(400, &ini); imprimeLista(ini); insere(560, &ini); imprimeLista(ini); insere(42, &ini); imprimeLista(ini); //Entrando com os elementos da consulta int nr1, nr2; printf ("\n \n Digite um numero: "); scanf ("%d", &nr1); printf ("\n Digite outro numero: "); scanf ("%d", &nr2); printf ("\n\n Voce digitou os numeros: %d e %d \n", nr1, nr2); //Verificando se o elemento pertence a lista printf("\n O Elemento: %d ", nr1); printf("PERETENCE:%d ('0' Sim / '1' não) ", pertence(nr1, ini)); //Pertence ou não a lista printf("\n O Elemento: %d ", nr2); printf("PERETENCE:%d ('0' Sim / '1' não)\n \n ", pertence(nr2, ini)); //Pertence ou não a lista //Verificando o conteudo da posicao digitada int na1; printf ("\n\nDigite uma posicao na lista: "); scanf ("%d", &na1); printf ("\n\n\nVoce digitou os numeros: %d \n", na1); printf("\n 'ACESSA': O conteudo da posicao que você digitou e = %d \n", acessa(na1, ini)); //Acessa Posição1 2 na lista //REMOVER imprimeLista(ini); removerX(400, &ini); imprimeLista(ini); removerX(560, &ini); imprimeLista(ini); removerX(4, &ini); imprimeLista(ini); removerX(5, &ini); imprimeLista(ini); destroi(&ini); //Função Destroi a lista printf(" \n -- FIM -- \n"); } blz ... vlw toda ajuda é bem vinda.... Trabalho 1: Implementar as seguintes funções na biblioteca de lista encadeada ordenada. 1) Função tamanho(L): Retorna quantidade de (nós) elementos na lista. 2) Função Soma(L): Soma os elementos de todos os nós. 3) Função Ultimo(L): Retorna o ultimo elemento da lista. 4) Função ocorrências(X,L): Retorna o numero de vezes que o elemento X aparece na lista. 5) Função iguais(A,: Recebe duas listas(A e e verifica se elas são iguais. 6) Função Junta(A,: Retorna a união dos elementos das listas A e B.
  2. Olá, boa tarde Estou com um problema em um exercício (não sei como faz)... Estou usando o Dev C++ Programa main.c ******************************************** CODE #include <stdio.h> #include <stdlib.h> #include "ListaDinamicaOrdenada.h" int main(){ testaLista(); system("PAUSE"); return 0; } ****************************************** Biblioteca C onde tudo acontece: ListaDinamicaOrdenada.h ***************************************** CODE struct no { int conteudo; struct no *prox; // Ponteiro - Estrutura Recursiva }; typedef struct no Lista; void imprimeLista (Lista *ini); void cria(Lista **ini) { *ini = NULL; } int vazia(Lista *p) { if (p == NULL) return 0; else return 1; } Lista *resto(Lista *p) { return p->prox; } int primeiro(Lista *p) { int x = p->conteudo; return x; } void insere (int x, Lista **p) { Lista *L = *p; Lista *nova; nova = malloc (sizeof (Lista)); nova->conteudo = x; // Se a lista estiver Vazia if (vazia(L) == 0) { nova->prox = NULL; *p = nova; // Se o item é menor ou igual ao primeiro } else if (nova->conteudo <= L->conteudo) { nova->prox = L; *p = nova; } else { Lista *ant = L; Lista *aux = ant->prox; do { //.. if (aux==NULL){ ant->prox=nova; nova->prox=NULL; } //.. // Se o item é maior que o iesimo elemento else if ((nova->conteudo <= aux->conteudo)) { nova->prox = aux; ant->prox = nova; aux = NULL; // Se o item e maior que todos elementos } else if (aux->prox == NULL) { aux->prox = nova; nova->prox = NULL; aux = NULL; // Anda na lista } else { ant = aux; aux = aux->prox; } } while (aux != NULL); } } void removerX (int x, Lista **p) { Lista *L = *p; if (vazia(L) == 0) { printf("\n Lista esta vazia!"); // se o elemento 'e menor que o primerio elemento ele não esta na lista } else if (x < L->conteudo) { printf("\n O elemento não esta na lista!"); // Se o elemento e igual ao primeiro ao elemento da lista } else if (x == L->conteudo) { Lista *morta; morta = L; L = morta->prox; free (morta); *p = L; } else { Lista *ant = L; Lista *morta = L->prox; while (morta != NULL) { if (x == morta->conteudo) { ant->prox = morta->prox; morta = NULL; } else { ant = morta; morta = morta->prox; } } free(morta); *p = L; } } int pertence(int x, Lista *p) { int a = 1; Lista *L = p; while (vazia(L) == 1) { if (primeiro(L) == x) { a = 0; L = NULL; } else { L = resto(L); } } return a; } int acessa(int ind, Lista *p) { Lista *L = p; while ((vazia(L) == 1) & (ind > 1)) { L = resto(L); ind--; } if (vazia(L) == 0 | ind < 1) return -1; else return (int) primeiro(L); } void destroi(Lista **p) { Lista *L = *p; while (L != NULL) { Lista *morta = L; L = resto(L); free(morta); } } void imprimeLista (Lista *ini) { printf("\n Lista: ["); Lista *p; for (p = ini; p != NULL; p = resto(p)) printf ("%d -> ", primeiro(p)); // printf("NULL]"); } void testaLista() { Lista *ini; cria(&ini); insere(300, &ini); imprimeLista(ini); insere(20, &ini); imprimeLista(ini); insere(10, &ini); imprimeLista(ini); insere(40, &ini); imprimeLista(ini); insere(4, &ini); insere(5, &ini); imprimeLista(ini); insere(400, &ini); imprimeLista(ini); insere(560, &ini); imprimeLista(ini); insere(42, &ini); imprimeLista(ini); //Entrando com os elementos da consulta int nr1, nr2; printf ("\n \n Digite um numero: "); scanf ("%d", &nr1); printf ("\n Digite outro numero: "); scanf ("%d", &nr2); printf ("\n\n Voce digitou os numeros: %d e %d \n", nr1, nr2); //Verificando se o elemento pertence a lista printf("\n O Elemento: %d ", nr1); printf("PERETENCE:%d ('0' Sim / '1' não) ", pertence(nr1, ini)); //Pertence ou não a lista printf("\n O Elemento: %d ", nr2); printf("PERETENCE:%d ('0' Sim / '1' não)\n \n ", pertence(nr2, ini)); //Pertence ou não a lista //Verificando o conteudo da posicao digitada int na1; printf ("\n\nDigite uma posicao na lista: "); scanf ("%d", &na1); printf ("\n\n\nVoce digitou os numeros: %d \n", na1); printf("\n 'ACESSA': O conteudo da posicao que você digitou e = %d \n", acessa(na1, ini)); //Acessa Posição1 2 na lista //REMOVER imprimeLista(ini); removerX(400, &ini); imprimeLista(ini); removerX(560, &ini); imprimeLista(ini); removerX(4, &ini); imprimeLista(ini); removerX(5, &ini); imprimeLista(ini); destroi(&ini); //Função Destroi a lista printf(" \n -- FIM -- \n"); } *************************************************** Enunciado: Trabalho 1: Implementar as seguintes funções na biblioteca de lista encadeada ordenada. 1) Função tamanho(L): Retorna quantidade de (nós) elementos na lista. 2) Função Soma(L): Soma os elementos de todos os nós. 3) Função Ultimo(L): Retorna o ultimo elemento da lista. 4) Função ocorrências(X,L): Retorna o numero de vezes que o elemento X aparece na lista. 5) Função iguais(A,: Recebe duas listas(A e e verifica se elas são iguais. 6) Função Junta(A,: Retorna a união dos elementos das listas A e B. Muito Obrigado pela ajuda!!!!
×
×
  • Criar Novo...