giiff / livro_algoritmos_e_estruturas_de_dados

Livro Algoritmos e Estruturas de Dados para Tecnólogos
Creative Commons Attribution Share Alike 4.0 International
13 stars 0 forks source link

Exe05 - Delete em Lista Encadeada #10

Closed waldeyr closed 5 years ago

4ven commented 5 years ago
// Samuel Sergio Garcia Espinosa

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

// Define o tipo No contendo
typedef struct Item {
    int dado;
    struct Item *prox;
} No;

//Define o primeiro No da lista
No* ponteiroInicio = NULL;

// Funcao que define a lista como vazia.
void criarLista() {
    ponteiroInicio = NULL;
}

void excluirLista(int dado)
{
    No* ponteiroNo = NULL;
    No* ponteiroNoPrimeiro = NULL;

    No* ponteiroNoMeio = NULL;
    No* ponteiroNoMeioDepois = NULL;

    int existe = 0;
    int primeiroNo = 0;
    int noDoMeio = 0;

    if (ponteiroInicio == NULL) {
        printf("Lista vazia.\n");
        return;
    }

    ponteiroNo = ponteiroInicio;

    while( ponteiroNo != NULL && existe == 0)
    {
        if( ponteiroNo->dado == dado )
        {
            if( ponteiroNo->prox == NULL )
            {
                ponteiroNoPrimeiro = ponteiroNo;
                primeiroNo = 1;
            }
            else if( ponteiroNo == ponteiroInicio )
            {
                ponteiroNo->prox = NULL;
            }
            else
            {
                ponteiroNoMeio = ponteiroNo;
                ponteiroNoMeioDepois = ponteiroNo->prox;
                ponteiroNo->prox = NULL;
                noDoMeio = 1;
            }

            existe = 1;
        }

        ponteiroNo = ponteiroNo->prox; 
    }

    if( existe == 0 )
        printf("Regisro com esse dado nao encontrado \n");

    while( ponteiroNo != NULL )
    {
        if( primeiroNo == 1 )
        {
            if( ponteiroNo->prox == ponteiroNoPrimeiro)
                ponteiroNo->prox = NULL;
        }
        else if ( noDoMeio == 1 ) 
        {
            if( ponteiroNo->prox == ponteiroNoMeio )
                ponteiroNo->prox = ponteiroNoMeioDepois;
        }
    }
}

void procurarNaLista(int dado)
{
    No* ponteiroNo = NULL;
    int existe = 0;

    if (ponteiroInicio == NULL) {
        printf("Lista vazia.\n");
        return;
    }

    ponteiroNo = ponteiroInicio;

    while( ponteiroNo != NULL && existe == 0)
    {
        if( ponteiroNo->dado == dado )
        {
            printf("O valor %d existe \n", dado);
            printf("O endereço de memoria e (%p) \n", ponteiroNo);
            printf("\n");
            existe = 1; 
        }

        ponteiroNo = ponteiroNo->prox; 
    }
}

//Funcao que adiciona dados
void adicionarDado(int dado) {
    No* ponteiroNo;
    ponteiroNo = (No *) malloc(sizeof (ponteiroNo));
    if (ponteiroNo == NULL) {
        printf("Erro de memoria. Voce esta programando o Windows?\n");
    }
    ponteiroNo->dado = dado;
    ponteiroNo->prox = NULL;
    if (ponteiroInicio == NULL)
        ponteiroInicio = ponteiroNo;
    else {
        ponteiroNo->prox = ponteiroInicio;
        ponteiroInicio = ponteiroNo;
    }
}

void imprimirLista() {
    No* ponteiroNo;
    if (ponteiroInicio == NULL) {
        printf("Lista vazia.\n");
        return;
    }
    ponteiroNo = ponteiroInicio;
    while (ponteiroNo != NULL) {
        printf("[%d(%p)|%p]\n", ponteiroNo->dado, ponteiroNo, ponteiroNo->prox);
        ponteiroNo = ponteiroNo->prox;
    }
}

void main() {
    criarLista();
    // Insere na lista os numeros de 1 a 5
    for (int i = 1; i <= 5; i++)
        adicionarDado(i);
    imprimirLista();

    printf("\n");

    procurarNaLista(4);
}
Vanderson11 commented 5 years ago

Vanderson Leite campos

include

include

include

typedef struct Item { int dado; struct Item *prox; } No;

No inicio = NULL; No ponteiroNo;

void criarLista() {

inicio = NULL;

}

