Ir para conteúdo
  • Cadastre-se

Plugin

Membros
  • Total de itens

    3
  • Registrou-se em

  • Última visita

Posts postados por Plugin

  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,B): Recebe duas listas(A e e verifica se elas são iguais.

    6) Função Junta(A,B): 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,B): Recebe duas listas(A e e verifica se elas são iguais.

    6) Função Junta(A,B): Retorna a união dos elementos das listas A e B.

    Muito Obrigado pela ajuda!!!!

×
×
  • Criar Novo...