******************************************
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");
}
Pergunta
Plugin-Soluções
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
********************************************
****************************************** Biblioteca C onde tudo acontece: ListaDinamicaOrdenada.h ********************************************************************************************
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
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.