void adicionarDado(int dado) {

No *no;
no = (No *) malloc(sizeof (No));
if (no == NULL) {
    printf("Erro de memoria. Voce esta programando o Windows?\n");
}
no->dado = dado;
no->prox = NULL;
if (inicio == NULL)
    inicio = no;
else {
    no->prox = inicio;
    inicio = no;
}

}

void imprimirLista() {

No *ponteiroNo;
if (inicio == NULL) {
    printf("Lista vazia.\n");
    return;
}
ponteiroNo = inicio;
while (ponteiroNo != NULL) {
    printf("[%d(%p)|%p]\n", ponteiroNo->dado, ponteiroNo, ponteiroNo->prox);
    ponteiroNo = ponteiroNo->prox;
}

}

void buscar(int b){

No *bus;
bus = inicio;

while(bus != NULL){
 if(bus->dado == b){
    printf("A busca:%d\n",bus->dado); 
 }  
 bus = bus->prox;
 }

}

int Removerfim(){

No *ptr; if (inicio==NULL) return 0;

else{ ptr = inicio; inicio = inicio->prox; free(ptr); return 1; } }

int RemoverIM(int dado){

No ptr, antes; if (inicio==NULL){ return 0;
} else{
ptr = inicio; antes = inicio;

  while (ptr !=NULL){
     if (ptr->dado == dado){
     if (ptr == inicio) {
        inicio = inicio->prox;
        free(ptr);
        return 1; 
    }
    else{
        antes->prox = ptr->prox;  
        free(ptr);               
        return 1;   
    }
 }
    else{
        antes = ptr;
        ptr = ptr->prox;
    }
  }
  return 0; 

} }

void main() {

criarLista();

for (int i = 1; i <= 10; i++)
    adicionarDado(i);
imprimirLista();
Removerfim();     // removendo do fim
imprimirLista();
printf("\n");

RemoverIM(1);     // removendo o inicio  
imprimirLista();
printf("\n");

RemoverIM(5);     // removendo do meio     
imprimirLista();

}

arthurjf commented 5 years ago

Aluno: Arthur José Fernandes

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <stdbool.h>

// Define o tipo No contendo

typedef struct Item {
    int dado;
    struct Item *prox;
} No;

//Define o primeiro No da lista
No* ponteiroInicio = NULL;

// Funcao que define a lista como vazia.

void criarLista() {
    ponteiroInicio = NULL;
}

//Funcao que adiciona dados

void adicionarDado(int dado) {
    No* ponteiroNo;
    ponteiroNo = (No *) malloc(sizeof (ponteiroNo));
    if (ponteiroNo == NULL) {
        printf("Erro de memoria. Voce esta programando o Windows?\n");
    }
    ponteiroNo->dado = dado;
    ponteiroNo->prox = NULL;
    if (ponteiroInicio == NULL)
        ponteiroInicio = ponteiroNo;
    else {
        ponteiroNo->prox = ponteiroInicio;
        ponteiroInicio = ponteiroNo;
    }
}

void imprimirLista() {
    No* ponteiroNo;
    if (ponteiroInicio == NULL) {
        printf("Lista vazia.\n");
        return;
    }
    ponteiroNo = ponteiroInicio;
    while (ponteiroNo != NULL) {
        printf("[%d(%p)|%p]\n", ponteiroNo->dado, ponteiroNo, ponteiroNo->prox);
        ponteiroNo = ponteiroNo->prox;
    }
    printf("\n");
}

//Funcao que procura um dado dentro de cada lista.

void procurarDado(int dado) {
    No* ponteiroNo;
    bool valorEncontrado = false;
    if (ponteiroInicio == NULL) {
        printf("Lista vazia.\n");
        return;
    }
    if (ponteiroInicio != NULL) {
        ponteiroNo = ponteiroInicio;
        while (ponteiroNo != NULL) {
            if (ponteiroNo->dado == dado) {
                printf(" Valor '%d' encontrado no endereço: %p\n\n", ponteiroNo->dado, ponteiroNo);
                if (valorEncontrado == false) {
                    valorEncontrado = true;
                }
            }
            ponteiroNo = ponteiroNo->prox;
        }
        if (valorEncontrado == false) {
            printf(" Nenhum dado encontrado com o valor '%d'\n\n", dado);
        }
    }
}

