Ir para conteúdo
  • Cadastre-se

Ajuda em Programação "C" ...


Posts Recomendados

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!!!!

Link para o comentário
Compartilhar em outros sites

  • Respostas 8
  • Criado
  • Última resposta

Top Postadores Neste Tópico

Dias Populares

Top Postadores Neste Tópico

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 por franzSilva
Link para o comentário
Compartilhar em outros sites

#include &lt;stdio.h&gt;
#include &lt;stdlib.h&gt;
#include "ListaDinamicaOrdenada.h"

int main(){
testaLista();
system("PAUSE");
return 0;
}

#include &lt;stdio.h&gt;
#include &lt;stdlib.h&gt;
#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-&gt;prox;
}

int primeiro(Lista *p) {
int x = p-&gt;conteudo;
return x;
}

void insere (int x, Lista **p) {
Lista *L = *p;
Lista *nova;
nova = malloc (sizeof (Lista));
nova-&gt;conteudo = x;

// Se a lista estiver Vazia
if (vazia(L) == 0) {
nova-&gt;prox = NULL;
*p = nova;

// Se o item é menor ou igual ao primeiro
} else if (nova-&gt;conteudo &lt;= L-&gt;conteudo) {
nova-&gt;prox = L;
*p = nova;
} else {
Lista *ant = L;
Lista *aux = ant-&gt;prox;
do {
//..
if (aux==NULL){
ant-&gt;prox=nova;
nova-&gt;prox=NULL;
}
//..
// Se o item é maior que o iesimo elemento
else if ((nova-&gt;conteudo &lt;= aux-&gt;conteudo)) {
nova-&gt;prox = aux;
ant-&gt;prox = nova;
aux = NULL;

// Se o item e maior que todos elementos
} else if (aux-&gt;prox == NULL) {
aux-&gt;prox = nova;
nova-&gt;prox = NULL;
aux = NULL;

// Anda na lista
} else {
ant = aux;
aux = aux-&gt;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 &lt; L-&gt;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-&gt;conteudo) {
Lista *morta;
morta = L;
L = morta-&gt;prox;
free (morta);
*p = L;
} else {
Lista *ant = L;
Lista *morta = L-&gt;prox;
while (morta != NULL) {
if (x == morta-&gt;conteudo) {
ant-&gt;prox = morta-&gt;prox;
morta = NULL;
} else {
ant = morta;
morta = morta-&gt;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) &amp; (ind &gt; 1)) {
L = resto(L);
ind--;
}
if (vazia(L) == 0 | ind &lt; 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 -&gt; ", primeiro(p));
//
printf("NULL]");
}
void testaLista() {
Lista *ini;
cria(&amp;ini);
insere(300, &amp;ini);
imprimeLista(ini);
insere(20, &amp;ini);
imprimeLista(ini);
insere(10, &amp;ini);
imprimeLista(ini);
insere(40, &amp;ini);
imprimeLista(ini);
insere(4, &amp;ini);
insere(5, &amp;ini);
imprimeLista(ini);
insere(400, &amp;ini);
imprimeLista(ini);
insere(560, &amp;ini);
imprimeLista(ini);
insere(42, &amp;ini);
imprimeLista(ini);

//Entrando com os elementos da consulta
int nr1, nr2;
printf ("\n \n Digite um numero: ");
scanf ("%d", &amp;nr1);
printf ("\n Digite outro numero: ");
scanf ("%d", &amp;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", &amp;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, &amp;ini);
imprimeLista(ini);
removerX(560, &amp;ini);
imprimeLista(ini);
removerX(4, &amp;ini);
imprimeLista(ini);
removerX(5, &amp;ini);
imprimeLista(ini);
destroi(&amp;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.

Link para o comentário
Compartilhar em outros sites

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".

Link para o comentário
Compartilhar em outros sites

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...

Link para o comentário
Compartilhar em outros sites

Participe do debate

Você pode postar agora e se registrar depois. Se você tem uma conta, entre agora para postar com ela.

Visitante
Responder este tópico…

×   Você colou conteúdo com formatação.   Remover formatação

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Limpar editor

×   You cannot paste images directly. Upload or insert images from URL.

  • Quem Está Navegando   0 membros estão online

    • Nenhum usuário registrado visualizando esta página.



  • Estatísticas do Fórum

    • Total de Tópicos
      56.8k
    • Total de Posts
      465.7k
×
×
  • Criar Novo...