Ir para conteúdo
Fórum Script Brasil
  • 0

dependência em Estrutura de Dados


Plugin-Soluções

Pergunta

Olá, boa tarde

Estou com um problema em um exercício (não sei como faz)... :D

Estou usando o Dev C++

Programa main.c

********************************************

#include <stdio.h>
#include <stdlib.h>
#include "ListaDinamicaOrdenada.h"

int main(){
  testaLista();
  system("PAUSE");    
  return 0;
}
****************************************** Biblioteca C onde tudo acontece: ListaDinamicaOrdenada.h *****************************************
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 B) 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

2 respostass a esta questão

Posts Recomendados

  • 0

Não reclame. Ninguém tem obrigação de resolver seu problema. Ademais, repare no código. Não tem indentação nenhuma, o que torna a leitura muito mais difícil. Convenhamos: isso desanima qualquer um. E você nem se deu ao trabalho de dizer QUAL é o problema. Quem se dispor a ajudar ainda vai ter que compilar e descobrir O QUE está errado. Fica difícil desse jeito.

Editado por Maligno
Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

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

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,4k
×
×
  • Criar Novo...