void removerDaLista(int dado) {
    No* ponteiroNo;
    No* ponteiroAnterior = NULL;
    if (ponteiroInicio == NULL) {
        printf("Lista vazia.\n");
        return;
    }
    ponteiroNo = ponteiroInicio;
    bool pararLaco = false;
    while (pararLaco == false) {
        if (ponteiroNo->prox == NULL) {
            printf(" Nenhum dado foi encontrado com o valor '%d'.\n\n", dado);
            pararLaco = true;
        } else if (dado == ponteiroNo->dado) {
            pararLaco = true;
        } else {
            ponteiroAnterior = ponteiroNo;
            ponteiroNo = ponteiroNo->prox;
        }
    }
    if (ponteiroAnterior != NULL) {
        ponteiroAnterior->prox = ponteiroNo->prox;
    } else {
        ponteiroInicio = ponteiroNo->prox;
        ponteiroNo->prox = NULL;
    }
}

void main() {
    // Cria lista
    criarLista();

    // Insere na lista os numeros de 1 a 5
    for (int i = 1; i <= 5; i++)
        adicionarDado(i);

    // Imprime a lista
    imprimirLista();

    // Procura um dado na lista
    procurarDado(3);

    // Remove da lista
    removerDaLista(3);

    // Imprime a lista
    imprimirLista();
}
thayscr commented 5 years ago
Thays Correia da SIilva
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

// Define o tipo No contendo
typedef struct Item {
    int dado;
    struct Item *prox;
} No;

//Define o primeiro No da lista
No* ponteiroInicio = NULL;

// Funcao que define a lista como vazia.
void criarLista() {
    ponteiroInicio = NULL;
}
//Funcao que adiciona dados
void adicionarDado(int dado) {
    No* ponteiroNo;
    ponteiroNo = (No *) malloc(sizeof (ponteiroNo));
    if (ponteiroNo == NULL) {
        printf("Erro de memoria. Voce esta programando o Windows?\n");
    }
    ponteiroNo->dado = dado;
    ponteiroNo->prox = NULL;
    if (ponteiroInicio == NULL)
        ponteiroInicio = ponteiroNo;
    else {
        ponteiroNo->prox = ponteiroInicio;
        ponteiroInicio = ponteiroNo;
    }
}

void imprimirLista() {
    No* ponteiroNo;
    if (ponteiroInicio == NULL) {
        printf("Lista vazia.\n");
        return;
    }
    ponteiroNo = ponteiroInicio;
    while (ponteiroNo != NULL) {
        printf("[%d(%p)|%p]\n", ponteiroNo->dado, ponteiroNo, ponteiroNo->prox);
        ponteiroNo = ponteiroNo->prox;
    }
}
void BuscarDado(int dado){

    No* ponteiroNo;
    if(ponteiroInicio == NULL){
        printf("Lista Vazia");
        return;
    }
    ponteiroNo = ponteiroInicio;
    while(ponteiroNo != NULL){
        if(ponteiroNo->dado == dado)
            printf("[%d(%p)]\n",ponteiroNo->dado,ponteiroNo);
        ponteiroNo = ponteiroNo->prox;
    }
}
void RemoveDado(int dado){
    No *c, *antes;
   if (ponteiroInicio==NULL) {
      return ;  
     } else  {   
      c = ponteiroInicio;
      antes = ponteiroInicio;
      while (c !=NULL) {
         if (c->dado == dado) {
        if (c == ponteiroInicio) { // se esta removendo o primeiro da lista
              ponteiroInicio = ponteiroInicio->prox;
           free(c);
           return;
        } else  {
          antes->prox = c->prox;  // Refaz o encadeamento
          free(c);  // Libera o espaço do no
          return ;  
        }
     } else  {
        antes = c;
        c = c->prox;
     }
      }
      return ; 
  }
}
void main() {
    criarLista();
    // Insere na lista os numeros de 1 a 5

    for (int i = 1; i <= 5; i++)
    adicionarDado(i);
    imprimirLista();
    BuscarDado(5);
    RemoveDado(3);
    imprimirLista();
}
Samuel-Amaro commented 5 years ago

