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

Exe06 - Pilha com Lista Encadeada #11

Closed waldeyr closed 5 years ago

gustavohgarcez commented 5 years ago

Gustavo Henrique Garcez Andrade

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

// 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){
                    ponteiroFinal->prox = ponteiroNo->prox;//refaz links
                    ponteiroFinal = ponteiroFinal->prox;
                    free(ponteiroNo);// libera memoria
            } 
            else{ // continua procurando na lista
                ponteiroAnterior = ponteiroNo;
                ponteiroNo = ponteiroNo->prox;
            }
        }
        return;
    }
}

void main() {
    // Insere na lista os numeros de 1 a 3
    for (int i = 1; i <= 4; i++)
        adicionarDado(i);
    imprimirLista();
    removerDado(4);
    printf("--------------\n\n");
    imprimirLista();
}
LarissaJacobina commented 5 years ago

Larissa Jacobina

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

// Define o tipo No contendo

typedef struct No {
    int dado;
    struct No *prox;
} No;
//lambida calculo

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) {
                ponteiroFinal->prox = ponteiroNo->prox;
                ponteiroFinal = ponteiroFinal->prox;
                free(ponteiroNo); // libera memoria
                return;
            }
            else { // continua procurando na lista
                ponteiroAnterior = ponteiroNo;
                ponteiroNo = ponteiroNo->prox;
            }
        }
        return;
    }
}

void main() {
    // Insere na lista os numeros de 1 a 3
    for (int i = 1; i <= 4; i++)
        adicionarDado(i);
    imprimirLista();
    removerDado(1);
    printf("--------------\n");
    imprimirLista();
    //buscarDado(3);
}
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 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;
    }
}

void removerDadoFila(int dado)
{
    No *ponteiroNo, *ponteiroAnterior;
    No *ponteiroPrimeiro;

    int dadoRemovido = 0;
    int existe = 0;

    if (ponteiroFinal == NULL) // lista vazia
        return; 
    else // lista NAO vazia
    {
        ponteiroNo = ponteiroFinal;
        ponteiroAnterior = ponteiroFinal;

        // While para conferir se o dado existe
        while(ponteiroNo != NULL && existe == 0)
        {
            if(ponteiroNo->dado == dado )
                existe = 1;
            else
                ponteiroNo = ponteiroNo->prox;
        }

        if(existe == 1)
        {
            ponteiroNo = ponteiroFinal;

            // While para salvar o primeiro e o segundo ponteiro
            while( ponteiroNo != NULL )
            {
                if( ponteiroNo->prox == NULL )
                    ponteiroPrimeiro = ponteiroNo;
                else
                {
                    ponteiroNo = ponteiroNo->prox;
                    ponteiroAnterior = ponteiroNo;
                }
            }

            // While para apagar os dados ate achar o NO onde contem o dado procurado
            while(dadoRemovido == 0)
            {
                if( ponteiroPrimeiro->dado == dado )
                {
                    free(ponteiroPrimeiro);
                    dadoRemovido = 1;
                }
                else
                {
                    free(ponteiroPrimeiro);
                    ponteiroPrimeiro = ponteiroAnterior;
                    ponteiroPrimeiro->prox == NULL;

                    ponteiroNo = ponteiroFinal;

                    // While para determinar o novo SEGUNDO ponteiro
                    while( ponteiroNo != ponteiroPrimeiro )
                    {
                        ponteiroNo = ponteiroNo->prox;
                        ponteiroAnterior = ponteiroNo;
                    }
                }
            }
        }
        return;
    }   
}

void removerDadoPilha(int dado)
{
    No *ponteiroNo, *ponteiroARemover;

    int dadoRemovido = 0;
    int existe = 0;

    if (ponteiroFinal == NULL) // lista vazia
        return; 
    else
    { 
        ponteiroNo = ponteiroFinal;

        // While para conferir se o dado existe
        while(ponteiroNo != NULL && existe == 0)
        {
            if(ponteiroNo->dado == dado )
                existe = 1;
            else
                ponteiroNo = ponteiroNo->prox;
        }

        if(existe == 1)
        {
            ponteiroNo = ponteiroFinal;

            while( dadoRemovido == 0 )
            {
                if( ponteiroNo->dado == dado )
                {
                    free(ponteiroNo);
                    dadoRemovido = 1;
                }
                else
                {
                    ponteiroARemover = ponteiroNo;
                    ponteiroNo = ponteiroNo->prox;
                    free(ponteiroARemover);
                }
            }
        }
        return;
    }
}

