15
Fundamentos de Programação 1 Slides 22 Prof.ª Fabiany e Prof. SIMÃO Linguagem C “Lista Duplamente Encadeada - Projeto com vários Arquivos”.

Fundamentos1 SlidesC22 2008-10-22

Embed Size (px)

DESCRIPTION

computação informatica programação c linguagem utfpr 2015 engenharia mecanica

Citation preview

Page 1: Fundamentos1 SlidesC22 2008-10-22

Fundamentos de Programação 1

Slides 22

Prof.ª Fabiany e Prof. SIMÃO

Linguagem C“Lista Duplamente Encadeada

-Projeto com vários Arquivos”.

Page 2: Fundamentos1 SlidesC22 2008-10-22

#ifndef _LISTAENCADEADA_H_#define _LISTAENCADEADA_H_

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

struct Elemento{

char nome [100];char rua [100];char cidade [100];char estado [2];char cep [10]; struct Elemento* proximo;struct Elemento* anterior;

};

structstruct ListaLista{{

structstruct ElementoElemento** primeiroprimeiro;;structstruct ElementoElemento** ultimoultimo; ;

};};

char menu ();void inicia_lista ();void cadastra ();void mostra ();void mostraReverso ();void limpaLista ();

#endif

ListaEncadeada.h

Projeto em Dev C++

struct elementoNomeRua

CidadeEstadoCEP

primeiro

proxant

NULL

Minha Lista

NULL

ultimo

Page 3: Fundamentos1 SlidesC22 2008-10-22

void cadastra() { system ( "cls" ); printf ("\n \n \n");

register int i;

struct Elemento* novo;novo = malloc ( 1 * sizeof (struct Elemento) );novonovo-->>proximoproximo = NULL;= NULL;novonovo-->>anterior anterior = NULL;= NULL;

printf ( " Nome: \n" );fflush ( stdin ); gets ( novo->nome );

printf ( " Rua: \n" );fflush ( stdin ); gets ( novo->rua );

printf ( " Cidade: \n" );fflush ( stdin ); gets ( novo->cidade );

printf ( " Estado: \n" );fflush ( stdin ); gets ( novo->estado );

printf ( " CEP: \n" );fflush ( stdin ); gets ( novo->cep );

if ( NULL == MinhaLista.primeiro ){

MinhaLista.primeiro = novo;MinhaLista.ultimo = MinhaLista.primeiro;

}else{

MinhaListaMinhaLista..ultimoultimo-->>proximoproximo = = novonovo;;novonovo-->>anterior anterior == MinhaListaMinhaLista..ultimoultimo;;MinhaListaMinhaLista..ultimo ultimo == novonovo;;

}}

#include "ListaEncadeada.h"

struct Lista MinhaLista;

void inicia_lista (){

MinhaLista.primeiro = NULL;

MinhaLista.ultimo = NULL;

}

ListaEncadeada.c

char menu (){

printf ("\n \n \n"); char opcao;

printf ( " (C)adastrar. \n" );printf ( " (M)ostrar. \n" );printfprintf ( " ( " Mostrar (R)Mostrar (R)eversamenteeversamente. . \\n" );n" );printf ( " (T)erminar. \n" );

fflush ( stdin );scanf ( "%c", & opcao );

return opcao;}

Page 4: Fundamentos1 SlidesC22 2008-10-22

#include "ListaEncadeada.h"

struct Lista MinhaLista;

void inicia_lista (){

MinhaLista.primeiro = NULL;

MinhaLista.ultimo = NULL;

}

ListaEncadeada.c

struct elementoNomeRua

CidadeEstadoCEP

NULL

primeiro

prox

ultimo

NULL

ant

NULL

NULL

Minha Lista

Page 5: Fundamentos1 SlidesC22 2008-10-22

void cadastra() { system ( "cls" ); printf ("\n \n \n");

register int i;

struct Elemento* novo;novo = malloc ( 1 * sizeof (struct Elemento) );novonovo-->>proximoproximo = NULL;= NULL;novonovo-->>anterior anterior = NULL;= NULL;

printf ( " Nome: \n" );fflush ( stdin ); gets ( novo->nome );

printf ( " Rua: \n" );fflush ( stdin ); gets ( novo->rua );

printf ( " Cidade: \n" );fflush ( stdin ); gets ( novo->cidade );

printf ( " Estado: \n" );fflush ( stdin ); gets ( novo->estado );

printf ( " CEP: \n" );fflush ( stdin ); gets ( novo->cep );

if ( NULL == MinhaLista.primeiro ){

MinhaLista.primeiro = novo;MinhaLista.ultimo = MinhaLista.primeiro;

}else{

MinhaListaMinhaLista..ultimoultimo-->>proximoproximo = = novonovo;;novonovo-->>anterior anterior == MinhaListaMinhaLista..ultimoultimo;;MinhaListaMinhaLista..ultimo ultimo == novonovo;;

}}