`/implemeta uma funçao para apagar um dado e seu respectivo no/ //aluno: Samuel Amaro

include

include

include

include

// Define o tipo No contendo typedef struct Item { int dado; struct Item *prox; } No;

//Define o primeiro No da lista, qeu com passa do program se torna o ultimo no No* ponteiroFinal = NULL;

// Funcao que define a lista como vazia. void criarLista() { ponteiroFinal = NULL; }

//Funcao que adiciona dados void adicionarDado(int dado) { No ponteiroNo; ponteiroNo = (No ) malloc(sizeof (ponteiroNo)); if (ponteiroNo == NULL) { printf("Erro de memoria. Voce esta programando o Windows?\n"); } ponteiroNo->dado = dado; ponteiroNo->prox = NULL; if (ponteiroFinal == NULL) ponteiroFinal = ponteiroNo; else { ponteiroNo->prox = ponteiroFinal; ponteiroFinal = ponteiroNo; } }

//função que imprime a lista void imprimirLista() { No* ponteiroNo; if (ponteiroFinal == NULL) { printf("Lista vazia.\n"); return; } ponteiroNo = ponteiroFinal; //if(ponteiroNo->prox == NULL) { //ponteiroNo = ponteiroNo->prox; //} while (ponteiroNo != NULL) { //verifica se um no tem o proximo no apontando como um nullo se tiver ele imprime o no e da uma mensagem //if(ponteiroNo->prox == NULL) { //printf("[%d(%p)|%d] -> No que foi Excluido!\n",ponteiroNo->dado,ponteiroNo,ponteiroNo->prox); //} printf("[%d(%p)|%p]\n", ponteiroNo->dado, ponteiroNo, ponteiroNo->prox);

    ponteiroNo = ponteiroNo->prox;
}

}

//função que busca um dado qualquer na lista

No buscaDados(int dado); No buscaDados(int dado) { No *percorreLista; percorreLista = ponteiroFinal; if(ponteiroFinal == NULL) { printf("No Vazio sem dado!\n"); } while(percorreLista != NULL) { if(percorreLista->dado == dado) { return percorreLista; } //começa do ultimo no e vai descendo a lista ate o no cabeça percorreLista = percorreLista->prox; }

}

//########################################################################################################################################## //função que remove um no que esta no meio void removeNoMeio(int dado); void removeNoMeio(int dado) { //recebe referencia do ultimo no criado No percorreLista = ponteiroFinal; //verifica se a lista esta vazia sem nenhum no if(percorreLista == NULL) printf("Lista Vazia!"); No noAntecessor; //armazenara um no antecessor de um no atual avaliado No *noSucessor; //armazenara um no sucessor ao um no avaliado //tentando remover um no no meio de dois nos while(percorreLista != NULL) {

  /*verificações abaixo para remover um no no meio*/
 //percorre minha lista para salvar todos os 'no' antes de um dado especifico
 if(percorreLista->dado != dado) {
    noAntecessor = percorreLista; //guarda o 'no' atual avaliado
    noSucessor = percorreLista->prox; // guadra o sucessor do 'no' avalido
 }
 //quando tenho um 'no' verifico se um no 'atual'  e oque estou buscando
 if(percorreLista->dado == dado)
 {
    //o antecessor desse no vai apontar para o sucessor do no atual avaliado
    noAntecessor->prox = noSucessor->prox;
    noSucessor->prox = NULL; // faço o no atual apontar para null
    free (noSucessor);// desaloco o no atual porque não uso mais
 }
 percorreLista = percorreLista->prox;

} }

//########################################################################################################### //remove um no no inicio void removeNoInicio(int dado); void removeNoInicio(int dado) { //recebe referencia do ultimo no criado No percorreLista = ponteiroFinal; //verifica se a lista esta vazia sem nenhum no if(percorreLista == NULL) printf("Lista Vazia!"); No noAntecessor; //armazenara um no antecessor de um no atual avaliado No noSucessor; //armazenara um no sucessor ao um no avaliado //tentando remover um no no meio de dois nos while(percorreLista != NULL) { //percorre minha lista para salvar todos os 'no' antes de um dado if(percorreLista->dado != dado) { noAntecessor = percorreLista; //guarda o 'no' atual avaliado noSucessor = percorreLista->prox; // guadra o sucessor do 'no' avalido } /veriificações para remover um 'no' no final da lista esse e o 'no' que aponta para null*/ if(percorreLista->prox == NULL){ //verifica se ele antes noAntecessor->prox = noSucessor->prox;//o antecessor desse no, recebe o 'no' que e o primeiro da lista, recebe oque ele aponta no casso null free (noSucessor); // e aqui desaloco o 'no' que e o atual que esta sendo avaliado } percorreLista = percorreLista->prox;

 }

}

//################################################################################################################################# //remove ultimo no da lista nem preciso percorre a lista porque ja pego o ponteiro de referencia e sei que nele logo esta o ultimo no void removeNoFinal(int dado); void removeNoFinal(int dado) { No *noAntecessor = ponteiroFinal; ponteiroFinal = ponteiroFinal->prox; free (noAntecessor);

}

void main() {

setlocale(LC_ALL,"Portuguese");
criarLista();
// Insere na lista os numeros de 1 a 5
for(int i = 1; i <= 5; i++)
    adicionarDado(i);
imprimirLista();
No* enderecoDado = buscaDados(4);
printf("Endereço de seu Dado em um no: %p\n",enderecoDado);
removeNoMeio(2);
imprimirLista();
removeNoInicio(1);
imprimirLista();
removeNoFinal(5);
imprimirLista();

}`

