Upload
putamerda987
View
215
Download
0
Embed Size (px)
DESCRIPTION
computação informatica programação c linguagem utfpr 2015 engenharia mecanica
Citation preview
Fundamentos de Programação 1
Slides 22
Prof.ª Fabiany e Prof. SIMÃO
Linguagem C“Lista Duplamente Encadeada
-Projeto com vários Arquivos”.
#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
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;}
#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
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
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
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
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
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;}
struct elementoNomeRua
CidadeEstadoCEP
proxantNULL
struct elementoNomeRua
CidadeEstadoCEP
proxant
novo
struct elementoNomeRua
CidadeEstadoCEP
proxant
NULL
primeiro
Minha Lista
ultimo
Adicionar mais um elemento na lista:
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
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;
}}}}
struct elementoNomeRua
CidadeEstadoCEP
proxantNULL
struct elementoNomeRua
CidadeEstadoCEP
proxant
struct elementoNomeRua
CidadeEstadoCEP
proxant
primeiro
Minha Lista
ultimo
NULL
mostraReverso();aux
auxaux = = auxaux-->>anterioanterior;r;
#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
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.