Closed waldeyr closed 5 years ago
Vanderson Leite Campos
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 removerDadoFila(int dado) {
No ponteiroNo,ponteiroF;
if (ponteiroFinal == NULL) { return;
} else { ponteiroNo = ponteiroFinal; ponteiroF = ponteiroFinal;
while (ponteiroNo != NULL) {
if (ponteiroNo->dado == dado){
ponteiroF->prox = NULL;
free(ponteiroNo);
return;
}
else{
ponteiroF = ponteiroNo;
ponteiroNo = ponteiroNo->prox;
}
}
return;
}
}
void main() {
for (int i = 1; i <= 10; i++) adicionarDado(i);
imprimirLista();
removerDadoFila(6);
printf("--------------\n\n");
imprimirLista();
}
/*EXEMPLO DE CODIGO DO PROFESSOR,DEMOSTRANDO COMO FUNCIONA UMA LISTA SIMPLES ENCADEADA , Estrutura de Dados*/
/*Implementa uma fila na função remove no*/
//Aluno: Samuel Amaro do Nascimento
#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 cria um primeiro no e aloca um novo no sempre que e criado
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;
while (ponteiroNo != NULL) {
if (ponteiroNo->dado == dado)
printf("[%d(%p)]\n", ponteiroNo->dado, ponteiroNo);
ponteiroNo = ponteiroNo->prox;
}
}
//função que remove um no, assumindo como base a remoção de uma lista do tipo fila
void removeNo(int dado);
void removeNo(int dado) {
No *percorreLista,*noAnterior;
percorreLista = ponteiroFinal;
noAnterior = percorreLista;
//verifica se a lista esta vazia
if(ponteiroFinal == NULL) {
printf("Lista Vazia Sem Nenhum No!");
}
//percorre a lista ate o primeiro no e sempre guarda seu antecessor
while(percorreLista->prox != NULL) {
//acha num respectivo no atraves de um dado vindo por parametro, salva seu antecessor em caso se for o primeiro ou um no entre primeiro ou ultimo, no caso do ultimo so sai do while e não salva antecessor
if(percorreLista->dado == dado) {
break;
}
else {
//guarda o antecessor do no atual avaliado
noAnterior = percorreLista;
}
percorreLista = percorreLista->prox; //atualiza para o proximo no
}
//para remover o ultimo no, o while executou uma vez e trouxe de referncia o ultimo no da lista guardado no ponteiro controlador
if(percorreLista == ponteiroFinal) { //se meu ponteiro controlador da lista e igual o ponteiro global de referencia da lista
//vai apaga todos os nos da lista so que de cima para baixo
while (percorreLista != NULL) {
No *aux;
aux = percorreLista;
//serve para o ultimo caso quando chego ao pimeiro no ele e nullo, apaga se ele
if(percorreLista->prox == NULL) {
free(percorreLista);
break;
}
percorreLista = percorreLista->prox; //atualiza a lista para ir para o proximo no
free(aux); //apaga um no atual avaliado
}
ponteiroFinal = NULL; //atualiza o ponteiro final para mostrar que a lista esta vazia todos nos foram apagados
}
//remove um primeiro no da lista, o while inicial executa ate chegar o primeiro no e tras seu antecessor
if(percorreLista->prox == NULL && percorreLista->dado == dado) {
noAnterior->prox = NULL;
No *aux;
aux = percorreLista;
free (aux);
percorreLista = noAnterior;
}
else {
//para remover um no qualquer entre o ultimo e primeiro, recebe o anterior desse no, faço o anterior do no atual ele apontar para null, e desaloco todos os nos sucessores desse no atual
while(percorreLista != NULL) {
No *aux;
aux = percorreLista;
percorreLista = percorreLista->prox;
free(aux);
noAnterior->prox = NULL;
}
}
}
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(4);
imprimirLista();
buscarDado(4);
}
/ File: main.c Author: Judy Ellen/
typedef struct No{ int dado; struct No *prox; } No;
void printFormatacaoA(No ponteiroNo); void printFormatacaoB(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){ printFormatacaoA(ponteiroNo); }else{ printFormatacaoB(ponteiroNo); } ponteiroNo = ponteiroNo->prox; }
}
void printFormatacaoA(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 printFormatacaoBN(o* 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 removerDadoFila(int dado) {
No ponteiroNo,ponteiroF;
if (ponteiroFinal == NULL) { return;
} else { ponteiroNo = ponteiroFinal; ponteiroF = ponteiroFinal;
while (ponteiroNo != NULL) {
if (ponteiroNo->dado == dado){
ponteiroF->prox = NULL;
free(ponteiroNo);
return;
}
else{
ponteiroF = ponteiroNo;
ponteiroNo = ponteiroNo->prox;
}
}
return;
}
}
void main() {
for (int i = 1; i <= 10; i++) adicionarDado(i);
imprimirLista(); removerDadoFila(6); printf("--------------\n\n");i mprimirLista(); }