1234567890asdf commented 5 years ago

`//Cristiano Gomes Machado

include

include

include

// Define o tipo No contendo typedef struct No{ int dado; struct No *prox; } No;

void printFormat01(No ponteiroNo); void printFormat02(No ponteiroNo); //Define o ultimo No da lista No* ponteiroFinal = NULL;

//Funcao que adiciona dados void adicionarDado(int dado) { No ponteiroNo; ponteiroNo = (No ) malloc(sizeof (ponteiroNo)); ponteiroNo->dado = dado; ponteiroNo->prox = NULL; if (ponteiroFinal == NULL) ponteiroFinal = ponteiroNo; else { ponteiroNo->prox = ponteiroFinal; ponteiroFinal = ponteiroNo; } }

//Funcao que imprime a lista void imprimirLista() { No* ponteiroNo; if (ponteiroFinal == NULL) { printf("Lista vazia.\n"); return; } ponteiroNo = ponteiroFinal; while (ponteiroNo != NULL) { if (ponteiroNo->prox !=NULL){ printFormat01(ponteiroNo); }else{ printFormat02(ponteiroNo); } ponteiroNo = ponteiroNo->prox; }

}

void printFormat01(No ponteiroNo){ printf("[%d(%p)|%p]\n", ponteiroNo->dado, ponteiroNo, ponteiroNo->prox); printf(" |\n"); printf(" V\n"); printf(" -------------\n"); printf(" |\n"); printf(" V\n"); } void printFormat02(No ponteiroNo){ printf("[%d(%p)|%p]\n", ponteiroNo->dado, ponteiroNo, ponteiroNo->prox); printf(" |\n"); printf(" V\n"); printf(" NULL\n"); }

void buscarDado(int dado){ No* ponteiroNo; if (ponteiroFinal == NULL) { printf("Lista vazia.\n"); return; } ponteiroNo = ponteiroFinal; while (ponteiroNo != NULL) { if (ponteiroNo->dado == dado) printf("[%d(%p)]\n", ponteiroNo->dado, ponteiroNo); ponteiroNo = ponteiroNo->prox; } }

void removerDado(int dado) { No ponteiroNo, ponteiroAnterior; if (ponteiroFinal == NULL) {// lista vazia return; } else { // lista NAO vazia ponteiroNo = ponteiroFinal; ponteiroAnterior = ponteiroFinal; while (ponteiroNo != NULL) { if (ponteiroNo->dado == dado){ if (ponteiroNo == ponteiroFinal){// removendo o primeiro ponteiroFinal = ponteiroFinal->prox; free(ponteiroNo);// libera memoria return; } else{ // removendo do meio ponteiroAnterior->prox = ponteiroNo->prox;//refaz links free(ponteiroNo);// libera memoria return; } } else{ // continua procurando na lista ponteiroAnterior = ponteiroNo; ponteiroNo = ponteiroNo->prox; } } return; } } const remove = (node) => { if(lenght === 0)

return if(node === head){

head = node.next

return

} let currentNode = head

while(currentNode.next && currentNode.next != node){

currentNode = currentNode.next

} return{

remove(node) => remove(node)

} console.log(currentNode)

let node = list.getByValue(2)

console.log(node) list.remove(node)

    let currentNode = head

while(currentNode.next && currentNode.next != node){

currentNode = currentNode.next

}

currentNode.next = node.next

    list.add2(4)

let node = list.getByValue(3)

console.log(node)

list.remove(node)

imprimirLista(); }

int main() { // Insere na lista os numeros de 1 a 3 for (int i = 1; i <= 3; i++) adicionarDado(i); imprimirLista();

removerDado(3);
imprimirLista();

buscarDado(3);

system("pause");
return 0;

}`

Judy-Ellen commented 5 years ago

Judy Ellen Vera Marins 20171070130234

include

include

include

typedef struct Item { int dado; struct Item *prox; } No;

No* ponteiroI = NULL;

