Departamento de Sistemas e Computao Disciplina: Tcnicas de Programao Prof.: os! "ust#$uio %angel de &ueiro' D(SC(P)(*+ Tcnicas de Programao Notas de Aula Filas & Pilhas Tcnicas de Programao ________________________________________________________________ Universidade Federal de Campina Grande DSC/CCT/UFCG 2 Tcnicas de Programao ________________________________________________________________ Filas e Pil,as - )inguagem C ".emplo de implementao de rotinas /#sicas para manipulao de F()+S TurboC++ 3. !"""""""""""""""""""""""""""""""""""""""""""""""""""""""" F#$A %%%%%% &otinas basicas de mani'ulacao de F#$A( usando )etores* % +struturas de dados com alocacao estatica % #nsere no ,inal da ,ila % &emocao do inicio da ,ila % Fila circular A'licacao ti'ica* % $ista de elementos a es'era de um tratamento- em .ue a ordem de chegada e im'ortante """""""""""""""""""""""""""""""""""""""""""""""""""""""""! /include 0stdio.h1 /include 0conio.h1 /de,ine 2A34F#$A 5 /de,ine FA$(6 /de,ine 7+&8A8+#&6 5 /de,ine 69 5 /de,ine +&&6 t:'ede, int Ti'o48ado; t:'ede, struct < Ti'o48ado 8ado =2A34F#$A>; int #nicio-Fim; ? Ti'o4Fila; !" &otinas de 2ani'ulacao de F#$A( % First #n- First 6ut @F#F6A Alocacao se.uencial "! )oid inicialiBa4,ila @FA Ti'o4Fila "F; < F%1#nicioC; F%1FimC; ? int insere4,ila @F-8adoA Ti'o4Fila "F; Ti'o48ado 8ado; < int 'roD; 'roDCF%1Fim+5; DSC/CCT/UFCG 3 Tcnicas de Programao ________________________________________________________________ i, @'roD CC 2A34F#$AA 'roDC; i, @'roD CC F%1#nicioA return@+&&6A; else < F%18ado=F%1Fim>C8ado; F%1FimC'roD; return@69A; ? ? int retira4,ila @F-8adoA Ti'o4Fila "F; Ti'o48ado "8ado; < i, @F%1Fim CC F%1#nicioA return@+&&6A; else < "8adoC F%18ado=F%1#nicio>; @F%1#nicioA++; i, @F%1#nicio 1C 2A34F#$AA F%1#nicioC; return@69A; ? ? )oid lista4,ila @FA Ti'o4Fila F; < int cont; 'rint,@EFnEA; contCF.#nicio; Ghile @cont HC F.FimA < 'rint,@EFila=Id>CIdFnE-cont-F.8ado=cont>A; cont++; i, @cont 1C 2A34F#$AA contC; ? 'rint,@EFnEA; ? int consulta4,ila @F-#ndice-8adoA Ti'o4Fila F; int #ndice; Ti'o48ado "8ado; < i, @F.Fim 1 F.#nicioA i, @@#ndice 0C F.#nicioA JJ @#ndice 1 F.FimA JJ @#ndice 1C 2A34F#$AA JJ @#ndice 0 AA return@+&&6A; else i, @@@#ndice 1 F.FimA && @#ndice 0C F.#nicioAA JJ @#ndice 1C 2A34F#$AA JJ @#ndice 0 AA return@+&&6A; else < "8adoCF.8ado=#ndice>; DSC/CCT/UFCG 4 Tcnicas de Programao ________________________________________________________________ return@69A; ? ? int acha4,ila @F-8ado-#ndiceA Ti'o4Fila F; Ti'o48ado 8ado; int "#ndice; < int cont; int achou; achouCFA$(6; cont C F.#nicio; "#ndice C NK$$; Ghile @cont HC F.FimA < cont++; i, @cont CC 2A34F#$AA contC; i, @F.8ado=cont> CC 8adoA < achouC7+&8A8+#&6; "#ndiceCcont; breaL; ? ? i, @achouA return@69A; else return@+&&6A; ? int cheia4,ila @FA Ti'o4Fila F; < i, @@F.Fim+5 CC F.#nicioA JJ @F.Fim+5 1 2A34F#$AAA return@69A; else return@+&&6A; ? int )aBia4,ila @FA Ti'o4Fila F; < i, @F.Fim CC F.#nicioA return@69A; else return@+&&6A; ? int .uantidade4,ila @FA Ti'o4Fila F; < i, @F.Fim 1 F.#nicioA return@F.Fim%F.#nicioA; else return@F.Fim+@2A34F#$A%5A%F.#nicioA; ? DSC/CCT/UFCG
Tcnicas de Programao ________________________________________________________________ !" P&6M&A2A P&#NC#PA$ "! main@A < Ti'o4Fila Fila; int 7alor; 'rint,@EFn111 &6T#NA( 8+ 2AN#PK$ACA6 8+ F#$A( 000FnFnEA; inicialiBa4,ila@&FilaA; i, @)aBia4,ila@FilaAA 'rint,@EC1 Fila )aBiaFnEA; i, @insere4,ila@&Fila-NAA 'rint,@EC1 7alor N inserido na ,ilaFnEA; i, @insere4,ila@&Fila-OAA 'rint,@EC1 7alor O inserido na ,ilaFnEA; i, @insere4,ila@&Fila-PAA 'rint,@EC1 7alor P inserido na ,ilaFnEA; 'rint,@EFnC1 +lementos da ,ila... =inicio ao ,im>FnEA; lista4,ila@FilaA; i, @acha4,ila@Fila-O-&7alorAA 'rint,@EC1 6 )alor O ,oi achado na 'osicao IdFnE-7alorA; i, @Hacha4,ila@Fila-Q-&7alorAA 'rint,@EC1 6 )alor Q nao ,oi achado na ,ilaFnEA; i, @retira4,ila@&Fila-&7alorAA 'rint,@EC1 7alor Id retirado da ,ilaFnE-7alorA; i, @retira4,ila@&Fila-&7alorAA 'rint,@EC1 7alor Id retirado da ,ilaFnE-7alorA; i, @retira4,ila@&Fila-&7alorAA 'rint,@EC1 7alor Id retirado da ,ilaFnE-7alorA; 'rint,@EPressione uma tecla 'ara continuar...FnEA; getch@A; 'rint,@EFnC1 +lementos da ,ila... =inicio ao ,im>FnEA; lista4,ila@FilaA; i, @)aBia4,ila@FilaAA 'rint,@EC1 Fila )aBiaFnEA; 'rint,@EPressione uma tecla 'ara terminar o 'rograma...FnEA; getch@A; ? DSC/CCT/UFCG ! Tcnicas de Programao ________________________________________________________________ 8e)%C++ !"""""""""""""""""""""""""""""""""""""""""""""""""""""""" F#$A %%%%%% &otinas basicas de mani'ulacao de F#$A( usando )etores* % +struturas de dados com alocacao estatica % #nsere no ,inal da ,ila % &emocao do inicio da ,ila % Fila circular A'licacao ti'ica* % $ista de elementos a es'era de um tratamento- em .ue a ordem de chegada e im'ortante """""""""""""""""""""""""""""""""""""""""""""""""""""""""! /include 0stdio.h1 /include 0conio.h1 /de,ine 2A34F#$A 5 /de,ine FA$(6 /de,ine 7+&8A8+#&6 5 /de,ine 69 5 /de,ine +&&6 t:'ede, int Ti'o48ado; t:'ede, struct < Ti'o48ado 8ado=2A34F#$A>; int #nicio-Fim; ? Ti'o4Fila; !" &otinas de 2ani'ulacao de F#$A( % First #n- First 6ut @F#F6A Alocacao se.Rencial "! )oid inicialiBa4,ila @Ti'o4Fila "FA < F%1#nicioC; F%1FimC; ? int insere4,ila @Ti'o4Fila "F-Ti'o48ado 8adoA < int 'roD; 'roDCF%1Fim+5; i, @'roD CC 2A34F#$AA 'roDC; i, @'roD CC F%1#nicioA return@+&&6A; else < F%18ado=F%1Fim>C8ado; F%1FimC'roD; DSC/CCT/UFCG " Tcnicas de Programao ________________________________________________________________ return@69A; ? ? int retira4,ila @Ti'o4Fila "F-Ti'o48ado "8adoA < i, @F%1Fim CC F%1#nicioA return@+&&6A; else < "8adoC F%18ado=F%1#nicio>; @F%1#nicioA++; i, @F%1#nicio 1C 2A34F#$AA F%1#nicioC; return@69A; ? ? )oid lista4,ila @Ti'o4Fila FA < int cont; 'rint,@EFnEA; contCF.#nicio; Ghile @cont HC F.FimA < 'rint,@EFila=Id>CIdFnE-cont-F.8ado=cont>A; cont++; i, @cont 1C 2A34F#$AA contC; ? 'rint,@EFnEA; ? int consulta4,ila @Ti'o4Fila F-int #ndice-Ti'o48ado "8adoA < i, @F.Fim 1 F.#nicioA i, @@#ndice 0C F.#nicioA JJ @#ndice 1 F.FimA JJ @#ndice 1C 2A34F#$AA JJ @#ndice 0 AA return@+&&6A; else i, @@@#ndice 1 F.FimA && @#ndice 0C F.#nicioAA JJ @#ndice 1C 2A34F#$AA JJ @#ndice 0 AA return@+&&6A; else < "8adoCF.8ado=#ndice>; return@69A; ? ? int acha4,ila @Ti'o4Fila F-Ti'o48ado 8ado-int "#ndiceA < int cont; int achou; achouCFA$(6; cont C F.#nicio; "#ndice C NK$$; Ghile @cont HC F.FimA < cont++; i, @cont CC 2A34F#$AA DSC/CCT/UFCG # Tcnicas de Programao ________________________________________________________________ contC; i, @F.8ado=cont> CC 8adoA < achouC7+&8A8+#&6; "#ndiceCcont; breaL; ? ? i, @achouA return@69A; else return@+&&6A; ? int cheia4,ila @Ti'o4Fila FA < i, @@F.Fim+5 CC F.#nicioA JJ @F.Fim+5 1 2A34F#$AAA return@69A; else return@+&&6A; ? int )aBia4,ila @Ti'o4Fila FA < i, @F.Fim CC F.#nicioA return@69A; else return@+&&6A; ? int .uantidade4,ila @Ti'o4Fila FA < i, @F.Fim 1 F.#nicioA return@F.Fim%F.#nicioA; else return@F.Fim+@2A34F#$A%5A%F.#nicioA; ? !" P&6M&A2A P&#NC#PA$ "! main@A < Ti'o4Fila F; int 7alor; 'rint,@EFn111 &6T#NA( 8+ 2AN#PK$ACA6 8+ F#$A( 000FnFnEA; inicialiBa4,ila@&FA; i, @)aBia4,ila@FAA 'rint,@EC1 F )aBiaFnEA; i, @insere4,ila@&F-NAA 'rint,@EC1 7alor N inserido na ,ilaFnEA; i, @insere4,ila@&F-OAA 'rint,@EC1 7alor O inserido na ,ilaFnEA; i, @insere4,ila@&F-PAA 'rint,@EC1 7alor P inserido na ,ilaFnEA; DSC/CCT/UFCG $ Tcnicas de Programao ________________________________________________________________ 'rint,@EFnC1 +lementos da ,ila... =inicio ao ,im>FnEA; lista4,ila@FA; i, @acha4,ila@F-O-&7alorAA 'rint,@EC1 6 )alor O ,oi achado na 'osicao IdFnE-7alorA; i, @Hacha4,ila@F-Q-&7alorAA 'rint,@EC1 6 )alor Q nao ,oi achado na ,ilaFnEA; i, @retira4,ila@&F-&7alorAA 'rint,@EC1 7alor Id retirado da ,ilaFnE-7alorA; i, @retira4,ila@&F-&7alorAA 'rint,@EC1 7alor Id retirado da ,ilaFnE-7alorA; i, @retira4,ila@&F-&7alorAA 'rint,@EC1 7alor Id retirado da ,ilaFnE-7alorA; 'rint,@EPressione uma tecla 'ara continuar...FnEA; getch@A; 'rint,@EFnC1 +lementos da ,ila... =inicio ao ,im>FnEA; lista4,ila@FA; i, @)aBia4,ila@FAA 'rint,@EC1 F )aBiaFnEA; 'rint,@EPressione uma tecla 'ara terminar o 'rograma...FnEA; getch@A; ? DSC/CCT/UFCG %& Tcnicas de Programao ________________________________________________________________ ".emplo de implementao de rotinas /#sicas para manipulao de P()0+S TurboC++ 3. !"""""""""""""""""""""""""""""""""""""""""""""""""""""""" P#$SA %%%%%%%% &otinas basicas de mani'ulacao de Pilha* % +struturas de dados com alocacao estatica % #nsercao no ,inal @to'oA do )etor % &emocao do ,inal @to'oA do )etor A'licacao ti'ica* % 6 ultimo a entrar eh o 'rimeiro a sair """""""""""""""""""""""""""""""""""""""""""""""""""""""""! /include 0stdio.h1 /include 0conio.h1 /de,ine 2A34P#$SA 5 /de,ine FA$(6 /de,ine 7+&8A8+#&6 5 /de,ine 69 5 /de,ine +&&6 t:'ede, int Ti'o48ado; t:'ede, struct < Ti'o48ado 8ado=2A34P#$SA>; int Tase-To'o; ? Ti'o4Pilha; !" &otinas de 2ani'ulacao de Pilha % $ista $inear (e.Rencial "! )oid inicialiBa4'ilha @PA Ti'o4Pilha "P; < P%1TaseC; !! como ,oi 'assado o endereo da estrutura- o acesso ,eito atra)s do sUmbolo %1 P%1To'oC; ? int insere4'ilha @P- 8adoA Ti'o4Pilha "P; Ti'o48ado 8ado; < i, @P%1To'o 0 2A34P#$SAA !" 7etor nao esta cheio V "! < P%18ado=P%1To'o>C8ado; @P%1To'oA++; return@69A; ? else return@+&&6A; DSC/CCT/UFCG %% Tcnicas de Programao ________________________________________________________________ ? retira4'ilha @P- 8adoA Ti'o4Pilha "P; Ti'o48ado "8ado; < i, @P%1To'o CC P%1TaseA return@+&&6A; else < @P%1To'oA%%; "8adoCP%18ado=P%1To'o>; return@"8adoA; ? ? )oid eDibe4'ilha @PA Ti'o4Pilha P; < Ti'o48ado dado; int cont; 'rint,@EFnEA; ,or @contC@P.To'oA%5; cont 1C @P.TaseA; cont%%A 'rint,@E7etor=Id>CIdFnE-cont-P.8ado=cont>A; 'rint,@EFnEA; ? int .uantidade4'ilha @PA Ti'o4Pilha P; < return@ P.To'o%P.Tase A; ? int cheia4'ilha @PA Ti'o4Pilha P; < i, @P.To'o CC 2A34P#$SAA return@69A; else return@H69A; ? int )aBia4'ilha @PA Ti'o4Pilha P; < i, @P.To'o CC P.TaseA return@69A; else return@H69A; ? int es)aBia4'ilha @PA Ti'o4Pilha "P; < P%1To'oC; P%1TaseC; ? !"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" DSC/CCT/UFCG %2 Tcnicas de Programao ________________________________________________________________ +3+2P$6 8+ AP$#CACA6 5* P&6M&A2A P&#NC#PA$ 6 'rograma abaiDo ilustra a 'ossibilidade 'ara re)erter uma certa se.uencia de )alores numericos inseridos ate .ue seWa digitado o )alor XXX. """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""! )oid main@A < int num- D; Ti'o4Pilha P; clrscr@A; inicialiBa4'ilha@&PA; 'rint,@EFnArmaBene um numero* EA; scan,@EIdE-&numA; Ghile@ @num HCXXXA && @cheia4'ilha@PA HC 5AA < insere4'ilha@&P-numA; 'rint,@EFnArmaBene um numero* EA; scan,@EIdE-&numA; ? 'rint,@EFn(e.uencia $#F6FnEA; Ghile@)aBia4'ilha@PA HC 5A < DCretira4'ilha@&PA; 'rint,@EId E-DA; ? getch@A; ? !"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" +3+2P$6 8+ AP$#CACA6 N* P&6M&A2A P&#NC#PA$ 6 'rograma abaiDo ilustra Con)erso de um nYmero decimal 'ara a base binZria- utiliBando P#$SA( """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""! )oid main@A < int D-num-den- resto; Ti'o4Pilha P; clrscr@A; inicialiBa4'ilha@&PA; 'rint,@EFn+ntre com o numero na base decimal* EA; scan,@EIdE-&numA; 'rint,@EFn6 numero Id na base 5 %1 E-numA; Ghile@ @num HCA && @cheia4'ilha@PA HC 5A A < resto C numIN; den C num!N; num C den; insere4'ilha@&P-restoA; ? Ghile@)aBia4'ilha@PA HC 5A < DCretira4'ilha@&PA; 'rint,@EIdE-DA; ? 'rint,@E na base NFnEA; getch@A; ? ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ".erc1cio DSC/CCT/UFCG %3 Tcnicas de Programao ________________________________________________________________ ".ecutar o e.emplo de P()0+ escrito para o TurboC++ no 8e)%C++ e analisar os erros2 corrigindo3os. 4 $ue v. conclui deste e.erc1cio5 DSC/CCT/UFCG %4