NULL

struct elementoNomeRua

CidadeEstadoCEP

proxant

NULL

novo

primeiro ultimoNULLNULL

Minha Lista

Page 6: Fundamentos1 SlidesC22 2008-10-22

void cadastra() {

if ( MinhaLista.primeiro == NULL){

MinhaLista.primeiro = novo;MinhaLista.ultimo = MinhaLista.primeiro;

}else{

MinhaLista.ultimo->proximo = novo;novo->anterior = MinhaLista.ultimo;MinhaLista.ultimo = novo;

}}

struct elementoNomeRua

CidadeEstadoCEP

NULL

proxant

NULL

novo

primeiro

Minha Lista

ultimo

Page 7: Fundamentos1 SlidesC22 2008-10-22

void cadastra() { system ( "cls" ); printf ("\n \n \n");

register int i;

struct Elemento* novo;novo = malloc ( 1 * sizeof (struct Elemento) );novonovo-->>proximoproximo = NULL;= NULL;novonovo-->>anterior anterior = NULL;= NULL;

printf ( " Nome: \n" );fflush ( stdin ); gets ( novo->nome );

printf ( " Rua: \n" );fflush ( stdin ); gets ( novo->rua );

printf ( " Cidade: \n" );fflush ( stdin ); gets ( novo->cidade );

printf ( " Estado: \n" );fflush ( stdin ); gets ( novo->estado );

printf ( " CEP: \n" );fflush ( stdin ); gets ( novo->cep );

if ( NULL == MinhaLista.primeiro ){

MinhaLista.primeiro = novo;MinhaLista.ultimo = MinhaLista.primeiro;

}else{

MinhaListaMinhaLista..ultimoultimo-->>proximoproximo = = novonovo;;novonovo-->>anterior anterior == MinhaListaMinhaLista..ultimoultimo;;MinhaListaMinhaLista..ultimo ultimo == novonovo;;

}}

struct elementoNomeRua

CidadeEstadoCEP

NULL

proxant

NULL

primeiro

Minha Lista

NULL

struct elementoNomeRua

CidadeEstadoCEP

proxant

NULL

novo

ultimo

Page 8: Fundamentos1 SlidesC22 2008-10-22

void cadastra() {

if ( NULL == MinhaLista.primeiro ){

MinhaLista.primeiro = novo;MinhaLista.ultimo = MinhaLista.primeiro;

}else{

MinhaLista.ultimo->proximo = novo;novo->anterior = MinhaLista.ultimo;MinhaLista.ultimo = novo;

}}

struct elementoNomeRua

CidadeEstadoCEP

proxant

NULL

Minha Lista

struct elementoNomeRua

CidadeEstadoCEP

NULL

proxant

novo

primeiro ultimo

Page 9: Fundamentos1 SlidesC22 2008-10-22

void cadastra() { system ( "cls" ); printf ("\n \n \n");

register int i;

struct Elemento* novo;novo = malloc ( 1 * sizeof (struct Elemento) );novonovo-->>proximoproximo = NULL;= NULL;novonovo-->>anterior anterior = NULL;= NULL;

printf ( " Nome: \n" );fflush ( stdin ); gets ( novo->nome );

printf ( " Rua: \n" );fflush ( stdin ); gets ( novo->rua );

printf ( " Cidade: \n" );fflush ( stdin ); gets ( novo->cidade );

printf ( " Estado: \n" );fflush ( stdin ); gets ( novo->estado );

printf ( " CEP: \n" );fflush ( stdin ); gets ( novo->cep );

if ( NULL == MinhaLista.primeiro ){

MinhaLista.primeiro = novo;MinhaLista.ultimo = MinhaLista.primeiro;

}else{

MinhaListaMinhaLista..ultimoultimo-->>proximoproximo = = novonovo;;novonovo-->>anterior anterior == MinhaListaMinhaLista..ultimoultimo;;MinhaListaMinhaLista..ultimo ultimo == novonovo;;

}}

#include "ListaEncadeada.h"

struct Lista MinhaLista;

void inicia_lista (){

MinhaLista.primeiro = NULL;

MinhaLista.ultimo = NULL;

}