void criarLista() { ponteiroI = NULL; } void adicionarDado(int dado) { No ponteiroNo; ponteiroNo = (No ) malloc(sizeof (ponteiroNo)); if (ponteiroNo == NULL) { printf("Erro de memoria. Voce esta programando o Windows?\n"); } ponteiroNo->dado = dado; ponteiroNo->prox = NULL; if (ponteiroI == NULL) ponteiroI = ponteiroNo; else { ponteiroNo->prox = ponteiroI; ponteiroI = ponteiroNo; } }

void imprimirLista() { No* ponteiroNo; if (ponteiroI == NULL) { printf("Lista vazia.\n"); return; } ponteiroNo = ponteiroI; while (ponteiroNo != NULL) { printf("[%d(%p)|%p]\n", ponteiroNo->dado, ponteiroNo, ponteiroNo->prox); ponteiroNo = ponteiroNo->prox; } } void BuscarDado(int dado){

No* ponteiroNo;
if(ponteiroI == NULL){
    printf("Lista Vazia");
    return;
}
ponteiroNo = ponteiroI;
while(ponteiroNo != NULL){
    if(ponteiroNo->dado == dado)
        printf("[%d(%p)]\n",ponteiroNo->dado,ponteiroNo);
    ponteiroNo = ponteiroNo->prox;
}

} void RemoveDado(int dado){ No c, antes; if (ponteiroI==NULL) { return ;
} else {
c = ponteiroI; antes = ponteiroI; while (c !=NULL) { if (c->dado == dado) { if (c == ponteiroI) { // se esta removendo o primeiro da lista ponteiroI = ponteiroI->prox; free(c); return; } else { antes->prox = c->prox; // Refaz o encadeamento free(c); // Libera o espaço do no return ;
} } else { antes = c; c = c->prox; } } return ; } } void main() { criarLista(); // Insere na lista os numeros de 1 a 10

for (int i = 1; i <= 10; i++)
adicionarDado(i);
imprimirLista();
BuscarDado(7);
RemoveDado(9);
imprimirLista();

}

MatheusMagga commented 5 years ago

//Matheus de Almeida Magalhães

include

include

include

include

// Define o tipo No contendo

typedef struct Item { int dado; struct Item prox; } No; //Define o primeiro No da lista No inicio = NULL; // Funcao que define a lista como vazia.

void criarLista() { inicio = NULL; }

void adicionarDado(int dado) { No no; no = (No )malloc(sizeof(No)); if (no == NULL) { printf("Erro de memoria. Voce esta programando o Windows?\n"); } no->dado = dado; no->prox = NULL; if (inicio == NULL) inicio = no; else { no->prox = inicio; inicio = no; } }

void imprimirLista() { No *ponteiroNo; if (inicio == NULL) { printf("Lista vazia.\n"); return; } ponteiroNo = inicio; while (ponteiroNo != NULL) { printf("[%d(%p)|%p]\n", ponteiroNo->dado, ponteiroNo, ponteiroNo->prox); ponteiroNo = ponteiroNo->prox; } }

void buscar() { int num; No *ponteiroNo; printf("Qual número você quer buscar? "); scanf("%d", &num);

ponteiroNo = inicio;

while (ponteiroNo != NULL)
{
    if (ponteiroNo->dado == num)
    {
        printf("Número %d encontrado: %p\n", num, ponteiroNo);
    }
    ponteiroNo = ponteiroNo->prox;
}

}

void excluir() { int dado; printf("Qual número você quer excluir? "); scanf("%d", &dado);

No *ponteiroAtual, *ponteiroAnterior = NULL;
if (inicio == NULL)
{
    printf("Lista vazia.\n");
    return;
}
ponteiroAtual = inicio;
bool parar = false;
while (parar == false)
{
    if (ponteiroAtual->prox == NULL)
    {
        printf(" Nenhum dado foi encontrado com o valor '%d'.\n\n", dado);
        parar = true;
    }
    else if (dado == ponteiroAtual->dado)
    {
        parar = true;
    }
    else
    {
        ponteiroAnterior = ponteiroAtual;
        ponteiroAtual = ponteiroAtual->prox;
    }
}
if (ponteiroAnterior != NULL)
{
    ponteiroAnterior->prox = ponteiroAtual->prox;
}
else
{
    inicio = ponteiroAtual->prox;
    ponteiroAtual->prox = NULL;
}

}