void main() {
    // Insere na lista os numeros de 1 a 3
    for (int i = 1; i <= 4; i++)
        adicionarDado(i);
    imprimirLista();
    removerDado(2);
    printf("--------------\n");
    imprimirLista();
    buscarDado(3);
}
thayscr commented 5 years ago
//Thays Correia 
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

// 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;
No *ponteiroNo, *ponteiroAnterior;
//Funcao que adiciona dados

void adicionarDado(int dado) {
    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() {
    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) {
    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) {
    if (ponteiroFinal == NULL) {// lista vazia
        return;
    } else { // lista NAO vazia
        ponteiroNo = ponteiroFinal;
        ponteiroAnterior = ponteiroFinal;
        while (ponteiroNo != NULL) {
            if (ponteiroNo->dado == dado) {
                ponteiroFinal->prox = ponteiroNo->prox; //refaz links
                ponteiroFinal = ponteiroFinal->prox;
                free(ponteiroNo); // libera memoria  
            }
            else {
                ponteiroAnterior = ponteiroNo;
                ponteiroNo = ponteiroNo->prox;
            }
        }
        return;
    }
}

void main() {
    // Insere na lista os numeros de 1 a 3
    for (int i = 1; i <= 4; i++)
        adicionarDado(i);
    imprimirLista();
    removerDado(1);
    printf("--------------\n");
    imprimirLista();

}
joycebraga commented 5 years ago
//Joyce Braga Silva de Jesus

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

// 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;

No* ponteiroAnterior = NULL;

No* ponteiroNo = NULL;

//Funcao que adiciona dados
void adicionarDado(int dado) {
    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() {
    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){
    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 removerPilha(int dado) {
    if (ponteiroFinal == NULL) {// lista vazia
        return; 
    } else { // lista NAO vazia
        ponteiroNo = ponteiroFinal;
        ponteiroAnterior = ponteiroFinal;
        while (ponteiroNo != NULL) {
            if (ponteiroNo->dado == dado){
                ponteiroFinal->prox = ponteiroFinal->prox;
                ponteiroFinal = ponteiroFinal->prox;
                free(ponteiroNo);// libera memoria
                return;  
            } 
            else{ // continua procurando na lista
                ponteiroAnterior = ponteiroNo;
                ponteiroNo = ponteiroNo->prox;
            }
        }
        return;
    }
}

void main() {
    // Insere na lista os numeros de 1 a 3
    for (int i = 1; i <= 4; i++)
        adicionarDado(i);
    imprimirLista();
    removerPilha(2);
    printf("--------------\n");
    imprimirLista();
    buscarDado(3);
}
Samuel-Amaro commented 5 years ago

//aluno: Samuel Amaro Do Nascimento
/*EXEMPLO DE CODIGO DO PROFESSOR,DEMOSTRANDO COMO FUNCIONA UMA LISTA SIMPLES ENCADEADA , Estrutura de Dados*/
//IMPLEMETA UMA LISTA DO TIPO PILHA NA FUNÇÃO REMOVE NO
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

// 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, meio que inicializa a lista como NULL
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"); //signifca que a lista esta vazia não tem nenhum no criado
        return;
    }
    ponteiroNo = ponteiroFinal; // recebe a referencia do ultimo no criado
    while (ponteiroNo != NULL) { //percorre a lista
        if(ponteiroNo->dado == dado) // o dado do no atual e o mesmo dado que quero achar como parametro
            printf("[%d(%p)]\n", ponteiroNo->dado, ponteiroNo); //imprimi o no atual com seu respectivo dado
        ponteiroNo = ponteiroNo->prox; // atualiza o no
    }
}

//função remove no com implemetação de uma remoção em base de uma lista encadeada so que remoção de no do tipo de uma pilha
void removeNo(int dado);
void removeNo(int dado) {
 No *percorreLista;
 percorreLista = ponteiroFinal;
 No *apaga;
 //verifica se a lista esta vazia sem nenhum no
 if(ponteiroFinal == NULL) {
    printf("Lista Vazia Sem No!\n");
 }

 while(percorreLista != NULL) {
       //APAGA TODO NO QUE E DIFERENTE DO QUE PROCURO
       if(percorreLista->dado != dado) {
          apaga = percorreLista;
          percorreLista = percorreLista->prox;
          ponteiroFinal = percorreLista; 
          free (apaga);
       }
       //APAGA NO QUE PROCURO E SAI DO WHILE LOGO EM SEGUIDA
        else { 
             apaga = percorreLista;
             percorreLista = percorreLista->prox;
             ponteiroFinal = percorreLista;
             free (apaga); 
             break;
          }
 }
}

void main() {
    // Insere na lista os numeros de 1 a 4
    for (int i = 1; i <= 4;i++)
         adicionarDado(i); //ao invez de chamar a função 4 vezes eu passo a variavel iteradora do for
    imprimirLista();
    removeNo(2);
    imprimirLista();
    //buscarDado(3);
}
dyegolv commented 5 years ago
//Aluno Dyego Rodrigues
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

// 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) {
                ponteiroFinal->prox = ponteiroNo->prox;
                ponteiroFinal = ponteiroFinal->prox;
                free(ponteiroNo); // libera memoria
                return;
            }
            else { // continua procurando na lista
                ponteiroAnterior = ponteiroNo;
                ponteiroNo = ponteiroNo->prox;
            }
        }
        return;
    }
}

