Autoria: Carlos Eduardo Cayres | 4o

Livre

0
0
27
1 year ago
Preview
Full text

  Estrutura de Dados o

  Autoria: Carlos Eduardo Cayres | 4 semestre Tema 05 Lista

  

Tema 05

Lista

  

Autoria: Carlos Eduardo Cayres

Como citar esse documento:

CAYRES, Carlos Eduardo. Estrutura de Dados: Lista. Caderno de Atividades. Valinhos: Anhanguera Educacional, 2014.

  

Índice

CONVITE LEITURA POR DO

  À DENTRO TEMA

Pág. 3 Pág. 3

ACOMPANHE WEB

  NA

Pág. 27 Pág. 28

Pág. 31 Pág. 32

Pág. 32 Pág. 33

  

‹ $QKDQJXHUD (GXFDFLRQDO 3URLELGD D UHSURGXomR ¿QDO RX SDUFLDO SRU TXDOTXHU PHLR GH LPSUHVVmR HP IRUPD LGrQWLFD UHVXPLGD RX PRGL¿FDGD HP OtQJXD

SRUWXJXHVD RX TXDOTXHU RXWUR LGLRPD

LEITURA POR

2 WUDEDOKR FRP FRQMXQWRV GH GDGRV TXH SRGHP UHSUHVHQWDU FROHo}HV GH Q~PHURV GDGRV GH XP FOLHQWH GDGRV GH um fornecedor, entre outros, é muito difundido e importante para a Computação.

  Na estrutura do tipo lista simplesmente encadeada e não ordenada, cada elemento pode armazenar um ou mais dados (estrutura homogênea ou heterogênea UHVSHFWLYDPHQWH H XP SRQWHLUR SDUD R SUy[LPR HOHPHQWR TXH SHUPLWH

  { system(“CLS”);

  }; OLVWD LQLFLR ¿P DX[ DX[ inicio=NULL; int op,qtde,nc,achou; do

  { int num; lista *prox;

  #include <iostream> #include <stdio.h> int main() { struct lista

  Exemplo:

  R HQFDGHDPHQWR H PDQWpP D HVWUXWXUD OLQHDU $ VHJXLU DSUHVHQWD VH XP H[HPSOR FRP DV RSHUDo}HV LQVHULU QR LQtFLR GD OLVWD LQVHULU QR ¿P FRQVXOWDU WRGD D OLVWD FRQVXOWDU XP Q~PHUR QD OLVWD UHPRYHU XP HOHPHQWR TXDOTXHU H HVYD]Li OD

  3 Este tema apresenta a estrutura de dados do tipo lista, uma estrutura de programação muito utilizada em programação.

  Apresentaremos conceitos de lista, introduziremos seu uso em C com vários exemplos práticos. A estrutura de dados do tipo lista pode ser representada em cinco tipos diferentes, e cada um pode ser implementado de forma estática ou dinâmica: lista simplesmente encadeada e não ordenada, lista simplesmente encadeada e ordenada, lista duplamente encadeada e não ordenada, lista duplamente encadeada e ordenada e listas circulares. A estrutura de dados do tipo lista, a depender de ser homogênea ou heterogênea, pode armazenar somente um ou YiULRV GDGRV &RP UHODomR j OLVWD YHUHPRV DV RSHUDo}HV GH LQVHUomR FRQVXOWD UHPRomR H HVYD]LDPHQWR GD ¿OD

  FRQWtJXRV GH PHPyULD GR FRPSXWDGRU H D RUGHP OLQHDU p GHWHUPLQDGD SHORV tQGLFHV GR YHWRU R TXH H[LJH XP PDLRU esforço computacional em algumas situações. Tal representação denomina-se lista estática. Quando a estrutura lista é representada por elementos que, além de conter o dado, possuem também um ponteiro para R SUy[LPR HOHPHQWR RX VHMD HOHPHQWRV HQFDGHDGRV WHP VH D UHSUHVHQWDomR GHQRPLQDGD OLVWD GLQkPLFD

  POR DENTRO DO TEMA

  A estrutura de dados do tipo lista representa um conjunto de dados organizados em ordem linear. Quando a estrutura lista é representada por um arranjo, ou seja, quando se utilizam vetores na representação, tem-se o uso de endereços

  Esses conjuntos podem ser chamados de conjuntos dinâmicos, pois os algoritmos que os manipulam fazem com que eles aumentem, diminuam ou sofram alterações durante sua manipulação. Algumas operações sobre os conjuntos dinâmicos podem ser: inserir elemento, excluir elemento, buscar elemento, encontrar o maior, o menor, somar elementos, alterar elementos, entre outras.

  DENTRO DO TEMA Lista

  CONVITE

À

  3DUD ¿QDOL]DU Ki DOJXQV H[HUFtFLRV SDUD UHIRUoDU R FRQWH~GR HVWXGDGR UHIHUHQWH j HVWUXWXUD GH GDGRV GR WLSR OLVWD

  Tipos de Lista e Exemplos em C Lista Simplesmente Encadeada e Não Ordenada

  5

  printf(“\nMENU”); printf(“\n1 - Inserir no inicio”); SULQWI ³?Q ,QVHULU QR ¿P´ printf(“\n3 - Consultar toda a lista”); printf(“\n4 - Consultar um n§ da lista”); printf(“\n5 - Excluir n§ da lista”); printf(“\n6 - Esvaziar a lista”); printf(“\n7 - Sair”); printf(“\nDigite a opcao: “); scanf(“%d”, &op); if (op<1||op>7) printf(“\nOpção inválida.\n”); else { if (op==1)

  { aux=new(lista); SULQWI ³?Q'LJLWH XP Q~PHUR ³ scanf(“%d”, &aux->num); if (inicio==NULL) ¿P DX[ aux->prox=inicio; inicio=aux; SULQWI ³?Q1~PHUR LQVHULGR ?Q´

  }

LI RS

  { aux=new(lista); SULQWI ³?Q'LJLWH XP Q~PHUR ³ scanf(“%d”, &aux->num); if (inicio==NULL) inicio=aux; else ¿P !SUR[ DX[

  POR DENTRO DO TEMA

  ¿P DX[ ¿P !SUR[ 18// SULQWI ³?Q1~PHUR LQVHULGR ?Q´

  } if (op==3) { if (inicio==NULL) printf(“\nLista vazia.\n”); else { aux=inicio; while (aux!=NULL) { printf(“%d\n”, aux->num); aux=aux->prox;

  } }

  } if (op==4) { if (inicio==NULL) printf(“\nLista vazia.\n”); else { qtde=0;

  SULQWI ³?Q'LJLWH R Q~PHUR D VHU FRQVXOWDGR ³ scanf(“%d”, &nc); aux=inicio; while (aux!=NULL) { if (aux->num==nc) qtde++; aux=aux->prox;

  } if (qtde==0) SULQWI ³?Q1~PHUR QmR HQFRQWUDGR ?Q´

  POR DENTRO DO TEMA

  7

  else if (qtde==1) SULQWI ³?Q1~PHUR G DSDUHFH YH] ?Q´ QF else SULQWI ³?Q1~PHUR G DSDUHFH G YH]HV ?Q´ QF TWGH

  } } if (op==5) { if (inicio==NULL) printf(“\nLista vazia.\n”); else { SULQWI ³?Q'LJLWH R Q~PHUR TXH GHVHMD H[FOXLU ³ scanf(“%d”, &nc); aux=inicio; achou=0; while (aux!=NULL) { if (aux->num==nc)

  { achou++; if (aux==inicio) { inicio=aux->prox; delete(aux); aux=inicio; } HOVH LI DX[ ¿P { DX[ LQLFLR ZKLOH DX[ !SUR[ DX[ DX[ DX[ !SUR[

  POR DENTRO DO TEMA

  delete(aux); ¿P DX[ ¿P !SUR[ 18// aux=NULL; } else { DX[ LQLFLR ZKLOH DX[ !SUR[ DX[ DX[ DX[ !SUR[ DX[ !SUR[ DX[ !SUR[ delete(aux);

  } } else aux=aux->prox;

  } if (achou==0) SULQWI ³?Q1Q~PHUR QmR H[LVWH QD OLVWD ?Q´ else if (achou==1) SULQWI ³?Q)RL H[FOXtGD G RFRUUrQFLD GR QQ~PHUR G?Q´ DFKRX QF else SULQWI ³?Q)RUDP H[FOXtGDV G RFRUUrQFLDV GR Q~PHUR G?Q´ DFKRX QF }

  } if (op==6) { if (inicio==NULL) printf(“\nLista vazia.\n”); else { aux=inicio; while (aux!=NULL) {

  POR DENTRO DO TEMA

DX[ DX[ !SUR[

POR DO

  inicio=inicio->prox; delete(aux); aux=inicio;

  } printf(“\nLista esvaziada.\n”); }

  } } system(“PAUSE”); }while (op!=7);

  }

  Lista Simplesmente Encadeada e Ordenada

  Na estrutura do tipo lista simplesmente encadeada e ordenada, cada elemento pode armazenar um ou mais dados (estrutura

  homogênea

  RX KHWHURJrQHD UHVSHFWLYDPHQWH H XP SRQWHLUR SDUD R SUy[LPR HOHPHQWR TXH SHUPLWH R HQFDGHDPHQWR e mantém a estrutura linear. Tem-se, também, um campo denominado chave, por meio do qual determinada ordenação é mantida. Apresenta-se um exemplo com as seguintes operações: inserir na lista, consultar toda a lista, consultar um Q~PHUR QD OLVWD UHPRYHU XP HOHPHQWR TXDOTXHU H HVYD]Li OD

  Exemplo:

  #include <iostream> #include <stdio.h> int main() { struct lista

  { int num; lista *prox;

  }; OLVWD LQLFLR ¿P DX[ DX[ inicio=NULL; int op,qtde,nc,achou; do

  9 POR DO DENTRO TEMA

  { system(“CLS”); printf(“\nMENU”); printf(“\n1 - Inserir na lista”); SULQWI ³?Q &RQVXOWDU WRGD D OLVWD´ printf(“\n3 - Consultar um n§ da lista”); printf(“\n4 - Excluir nº da lista”); printf(“\n5 - Esvaziar a lista”); printf(“\n6 - Sair”); printf(“\nDigite a opcao: “); scanf(“%d”, &op); if (op<1||op>6) printf(“\nOpcao invalida.\n”); else { if (op==1)

  { aux=new(lista); printf(“\nDigite o numero a ser inserido: “); scanf(“%d”, &aux->num); if (inicio==NULL) { ¿P DX[ aux->prox=inicio; inicio=aux; } else if (aux->num <= inicio->num)

  { aux->prox=inicio; inicio=aux; } HOVH LI DX[ !QXP ! ¿P !QXP {

ZKLOH DX[ !SUR[ !QXP DX[ !QXP

  11

  ¿P !SUR[ DX[ aux->prox=NULL; ¿P DX[ } else //insercao no meio { DX[ LQLFLR

  DX[ DX[ !SUR[

DX[ !SUR[ DX[ !SUR[

  } printf(“\nNumero inserido.\n”); }

LI RS

  { if (inicio==NULL) printf(“\nLista vazia.\n”); else { aux=inicio; while (aux!=NULL) { printf(“%d\n”, aux->num); aux=aux->prox;

  } }

  } if (op==3) { if (inicio==NULL) printf(“\nLista vazia.\n”); else

  POR DENTRO DO TEMA

  { qtde=0; printf(“\nDigite o nº a ser consultado: “); scanf(“%d”, &nc); aux=inicio; while (aux!=NULL && aux->num<=nc) { if (aux->num==nc) qtde++; aux=aux->prox;

  } if (qtde==0) printf(“\nNº nao encontrado.\n”); else if (qtde==1) SULQWI ³?Q1~PHUR G DSDUHFH YH] ?Q´ QF else SULQWI ³?Q1~PHUR G DSDUHFH G YH]HV ?Q´ QF TWGH

  } } if (op==4) { if (inicio==NULL) printf(“\nLista vazia.\n”); else { printf(“\nDigite o numero que deseja excluir: “); scanf(“%d”, &nc); aux=inicio; achou=0; while (aux!=NULL && aux->num<=nc) { if (aux->num==nc)

  { achou++;

  POR DENTRO DO TEMA

POR DO

  if (aux==inicio) { inicio=aux->prox; delete(aux); aux=inicio; } HOVH LI DX[ ¿P { DX[ LQLFLR ZKLOH DX[ !SUR[ DX[ DX[ DX[ !SUR[ delete(aux); ¿P DX[ ¿P !SUR[ 18// aux=NULL; } else { DX[ LQLFLR ZKLOH DX[ !SUR[ DX[ DX[ DX[ !SUR[ DX[ !SUR[ DX[ !SUR[ delete(aux);

DX[ DX[ !SUR[

  } } else aux=aux->prox;

  } if (achou==0) printf(“\nNumero não encontrado.\n”); else if (achou==1) SULQWI ³?Q)RL H[FOXtGD G RFRUUrQFLD GR QQ~PHUR G?Q´ DFKRX QF else SULQWI ³?Q)RUDP H[FOXtGDV G RFRUUrQFLDV GR Q~PHUR G?Q´ DFKRX QF

  13 POR DO DENTRO TEMA

  } } if (op==5) { if (inicio==NULL) printf(“\nLista vazia.\n”); else { aux=inicio; while (aux!=NULL) { inicio=inicio->prox; delete(aux); aux=inicio;

  } printf(“\nLista esvaziada.\n”); }

  } } system(“PAUSE”); }while (op!=6);

  }

  Lista Duplamente Encadeada e Não Ordenada

  Na estrutura do tipo lista duplamente encadeada e ordenada, cada elemento pode armazenar um ou mais dados HVWUXWXUD KRPRJrQHD RX KHWHURJrQHD UHVSHFWLYDPHQWH H GRLV SRQWHLURV 2 SULPHLUR SDUD R SUy[LPR HOHPHQWR H o segundo para o elemento anterior. Esses ponteiros permitem o duplo encadeamento e mantêm a estrutura linear.

  $SUHVHQWD VH XP H[HPSOR FRP DV VHJXLQWHV RSHUDo}HV LQVHULU QR LQtFLR GD OLVWD LQVHULU QR ¿P FRQVXOWDU WRGD D OLVWD GR LQtFLR DR ¿P RX GR ¿P DR LQtFLR FRQVXOWDU XP Q~PHUR GD OLVWD UHPRYHU XP HOHPHQWR TXDOTXHU H HVYD]Li OD

POR DO

  Exemplo:

  #include <iostream> #include <stdio.h> int main() { struct lista

  { int num; lista *ant,*prox;

  }; OLVWD LQLFLR ¿P DX[ DX[ inicio=NULL; int op,qtde,nc,achou; do

  { system(“CLS”); printf(“\nMENU”); printf(“\n1 - Inserir no inicio”); SULQWI ³?Q ,QVHULU QR ¿P´ SULQWI ³?Q &RQVXOWDU WRGD D OLVWD GR LQLFLR SDUD R ¿P´ SULQWI ³?Q &RQVXOWDU WRGD OLVWD GR ¿P SDUD R LQLFLR´ printf(“\n5 - Consultar um n§ da lista”); printf(“\n6 - Excluir nº da lista”); printf(“\n7 - Esvaziar a lista”); printf(“\n8 - Sair”); printf(“\nDigite a opcao: “); scanf(“%d”, &op); if (op<1||op>8) printf(“\nOpcao invalida.\n”); else { if (op==1)

  { aux=new(lista);

  15 POR DO DENTRO TEMA

  printf(“\nDigite o numero a ser inserido: “); scanf(“%d”, &aux->num); if (inicio==NULL) { inicio=aux; ¿P DX[ inicio->prox=NULL; inicio->ant=NULL; } else { aux->prox=inicio; inicio->ant=aux; aux->ant=NULL; inicio=aux; } printf(“\nNumero inserido.\n”);

  }

LI RS

  { aux=new(lista); printf(“\nDigite o numero a ser inserido: “); std::cin>>aux->num; if (inicio==NULL) { inicio=aux; ¿P DX[ inicio->prox=NULL; inicio->ant=NULL; } else { ¿P !SUR[ DX[ DX[ !DQW ¿P aux->prox=NULL;

  17

  ¿P DX[ } printf(“\nNumero inserido.\n”);

  } if (op==3) { if (inicio==NULL) printf(“\nLista vazia.\n”); else { aux=inicio; while (aux!=NULL) { printf(“%d\n”, aux->num); aux=aux->prox;

  } }

  } if (op==4) { if (inicio==NULL) printf(“\nLista vazia.\n”); else {

  DX[ ¿P while (aux!=NULL) { printf(“%d\n”, aux->num); aux=aux->ant; }

  } } if (op==5)

  POR DENTRO DO TEMA

  { if (inicio==NULL) printf(“\nLista vazia.\n”); else { qtde=0; printf(“\nDigite o nº a ser consultado: “); scanf(“%d”, &nc); aux=inicio; while (aux!=NULL) { if (aux->num==nc) qtde++; aux=aux->prox;

  } if (qtde==0) printf(“\nNº nao encontrado.\n”); else if (qtde==1) SULQWI ³?Q1~PHUR G DSDUHFH YH] ?Q´ QF else SULQWI ³?Q1~PHUR G DSDUHFH G YH]HV ?Q´ QF TWGH

  } } if (op==6) { if (inicio==NULL) printf(“\nLista vazia.\n”); else { printf(“\nDigite o numero que deseja excluir: “); scanf(“%d”, &nc); aux=inicio; achou=0; while (aux!=NULL) {

  POR DENTRO DO TEMA

POR DO

  if (aux->num==nc) { achou++; if (aux==inicio) { inicio=inicio->prox; inicio->ant=NULL; delete(aux); aux=inicio; } HOVH LI DX[ ¿P { ¿P ¿P !DQW ¿P !SUR[ 18// delete(aux); aux=NULL; } else { aux->ant->prox=aux->prox; aux->prox->ant=aux->ant; DX[ DX[ !SUR[ delete(aux);

DX[ DX[

  } } else aux=aux->prox;

  } if (achou==0) printf(“\nNumero não encontrado.\n”); else if (achou==1) SULQWI ³?Q)RL H[FOXtGD G RFRUUrQFLD GR QQ~PHUR G?Q´ DFKRX QF else

  19 POR DO DENTRO TEMA

  SULQWI ³?Q)RUDP H[FOXtGDV G RFRUUrQFLDV GR Q~PHUR G?Q´ DFKRX QF }

  } if (op==7) { if (inicio==NULL) printf(“\nLista vazia.\n”); else { aux=inicio; while (aux!=NULL) { inicio=inicio->prox; delete(aux); aux=inicio;

  } printf(“\nLista esvaziada.\n”); }

  } } system(“PAUSE”);

  }while (op!=8); }

  Lista Duplamente Encadeada e Ordenada

  Na estrutura do tipo lista duplamente encadeada e ordenada, cada elemento pode armazenar um ou mais dados HVWUXWXUD KRPRJrQHD RX KHWHURJrQHD UHVSHFWLYDPHQWH H GRLV SRQWHLURV 2 SULPHLUR SDUD R SUy[LPR HOHPHQWR H R segundo para o elemento anterior, permitindo o duplo encadeamento e mantendo a estrutura linear. Tem-se, também, um campo denominado chave, por meio do qual determinada ordenação é mantida. Segue um exemplo com as operações: LQVHULU QD OLVWD FRQVXOWDU WRGD D OLVWD GR LQtFLR DR ¿P RX GR ¿P DR LQtFLR FRQVXOWDU XP Q~PHUR GD OLVWD UHPRYHU XP elemento qualquer e esvaziá-la.

  21 Exemplo:

  #include <iostream> #include <stdio.h> int main() { struct lista

  POR DENTRO DO TEMA

  }

  DX[ !SUR[ DX[ aux->prox->ant=aux; } printf(“\nNumero inserido.\n”);

  DX[ DX[ !SUR[

  DX[ LQLFLR

  } else {

  ¿P !SUR[ DX[ DX[ !DQW ¿P aux->prox=NULL; ¿P DX[

  } HOVH LI DX[ !QXP! ¿P !QXP {

  if (inicio==NULL) { inicio=aux; ¿P DX[ inicio->prox=NULL; inicio->ant=NULL; } else if (aux->num<=inicio->num) { inicio->ant=aux; aux->prox=inicio; aux->ant=NULL; inicio=aux;

  POR DENTRO DO TEMA

  { aux=new(lista); printf(“\nDigite um nº: “); scanf(“%d”, &aux->num);

  { system(“CLS”); printf(“\nMENU”); printf(“\n1 - Inserir na lista”); SULQWI ³?Q &RQVXOWDU WRGD D OLVWD GR LQLFLR SDUD R ¿P´ SULQWI ³?Q &RQVXOWDU WRGD OLVWD GR ¿P SDUD R LQLFLR´ printf(“\n4 - Consultar um n§ da lista”); printf(“\n5 - Excluir nº da lista”); printf(“\n6 - Esvaziar a lista”); printf(“\n7 - Sair”); printf(“\nDigite a opcao: “); scanf(“%d”, &op); if (op<1||op>7) printf(“\nOpcao invalida.\n”); else { if (op==1)

  }; OLVWD LQLFLR ¿P DX[ DX[ inicio=NULL; int op,qtde,nc,achou; do

  { int num; lista *ant,*prox;

ZKLOH DX[ !SUR[ !QXP DX[ !QXP

DX[ !DQW DX[

  23 LI RS

  { if (inicio==NULL) printf(“\nLista vazia.\n”); else { aux=inicio; while (aux!=NULL) { printf(“%d\n”, aux->num); aux=aux->prox;

  } }

  } if (op==3) { if (inicio==NULL) printf(“\nLista vazia.\n”); else {

  DX[ ¿P while (aux!=NULL) { printf(“%d\n”, aux->num); aux=aux->ant; }

  } } if (op==4) { if (inicio==NULL) printf(“\nLista vazia.\n”); else { qtde=0;

  POR DENTRO DO TEMA

  printf(“\nDigite o nº a ser consultado: “); scanf(“%d”, &nc); aux=inicio; while (aux!=NULL && aux->num<=nc) { if (aux->num==nc) qtde++; aux=aux->prox;

  } if (qtde==0) printf(“\nNº nao encontrado.\n”); else if (qtde==1) SULQWI ³?Q1~PHUR G DSDUHFH YH] ?Q´ QF else SULQWI ³?Q1~PHUR G DSDUHFH G YH]HV ?Q´ QF TWGH

  } } if (op==5) { if (inicio==NULL) printf(“\nLista vazia.\n”); else { printf(“\nDigite o numero que deseja excluir: “); scanf(“%d”, &nc); aux=inicio; achou=0; while (aux!=NULL && aux->num<=nc) { if (aux->num==nc)

  { achou++; if (aux==inicio) {

  POR DENTRO DO TEMA

POR DO

  inicio=inicio->prox; inicio->ant=NULL; delete(aux); aux=inicio; } HOVH LI DX[ ¿P { ¿P ¿P !DQW ¿P !SUR[ 18// delete(aux); aux=NULL; } else { aux->ant->prox=aux->prox; aux->prox->ant=aux->ant; DX[ DX[ !SUR[ delete(aux);

DX[ DX[

  } } else aux=aux->prox;

  } if (achou==0) printf(“\nNumero não encontrado.\n”); else if (achou==1) SULQWI ³?Q)RL H[FOXtGD G RFRUUrQFLD GR QQ~PHUR G?Q´ DFKRX QF else SULQWI ³?Q)RUDP H[FOXtGDV G RFRUUrQFLDV GR Q~PHUR G?Q´ DFKRX QF }

  } if (op==6)

  25 POR DO DENTRO TEMA

  { if (inicio==NULL) printf(“\nLista vazia.\n”); else { aux=inicio; while (aux!=NULL) { inicio=inicio->prox; delete(aux); aux=inicio;

  } printf(“\nLista esvaziada.\n”); }

  } } system(“PAUSE”); }while (op!=7);

  }

  

ACOMPANHE WEB

NA Listas Encadeadas: Conceito, Representação e Algoritmos

  ‡ Acesse o texto Listas Encadeadas: Conceito, Representação e Algoritmos. Entenda o conceito de listas encadeadas, conheça sua representação usual; entenda a diferença entre alocação

  VHTXHQFLDO H DORFDomR HQFDGHDGD GH PHPyULD QR FRQWH[WR GR DUPD]HQDPHQWR GH FRQMXQWRV GH elementos.

  'LVSRQtYHO HP < KWWS ZZZ GF XIVFDU EU aEVL PDWHULDLV HG X KWPO> $FHVVR HP MXQ Conceito de Lista Linear Simplesmente Encadeada

  ‡ $VVLVWD DR YtGHR &RQFHLWR GH /LVWD /LQHDU 6LPSOHVPHQWH (QFDGHDGD 6DLED PDLV VREUH DORFDomR HVWiWLFD H GLQkPLFD 9HMD XP H[HPSOR GH LQVHUomR QR LQtFLR GH XPD OLVWD OLQHDU VLPSOHVPHQWH encadeada.

  < . Acesso em: 1 jul.

  'LVSRQtYHO HP KWWS KRPHSDJHV GFF XIPJ EU aURGROIR DHGVL )XQFRHV IXQFRHV KWPO>

  7HPSR PLQ VHJ Inserir no Fim de uma Lista Linear Simplesmente Encadeada

  ‡ $VVLVWD DR YtGHR ,QVHULU QR )LP GH XPD /LVWD /LQHDU 6LPSOHVPHQWH (QFDGHDGD (VWH YtGHR aborda o conceito de lista linear simplesmente encadeada e apresenta um exemplo de inserção QR ¿P GH XPD OLVWD OLQHDU VLPSOHVPHQWH HQFDGHDGD

  <https://www.youtube.com/watch?v=-xzfTsafixI> 'LVSRQtYHO HP $FHVVR HP MXQ

  7HPSR PLQ VHJ

  27 AGORA A

  VEZ É SUA

  Instruções:

$JRUD FKHJRX D VXD YH] GH H[HUFLWDU VHX DSUHQGL]DGR $ VHJXLU YRFr HQFRQWUDUi DOJXPDV TXHVW}HV GH P~OWLSOD

escolha e dissertativas. Leia cuidadosamente os enunciados e atente-se para o que está sendo pedido.

  Questão 1

&RP R LQWXLWR GH YHUL¿FDU DV KDELOLGDGHV GH SURJUDPDomR DGTXLULGDV DWp DJRUD D DWLYLGDGH SURSRVWD p D VROXomR GH XP SUREOHPD

simples utilizando os recursos de programação estudados no tema anterior. Tais conhecimentos são extremamente necessários

QD VHTXrQFLD GRV FRQWH~GRV SRLV WHUHPRV PXLWRV H[HPSORV H H[HUFtFLRV IXQGDPHQWDGRV QD OLQJXDJHP & Problema proposto:

  ,PSOHPHQWDU XP SURJUDPD HP & TXH FDUUHJXH XPD ¿OD GLQkPLFD KRPRJrQHD FRP Q~PHURV LQWHLURV SRVL- tivos. O programa deverá executar as operações a seguir: a)

  ,QVHULU Q~PHUR QD ¿OD

  b) /LVWDU WRGD D ¿OD

  c) ([FOXLU XP Q~PHUR GD ¿OD

  d) (VYD]LDU D ¿OD

  AGORA A

  VEZ

É SUA

  Questão 2

  2EVHUYH R FyGLJR D VHJXLU H FODVVL¿TXH R WLSR GH OLVWD XWLOL]DGD FRP UHODomR j HVWUXWXUD GH SURJUDPDomR aux=new(lista); std::cin>>aux->num; DX[ !SUR[ DX[ DX[ !DQW DX[ aux->prox=NULL; DX[ DX[

  a)

  6LPSOHVPHQWH HQFDGHDGD FRP LQVHUomR QR LQtFLR GD OLVWD

  b) 'XSODPHQWH HQFDGHDGD FRP LQVHUomR QR ¿P GD OLVWD

  c)

  6LPSOHVPHQWH HQFDGHDGD FRP LQVHUomR QR ¿P GD OLVWD

  d) 'XSODPHQWH HQFDGHDGD FRP LQVHUomR QR LQtFLR GD OLVWD e) Nenhuma das alternativas é verdadeira.

  29 AGORA A

  VEZ

É SUA

  Questão 3

  2EVHUYH R FyGLJR D VHJXLU H FODVVL¿TXH R WLSR GH OLVWD XWLOL]DGD FRP UHODomR j HVWUXWXUD GH SURJUDPDomR aux=new(lista); std::cin>>aux->num; if (aux1==NULL) DX[ DX[ aux->prox=aux1; aux1=aux;

  a)

  6LPSOHVPHQWH HQFDGHDGD FRP LQVHUomR QR LQtFLR GD OLVWD

  b)

  6LPSOHVPHQWH HQFDGHDGD FRP LQVHUomR QR ¿P GD OLVWD

  c) 'XSODPHQWH HQFDGHDGD FRP LQVHUomR QR ¿P GD OLVWD

  d) 'XSODPHQWH HQFDGHDGD FRP LQVHUomR QR LQtFLR GD OLVWD e) Nenhuma das alternativas é verdadeira.

  Questão 4

Com base na estrutura de programação da linguagem C, crie um programa que carregue uma lista simplesmente encadeada e

QmR RUGHQDGD SDUD VLPXODU XP FRQWUROH GH YRRV $ OLVWD GHYHUi PDQLSXODU XPD HVWUXWXUD FRQWHQGR R Q~PHUR GR YRR R Q~PHUR GH

OXJDUHV GLVSRQtYHLV QR YRR D RULJHP H R GHVWLQR GR YRR 5HVROYD RV LWHQV D VHJXLU a) Cadastrar voo.

  b) &RQVXOWDU SRU Q~PHUR GR YRR

  c) &RQVXOWDU WRGRV RV YRRV FRP OXJDUHV GLVSRQtYHLV d) Excluir um voo.

e) Esvaziar a lista de voos.

  AGORA A

  VEZ

É SUA

  Questão 5

Com base na estrutura de programação da linguagem C, crie um programa que carregue uma lista simplesmente encadeada e

RUGHQDGD SDUD VLPXODU XP VLVWHPD GH FRQWUROH GH DOXQRV $ OLVWD GHYHUi PDQLSXODU XPD HVWUXWXUD FRQWHQGR R Q~PHUR R QRPH D

QRWD QD SURYD H D QRWD QD SURYD 5HVROYD RV LWHQV D VHJXLU

  a) ,QVHULU DOXQR RUGHQDGR SHOR Q~PHUR b) Consultar por inicial do nome.

  c) Consultar os aprovados.

  d) Mostrar a quantidade de reprovados.

  e) Excluir aluno.

  f) Mostrar todos os alunos com média e situação.

  Observação: é considerado aprovado o aluno com média aritmética maior ou igual a 6.

  

FINALIZANDO

  Os conceitos e exemplos práticos em C apresentados neste tema deixaram bem claro que a estrutura de dados do tipo lista é muito versátil na solução de problema do cotidiano. Sua estrutura permite armazenar tipos de dados variados, possibilitando o trabalho com estruturas homogêneas e heterogêneas. $V RSHUDo}HV EiVLFDV GH LQVHUomR FRQVXOWDU WRGD D OLVWD FRQVXOWDU OLVWD GR LQtFLR SDUD R ¿P H GR ¿P SDUD R LQtFLR UHPRomR H HVYD]LDPHQWR GD OLVWD IRUDP EHP H[SORUDGDV QRV H[HPSORV H H[HUFtFLRV SURSRVWRV EHP FRPR R IRUDP DV HVWUXWXUDV GH lista ordenada, não ordenada, homogênea e heterogênea com exemplos em C para cada uma das estruturas.

  31 REFERÊNCIAS <

  /,67$6 (QFDGHDGDV &RQFHLWR 5HSUHVHQWDomR H $OJRULWPRV 'LVSRQtYHO HP KWWS ZZZ GF XIVFDU EU aEVL PDWHULDLV HG u6.html>

  $FHVVR HP <https://www.youtube.com/watch?v=5FG7FC-6Fng> . &21&(,72 GH /LVWD /LQHDU 6LPSOHVPHQWH (QFDGHDGD 'LVSRQtYHO HP $FHVVR HP

  <https://www.youtube.com/watch?v=-xzfTsafixI> . Acesso &21&(,72 GH /LVWD /LQHDU 6LPSOHVPHQWH (QFDGHDGD 'LVSRQtYHO HP HP

TENENBAUM, Aaron M.; LANGSAM, Yedidyah; AUGENSTEIN, Moshe J. Estruturas de dados usando C. São Paulo: Makron

%RRNV

  

GLOSSÁRIO

Encadeada: ligar em cadeia, estar numa sequência, ter conexão.

  Estrutura de Dados:

  QD &RPSXWDomR HVWUXWXUD GH GDGRV p XPD IRUPD HVSHFt¿FD GH RUJDQL]DomR H DUPD]HQDPHQWR GH GDGRV SDUD TXH VHMDP XWLOL]DGRV GH IRUPD H¿FD] $V HVWUXWXUDV GH GDGRV H VHXV DOJRULWPRV VmR PXLWR XWLOL]DGRV QD &LrQFLD GD &RPSXWDomR HP GLYHUVDV iUHDV GR FRQKHFLPHQWR H FRP DV PDLV GLIHUHQWHV ¿QDOLGDGHV QD VROXomR GH SUR- blemas computacionais.

  Heterogênea: aquilo que é composto por elementos diferentes, desiguais. Homogênea: cujas partes são da mesma natureza ou estão estreitamente ligadas. Idêntica, igual, análoga.

  

GABARITO

Questão 1 Resposta:

  #include<iostream> #include<stdio.h> int main() {

  VWUXFW ¿OD { int num; ¿OD SUR[ }; ¿OD LQLFLR ¿P DX[ int op; inicio=NULL; do { system(“CLS”); std::cout<<”\n\t.MENU.”;

  33

  std::cout<<”\n1. Inserir”;

  VWG FRXW ´?Q &RQVXOWDU WRGD ¿OD´ std::cout<<”\n5. Excluir”; std::cout<<”\n6. Esvaziar”; std::cout<<”\n7. Sair”; std::cout<<”\nDigite sua opção: “; std::cin>>op; switch(op) { case(1):

  { DX[ QHZ ¿OD

  VWG FRXW ´?Q'LJLWH R Q~PHUR D LQVHULU ³ std::cin>>aux->num; if(inicio==NULL) inicio=aux; else

  ¿P !SUR[ DX[ ¿P DX[ ¿P !SUR[ 18// VWG FRXW ´?Q1~PHUR LQVHULGR ?Q´ break; } FDVH { if(inicio==NULL) std::cout<<”\nFila vazia.\n”; else

  {

  VWG FRXW ´?Q7RGD D ¿OD ³ aux=inicio; while(aux!=NULL) { std::cout<<aux->num<<” “; aux=aux->prox;

  } } break; } case(3):

  35

  { if(inicio==NULL) std::cout<<”\nFila vazia.\n”; else

  { aux=inicio; inicio=inicio->prox; delete(aux);

  VWG FRXW ´?Q1~PHUR H[FOXLGR ?Q´ } break; } case(4): { if(inicio==NULL) std::cout<<”\nFila vazia.\n”; else

  { aux=inicio; while(aux!=NULL)

  { inicio=inicio->prox; delete(aux); aux=inicio;

  } std::cout<<”\nFila esvaziada.\n”; } break; } default: { if(op!=5) std::cout<<”\nOpção invalida.\n”;

  } } system(“PAUSE”);

  } while(op!=5); } Clique aqui para retornar à seção Agora é a Sua Vez.

  37 Questão 2 Resposta: Alternativa B.

  $ IRUPD FRPR DV YDULiYHLV DX[ !SUR[ DX[ DX[ !DQW DX[ DX[ !SUR[ 18// H DX[ DX[ VmR PDQLSXODGDV FDUDFWHUL]D D LQVHUomR QR ¿P GH XPD OLVWD GXSODPHQWH HQFDGHDGD SRLV aux2->prox=aux LQGLFD TXH R HOHPHQWR VHUi LQVHULGR QR ¿P da lista e aux->ant=aux2 mostra a preocupação em apontar para o endereço do elemento anterior.

  Questão 3 Resposta: Alternativa A. aux->prox=aux1 caracteriza que o ponteiro de aux está apontando para aux1

  TXH p R LQtFLR DWXDO H aux1=aux caracteriza que o ponteiro aux1 TXH LQGLFD R LQtFLR GD OLVWD DJRUD DSRQWD SDUD D SRVLomR GH aux SRUWDQWR R Q~PHUR IRL

  LQVHULGR QR LQtFLR GD OLVWD

  Questão 4 Resposta:

  #include <iostream> #include <stdio.h> int main() { struct lista { int nv,lug; FKDU RUL> @ GHVW> @ lista *posi; }; OLVWD QRYR LQLFLR DX[ DX[ int op,n,achou; inicio = NULL; do { system(“CLS”); std::cout<<”\nMenu “; std::cout<<”\n1 - Cadastrar vôo”;

  VWG FRXW ´?Q &RQVXOWDU SRU Q~PHUR GR Y{R´

  VWG FRXW ´?Q &RQVXOWDU WRGRV RV Y{RV FRP OXJDUHV GLVSRQtYHLV´ std::cout<<”\n4 - Excluir um vôo”; std::cout<<”\n5 - Esvaziar a lista”; std::cout<<”\n6 - Sair”; std::cout<<”\nDigite sua opção: “; std::cin>>op; if (op < 1 || op > 6) std::cout<<”\nOpção inválida.\n”; if (op == 1) { novo =new(lista);

  VWG FRXW ´'LJLWH R Q~PHUR GR Y{R ³ std::cin>>novo->nv; std::cout<<”Digite a origem do vôo: “;

  39

  scanf(“%s”, novo->ori); std::cout<<”Digite o destino do vôo: “; scanf(“%s”, novo->dest); std::cout<<”Digite o numero de lugares do vôo: “; std::cin>>novo->lug; novo->posi=inicio; inicio=novo; std::cout<<”\nVôo inserido.\n”; }

LI RS

  { if (inicio == NULL) std::cout<<”\nLista vazia.\n”; else {

  VWG FRXW ´'LJLWH R Q~PHUR GR Y{R D VHU FRQVXOWDGR ³ std::cin>>n; aux = inicio; achou=0; while (aux != NULL) { if (aux -> nv==n)

  { std::cout <<”\nLugares: “<<aux -> lug; std::cout <<”\nOrigem: “<<aux -> ori; std::cout <<”\nDestino: “<<aux -> dest<<”\n”; achou=1; } aux=aux->posi; } if (achou == 0) std::cout<<”\nVôo nao encontrado.\n”;

  } } if (op == 3) { if (inicio == NULL) std::cout<<”\nLista vazia.\n”; else { aux = inicio; achou=0; while (aux != NULL) {

  41

  if (aux -> lug>0) {

  VWG FRXW ´?Q1~PHUR GR Y{R ³ DX[ ! QY std::cout <<”\nLugares: “<<aux -> lug; std::cout <<”\nOrigem: “<<aux -> ori; std::cout <<”\nDestino: “<<aux -> dest<<”\n”; achou=1; } aux=aux->posi; } if (achou == 0)

  VWG FRXW ´?Q1HQKXP Y{R FRP OXJDU GLVSRQtYHO ?Q´ } } if (op == 4) { if (inicio == NULL) std::cout<<”\nLista vazia.\n”; else { std::cout<<”Digite o numero do vôo a ser excluido: “; std::cin>>n; achou = 0; aux = inicio; while (aux != NULL) { if (aux -> nv == n)

  { achou = 1; if (aux == inicio) { inicio = aux -> posi; delete(aux); } else if (aux->posi == NULL)

  { DX[ LQLFLR ZKLOH DX[ ! SRVL DX[ DX[ DX[ ! SRVL DX[ ! SRVL 18// } else { DX[ LQLFLR

  43 ZKLOH DX[ ! SRVL DX[

  DX[ DX[ ! SRVL DX[ ! SRVL DX[ ! SRVL }

  } aux=aux->posi; } if (achou == 0) std::cout<<”\nVôo nao encontrado.\n”; else std::cout<<”\nVôo excluido.\n”; } } if (op == 5) { if (inicio == NULL) std::cout<<”\nLista vazia.\n”; else { aux = inicio; while (aux != NULL) {

  45

  inicio = aux->posi; delete(aux); aux = inicio; } std::cout<<”\nLista de vôos esvaziada.\n”; } } system(“PAUSE”); }while (op != 6); } Clique aqui para retornar à seção Agora é a Sua Vez.

  Questão 5 Resposta:

  #include <iostream> #include <stdio.h> int main() { struct lista

  { int num; FKDU QRPH> @ ÀRDW S S lista *posi;

  }; OLVWD LQLFLR ¿P QRYR DX[ DX[ int op,achou,media,cont,numero; char n; inicio=NULL; ¿P 18// cont = 0; do { system(“CLS”); std::cout<<”\nMENU”;

  VWG FRXW ´?Q ,QVHULU DOXQR RUGHQDGR SHOR Q~PHUR´

  VWG FRXW ´?Q &RQVXOWDU SRU LQLFLDO GR QRPH´ std::cout<<”\n3 - Consultar os aprovados”; std::cout<<”\n4 - Contar os reprovados”; std::cout<<”\n5 - Excluir aluno”; std::cout<<”\n6 - Mostrar todos alunos com média e situação”; std::cout<<”\n7 - Sair”; std::cout<<”\nDigite sua opção: “; std::cin >> op; if (op<1 || op>7) std::cout<<”\nOpção inválida.\n”; if (op == 1) { system(“CLS”); novo=new(lista); std::cout<<”\nInserir aluno”;

  VWG FRXW ´?Q'LJLWH R Q~PHUR GR DOXQR ³ std::cin>>novo->num; std::cout<<”\nDigite o nome do aluno: “; scanf(“%s”, novo->nome); std::cout<<”\n Digite a 1ª nota: “; std::cin>>novo->p1;

  47 VWG FRXW ´?Q 'LJLWH D  QRWD ³

  VWG FLQ!!QRYR !S if (inicio==NULL) { inicio=novo;

  ¿P QRYR novo->posi=NULL; } else if (novo->num <= inicio->num)

  { aux=inicio; inicio=novo; inicio->posi=aux;

  } HOVH LI QRYR !QXP! ¿P !QXP {

  ¿P !SRVL QRYR novo->posi=NULL; ¿P QRYR

  } else { aux=inicio;

  DX[ 18// ZKLOH DX[ 18// { if (novo->num<=aux->num)

  DX[ DX[ else aux=aux->posi;

  } aux=inicio; ZKLOH DX[ !SRVL DX[ aux=aux->posi; aux->posi=novo;

QRYR !SRVL DX[

  } std::cout<<”\n\nAluno cadastrado com sucesso.\n”; }

LI RS

  { achou=0; std::cout<<”\nConsulta por inicial do nome”; if (inicio==NULL) std::cout<<”\n\nLista vazia.\n”; else { std::cout<<”\n\nDigite a inicial do nome que deseja consultar: “; std::cin>>n; aux=inicio; while (aux!=NULL) { LI DX[ !QRPH> @ Q {

  VWG FRXW ´?Q$OXQR ³ DX[ !QRPH ´ 3 ³ DX[ !S ´ 3 ³ DX[ !S ´?Q´ achou=1; } aux=aux->posi; } if (achou==0) std::cout<<”\n Aluno no encontrado.\n”;

  } }

  49

  if (op == 3) { std::cout<<”\nConsulta de alunos aprovados”; if (inicio==NULL) std::cout<<”\n\nLista vazia\n”; else { achou=0; aux=inicio; while (aux!=NULL) { PHGLD DX[ !S DX[ !S if (media>=6) {

  VWG FRXW ´?Q´ DX[ !QRPH ´ 3 ³ DX[ !S ´ 3 ³ DX[ !S ´?Q´ achou=1; } aux=aux->posi; } if (achou==0) std::cout<<”\n Todos alunos reprovados.\n”;

  } } if (op == 4)

  { std::cout<<”\nContar os alunos reprovados”; if (inicio==NULL) std::cout<<”\n\nLista vazia.\n”; else { cont=0; aux=inicio; while (aux!=NULL)

  { PHGLD DX[ !S DX[ !S if (media<6) cont = cont + 1; aux=aux->posi;

  } if (cont == 0) std::cout<<”\n Nenhum aluno reprovado.\n”; else std::cout<<”\nTotal de reprovados: “<<cont<<”\n”; }

  } if (op == 5) { std::cout<<”\nExcluir aluno”; if (inicio==NULL) std::cout<<”\n\nLista vazia.\n”; else {

  VWG FRXW ´?Q'LJLWH R Q~PHUR GR DOXQR TXH GHVHMD H[FOXLU ³ std::cin>>numero; achou=0; aux=inicio; while ((aux!=NULL) && (aux->num<=numero)) { if (aux->num==numero)

  { achou=achou+1;

DX[ !SRVL 18//

DX[ !SRVL DX[ !SRVL

DX[ DX[

  { if (inicio==NULL) std::cout<<”\n\nLista vazia.\n”; else { aux=inicio; while (aux!=NULL) {

  } system(“PAUSE”); }while (op != 7); } Clique aqui para retornar à seção Agora é a Sua Vez.

  VWG FRXW ´ 6LWXDomR 5HSURYDGR ?Q´ aux=aux->posi; } }

  VWG FRXW ´?Q3 ³ DX[ !S ´ 3 ³ DX[ !S ´ 0pGLD ³ PHGLD if(media>=6) std::cout<<” Situação: Aprovado.\n”; else

  VWG FRXW ´?Q1~PHUR ³ DX[ !QXP ´ 1RPH ³ DX[ !QRPH

  PHGLD DX[ !S DX[ !S

  51

  if (aux==inicio) { inicio=aux->posi; DX[ DX[ !SRVL delete(aux); } HOVH LI DX[ ¿P

  } if (achou==0) std::cout<<”\n\nAluno não encontrado.\n”;

  HOVH DX[ DX[ !SRVL

  VWG FRXW ´?Q$OXQR H[FOXtGR FRP VXFHVVR ?Q´ }

  DX[ DX[ !SRVL delete(aux); }

  DX[ LQLFLR ZKLOH DX[ !SRVL DX[ DX[ DX[ !SRVL

  ¿P DX[ DX[ DX[ !SRVL delete(aux); } else {

  DX[ DX[ !SRVL

  { DX[ LQLFLR ZKLOH DX[ !SRVL DX[

  } } if (op == 6)

Novo documento