void main() { No *aux; criarLista(); // Insere na lista os numeros de 1 a 5 for (int i = 1; i <= 5; i++) adicionarDado(i); buscar(); excluir(); imprimirLista(); }

ghost commented 5 years ago

Guilherme Henrique Lopes de Almeida Saraiva


#include <stdio.h>
#include <stdlib.h>
//Declaration of the structs.
struct Bloc{
    int item;
    struct Bloc *nextNeighbor;
};
typedef struct Bloc Node;
//Universal variables.
Node *addressNode = NULL;

//Functions prototype.
int Creator(Node**, int );
void Reader(Node*);
void DeleteIt(Node**, int );

//CRD

int Creator(Node **blocAddress, int item){
    Node *newBloc = (Node*)malloc(sizeof(blocAddress));
    newBloc->item = item;
    newBloc->nextNeighbor = (*blocAddress);
    (*blocAddress) = newBloc;   
}
void Reader(Node *blocAddress){
    while (blocAddress != NULL){
        printf("%p|%02d|%p\n", blocAddress, blocAddress->item, blocAddress->nextNeighbor);
        blocAddress = blocAddress->nextNeighbor;
    }
}

void DeleteIt(Node **blocAddress, int item){
    if(*blocAddress == NULL){
        puts("Linked list empty!");
        return;
    }
    Node *temp = *blocAddress;
    if (item == 0){ 
        *blocAddress = temp->nextNeighbor;
        free(temp);                
        return; 
    } 
    for (int i = 0; temp!=NULL && i<item-1; i++)
         temp = temp->nextNeighbor;

    if (temp == NULL || temp->nextNeighbor == NULL) 
         return; 

    Node *next = temp->nextNeighbor->nextNeighbor; 

    free(temp->nextNeighbor);

    temp->nextNeighbor = next;
} 

//Begin of function main.
int main(){
    for(int item = 10; item != 0; item--)
        Creator(&addressNode, item);
    Reader(addressNode);
    puts("Select a number for delete: ");
    int select;
    scanf("%d", &select);
    DeleteIt(&addressNode, select - 1);
    Reader(addressNode);
    return 0;
}
markaureliosc commented 5 years ago

//Marco Aurélio Santana Cruz

include

include

include

// Define o tipo No contendo

typedef struct No { int dado; struct No prox; } No; //Define o primeiro No da lista No ponteiroInicio = NULL; // Funcao que define a lista como vazia.

void criarLista() { ponteiroInicio = NULL; } //Funcao que adiciona dados

void adicionarDado(int dado) { No ponteiroNo; ponteiroNo = (No ) malloc(sizeof (ponteiroNo)); if (ponteiroNo == NULL) { printf("Erro de memoria. Voce esta programando o Windows?\n"); } ponteiroNo->dado = dado; ponteiroNo->prox = NULL; if (ponteiroInicio == NULL) ponteiroInicio = ponteiroNo; else { ponteiroNo->prox = ponteiroInicio; ponteiroInicio = ponteiroNo; } } //Funcao que imprime a lista

void imprimirLista() { No* ponteiroNo; if (ponteiroInicio == NULL) { printf("Lista vazia.\n"); return; } ponteiroNo = ponteiroInicio; while (ponteiroNo != NULL) { printf("[%d(%p)|%p]\n", ponteiroNo->dado, ponteiroNo, ponteiroNo->prox); ponteiroNo = ponteiroNo->prox; } }

void buscarLista(int dado) { No*ponteiroNo; if (ponteiroInicio == NULL) { printf("Está vazio"); }

ponteiroNo = ponteiroInicio;
while (ponteiroNo != NULL) {
    if (ponteiroNo->dado == dado) {
        printf("Item da busca: \n[%d(%p)]\n", ponteiroNo->dado, ponteiroNo);
    }
    ponteiroNo = ponteiroNo->prox;
}

}

void deletarLista(int dado) { No ant, a; if (ponteiroInicio == NULL) { return; }

a = ponteiroInicio;
ant = ponteiroInicio;

while (a != NULL) {
    if (a->dado == dado) {
        if (a == ponteiroInicio) {
            ponteiroInicio = ponteiroInicio->prox;
            free(a);
        }
        if (a != ponteiroInicio) {
            ant->prox = a->prox;
            free(a);
        }
    } else {
        ant = a;
        a = a->prox;
    }
}
while (ponteiroInicio != NULL) {
    printf("[%d(%p)|%p]\n", ponteiroInicio->dado, ponteiroInicio, ponteiroInicio->prox);
    ponteiroInicio = ponteiroInicio->prox;
}

}

void main() { criarLista(); // Insere na lista os numeros de 1 a 5 for (int i = 1; i <= 5; i++) adicionarDado(i); imprimirLista(); buscarLista(5); printf("\n"); printf("Item deleteado: 1\n"); deletarLista(1); }

gearle01 commented 5 years ago

Gearle Soares

include

include

include

typedef struct Item { int dado; struct Item prox; } No; No inicio = NULL; No ponteiroNo; //--------------------------------criar lista----------------------------- void criarLista() { inicio = NULL; } //-------------------------------add dado-------------------------------- void adicionarDado(int dado) { No no; no = (No ) malloc(sizeof (No)); if (no == NULL) { printf("Erro de memoria. Voce esta programando o Windows?\n");} no->dado = dado; no->prox = NULL; if (inicio == NULL) inicio = no; else { no->prox = inicio; inicio = no; } } //--------------------------------imprime----------------------------- void imprimirLista() { No ponteiroNo; if (inicio == NULL) { printf("Lista vazia.\n"); return; } ponteiroNo = inicio; while (ponteiroNo != NULL) { printf("[%d(%p)|%p]\n", ponteiroNo->dado, ponteiroNo, ponteiroNo->prox); ponteiroNo = ponteiroNo->prox; } } //--------------------------------busca------------------------------ void buscar(int b){ No bus; bus = inicio; while(bus != NULL){ if(bus->dado == b){ printf("A busca:%d\n",bus->dado); }
bus = bus->prox; } } //----------------------------------remove----------------------------- int Removerfim(){ No
ptr; if (inicio==NULL) return 0; else{ ptr = inicio; inicio = inicio->prox; free(ptr); return 1; } } int RemoverMeio(int dado){ No ptr, antes; if (inicio==NULL){ return 0; } else{ ptr = inicio; antes = inicio; while (ptr !=NULL){ if (ptr->dado == dado){ if (ptr == inicio) { inicio = inicio->prox; free(ptr); return 1; } else{ antes->prox = ptr->prox;
free(ptr);
return 1; } } else{ antes = ptr; ptr = ptr->prox; } } return 0; } }

