Plugin Postado 24 de maio de 2010 Denunciar Compartilhar Postado 24 de maio de 2010 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!!!! Citar Link para o comentário Compartilhar em outros sites More sharing options...
stealer Postado 24 de maio de 2010 Denunciar Compartilhar Postado 24 de maio de 2010 Eita desespero, ainda bem que eu ja passei por isso, odeio C! Objective-c é mais suportavel, mas so pelo resultado ! hehehehe Citar Link para o comentário Compartilhar em outros sites More sharing options...
Plugin Postado 24 de maio de 2010 Autor Denunciar Compartilhar Postado 24 de maio de 2010 Nem fale...... Citar Link para o comentário Compartilhar em outros sites More sharing options...
franzSilva Postado 24 de maio de 2010 Denunciar Compartilhar Postado 24 de maio de 2010 (editado) Caraca!!! Tem um botão para utilizar a tag code. Utilize. Quem sabe assim eu animo eu dar uma olhada... Ah! Escreva onde está tendo o problema, tb. Editado 24 de maio de 2010 por franzSilva Citar Link para o comentário Compartilhar em outros sites More sharing options...
Plugin Postado 24 de maio de 2010 Autor Denunciar Compartilhar Postado 24 de maio de 2010 #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. Citar Link para o comentário Compartilhar em outros sites More sharing options...
Gabriel M Couto Postado 24 de maio de 2010 Denunciar Compartilhar Postado 24 de maio de 2010 Ou seja, você não tem a mínima idéia por onde começar. A noite dou uma olhada pra ti, e implemento uma das funções para você ver. Citar Link para o comentário Compartilhar em outros sites More sharing options...
keep Postado 24 de maio de 2010 Denunciar Compartilhar Postado 24 de maio de 2010 1)Faz um while percorrendo a lista(até prox == null) e somando UM a cada iteração. 2)O mesmo laço só que acumulando o valor dos elementos. ... Enfim, quando tu conseguir fazer o laço que percorre a lista estará tudo resolvido. No próprio código tem um exemplo: "for (p = ini; p != NULL; p = resto(p))" Sinceramente, fazer isso com um "for" não é a forma mais elegante, faça com um "while". Citar Link para o comentário Compartilhar em outros sites More sharing options...
franzSilva Postado 24 de maio de 2010 Denunciar Compartilhar Postado 24 de maio de 2010 bom, minha ideia de vc utilizar o tag code era para poder ver um código mais legível. Para ser mais preciso, identado. acho que a galera aqui, tem pouco tempo livre, mas gosta de ajudar, então se puder identar o código ajuda bastante. onde mesmo vc tem problema? não tem problema? não sabe por onde começar? Bons estudos... Citar Link para o comentário Compartilhar em outros sites More sharing options...
RenanSilva Postado 25 de maio de 2010 Denunciar Compartilhar Postado 25 de maio de 2010 1)Faz um while percorrendo a lista(até prox == null) e somando UM a cada iteração.2)O mesmo laço só que acumulando o valor dos elementos. ... Eu ia sugerir a mesma coisa, percorrendo a lista desse jeito vc consegue resolver ate o item 4 sem problemas, tenta implementar e depois posta os resultados Citar Link para o comentário Compartilhar em outros sites More sharing options...
Posts Recomendados
Participe do debate
Você pode postar agora e se registrar depois. Se você tem uma conta, entre agora para postar com ela.