ListaEncadeada.c

char menu (){

printf ("\n \n \n"); char opcao;

printf ( " (C)adastrar. \n" );printf ( " (M)ostrar. \n" );printfprintf ( " ( " Mostrar (R)Mostrar (R)eversamenteeversamente. . \\n" );n" );printf ( " (T)erminar. \n" );

fflush ( stdin );scanf ( "%c", & opcao );

return opcao;}

Page 10: Fundamentos1 SlidesC22 2008-10-22

struct elementoNomeRua

CidadeEstadoCEP

proxantNULL

struct elementoNomeRua

CidadeEstadoCEP

proxant

novo

struct elementoNomeRua

CidadeEstadoCEP

proxant

NULL

primeiro

Minha Lista

ultimo

Adicionar mais um elemento na lista:

Page 11: Fundamentos1 SlidesC22 2008-10-22

void limpaLista (){

struct Elemento* aux;

aux = primeiro;

while ( aux != NULL ){

primeiro = primeiro->proximo;

free ( aux ) ;

aux = primeiro;

}

MinhaLista.primeiro = NULL;MinhaLista.ultimo = NULL;

}

ListaEncadeada.c

primeiro

Minha Lista

NULL

aux

struct elementoNomeRua

CidadeEstadoCEP

proxant

struct elementoNomeRua

CidadeEstadoCEP

proxant

struct elementoNomeRua

CidadeEstadoCEP

proxant

NULL

ultimo

Page 12: Fundamentos1 SlidesC22 2008-10-22

ListaEncadeada.c

void mostra(){

system ( "cls" );

printf ("\n \n \n");

struct Elemento* aux;

aux = MinhaLista.primeiro;

while ( aux != NULL ){

printf ( "%s \n", aux->nome );printf ( "%s \n", aux->rua ); printf ( "%s \n", aux->cidade );printf ( "%s \n", aux->estado ); printf ( "%s \n", aux->cep ); printf ( "\n");

aux = aux->proximo;

}}

voidvoid mostraReversomostraReverso()(){{

system ( "system ( " clscls " );" );

printfprintf ("(" \\n n \\n n \\n");n");

structstruct ElementoElemento** auxaux;;

auxaux = = MinhaListaMinhaLista..ultimoultimo;;

whilewhile (( auxaux != NULL )!= NULL ){{

printfprintf ( "%s ( "%s \\n",n", auxaux-->>nome nome ););printfprintf ( "%s ( "%s \\n", n", auxaux-->>rua rua ); ); printfprintf ( "%s ( "%s \\n", n", auxaux-->>cidade cidade ););printfprintf ( "%s ( "%s \\n", n", auxaux-->>estado estado ); ); printfprintf ( "%s ( "%s \\n", n", auxaux-->>cepcep ); ); printfprintf ( "( " \\n");n");

auxaux = = auxaux-->>anterioanterior;r;

}}}}

Page 13: Fundamentos1 SlidesC22 2008-10-22

struct elementoNomeRua

CidadeEstadoCEP

proxantNULL

struct elementoNomeRua

CidadeEstadoCEP

proxant

struct elementoNomeRua

CidadeEstadoCEP

proxant

primeiro

Minha Lista

ultimo

NULL

mostraReverso();aux

auxaux = = auxaux-->>anterioanterior;r;

Page 14: Fundamentos1 SlidesC22 2008-10-22

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

#include "ListaEncadeada.h"

int main (int argc, char *argv[]){

char escolha;inicia_lista ();

for (;;){

escolha = menu (); switch ( escolha ){

case ' c': case ' C': { cadastra(); } break;

case ' m':case ' M': { mostra(); } break;

case 'case ' rr':':case 'case ' RR': {': { mostraReversomostraReverso(); } (); } breakbreak ;;

case ' t':case ' T': { limpaLista(); system(" Pause"); exit( 0); } break;

default : { printf(" Opcao invalida. \n"); }}

printf ("\n \n \n");}system(" PAUSE");return 0;

}

main.c

Page 15: Fundamentos1 SlidesC22 2008-10-22

Exercícios

• Re-elaborar a solução anterior sem utilizar variáveis ou ponteiros globais.

• Elaborar uma função para encontrar os dados de um elemento da lista dado o valor do campo nome.

• Elaborar uma função que permita eliminar um elemento da lista dado o valor do campo nome.

•• Elaborar um soluElaborar um soluçção que permita gravar e recuperar as ão que permita gravar e recuperar as informainformaçções da lista em arquivo.ões da lista em arquivo.