int main() {
    // Insere na lista os numeros de 1 a 3
    for (int i = 1; i <= 4; i++)
        adicionarDado(i);
    imprimirLista();
    removerDado(2);
    printf("--------------\n");
    imprimirLista();
    buscarDado(3);
    return 0;
}
Vanderson11 commented 5 years ago

Vanderson leite campos

include

include

include

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

void printFormat01(No ponteiroNo); void printFormat02(No ponteiroNo);

No* ponteiroFinal = NULL;

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;
}

}

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 removerDadoPilha(int dado) {

No *ponteiroNo;

if (ponteiroFinal == NULL) {
    return; 

} else { 
    ponteiroNo = ponteiroFinal;

    while (ponteiroNo != NULL) {
        if (ponteiroNo->dado == dado){
                ponteiroFinal->prox = ponteiroNo->prox;
                ponteiroFinal = ponteiroFinal->prox;
                free(ponteiroNo);
        } 
        else{               
            ponteiroNo = ponteiroNo->prox;
        }
    }
    return;
}

}

void main() {

for (int i = 1; i <= 4; i++)
    adicionarDado(i);

    imprimirLista();
    removerDadoPilha(2);
    printf("--------------\n\n");

    imprimirLista();

}

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; 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 removerDadoPilha(int dado) { No ponteiroNo; No ponteiroAnterior;

if (ponteiroNo == NULL) {
    return;

} else {
    ponteiroNo = ponteiroFinal;
    ponteiroAnterior = ponteiroFinal;

    while (ponteiroNo != NULL) {
        if (ponteiroNo->dado == dado) {
            ponteiroFinal->prox = ponteiroNo->prox;
            ponteiroFinal = ponteiroFinal->prox;
            free(ponteiroNo);
            return;

        } else {
            ponteiroAnterior = ponteiroNo;
            ponteiroFinal = ponteiroNo->prox;

        }
    }
    return;
}

}

void main() { // Insere na lista os numeros de 1 a 5 for (int i = 1; i <= 5; i++) adicionarDado(i); imprimirLista(); printf("\n-----------------------------------------------------------------------------\n"); removerDadoPilha(1); imprimirLista(); buscarDado(0); }

Tainara-Ataides commented 5 years ago

Tainara Moura

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 (ponteiroFinal == ponteiroNo ){// 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; } }

void main() { // Insere na lista os numeros de 1 a 3 for (int i = 1; i <= 4; i++) adicionarDado(i); imprimirLista(); removerDado(2); printf("--------------\n"); imprimirLista(); buscarDado(); }