void main() {

criarLista();

for (int i = 1; i <= 10; i++) adicionarDado(i); imprimirLista(); Removerfim();
imprimirLista(); printf("\n");

RemoverMeio(1);
imprimirLista(); printf("\n");

RemoverMeio(5);
imprimirLista(); }

jvitor7085 commented 5 years ago

//José Vitor

include

include

include

// Define o tipo No contendo typedef struct Item { int dado; struct Item *prox; } No;

//Define o primeiro No da lista No* ponteiroInicio = NULL;

// Funcao que define a lista como vazia. void criarLista() { ponteiroInicio = NULL; }

//Funcao que adiciona dados void adicionarDado(int dado) { No ponteiroNo; ponteiroNo = (No ) malloc(sizeof (ponteiroNo)); if (ponteiroNo == NULL) { printf("Erro de memoria. Voce esta programando o Windows?\n"); } ponteiroNo->dado = dado; ponteiroNo->prox = NULL; if (ponteiroInicio == NULL) ponteiroInicio = ponteiroNo; else { ponteiroNo->prox = ponteiroInicio; ponteiroInicio = ponteiroNo; } }

void imprimirLista() { No ponteiroNo; if (ponteiroInicio == NULL) { printf("Lista vazia.\n"); return; } ponteiroNo = ponteiroInicio; while (ponteiroNo != NULL) { printf("[%d(%p)|%p]\n", ponteiroNo->dado, ponteiroNo, ponteiroNo->prox); ponteiroNo = ponteiroNo->prox; } } void buscarDado(int dado){ No ponteiroNo; if(ponteiroInicio == NULL){ printf("Lista Vazia"); return; } ponteiroNo = ponteiroInicio; while(ponteiroNo != NULL){ if(ponteiroNo->dado == dado) printf("[%d(%p)]\n",ponteiroNo->dado,ponteiroNo); ponteiroNo = ponteiroNo->prox; } } void removeDado(int dado){ //função para remover dados da lista. No posicao1,posicao2; if (ponteiroInicio == NULL) { printf("lista vazia"); return; } posicao1=ponteiroInicio; posicao2=ponteiroInicio; do{ if (posicao1->dado == dado) { if (posicao1 == ponteiroInicio) { ponteiroInicio = ponteiroInicio->prox; free(posicao1); return; } else { posicao2->prox = posicao1->prox; free(posicao1); return ; } } posicao2 = posicao1; posicao1 = posicao1->prox; }while(posicao1!=NULL); return ; } void main() { criarLista(); // Insere na lista os numeros de 1 a 5 for (int i = 1; i <= 5; i++) adicionarDado(i); imprimirLista(); printf("----------------------\n"); buscarDado(2); removeDado(2); printf("----------------------\n"); imprimirLista(); }