Advertisement
Guest User

Untitled

a guest
Feb 22nd, 2017
78
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.52 KB | None | 0 0
  1. Program Lista_Ordenada ;
  2. Type Palavra=string[15];
  3. P_Lista=^TipoNo;
  4. TipoNo=record
  5. info:palavra;
  6. prox:P_lista;
  7. end;
  8. var Pi:P_lista;
  9. Op:char;
  10.  
  11. {Procedimentos para desenvolver}
  12.  
  13. Procedure Inserir;
  14. Var Px:P_lista;
  15. Begin
  16. Px:=Pi;
  17. //P. auxiliar aponta inicio lista
  18. new(Px);
  19. write('Escreva dado a inserir na lista: ');
  20. readln(Px^.info);
  21. Px^.prox:=Pi;
  22. Pi:=Px;
  23. writeln('Novo dado inserido na lista');
  24. End;
  25.  
  26. Procedure percorrer;
  27. Var Px:P_lista;
  28. begin
  29. writeln;
  30. Px:=Pi;
  31. //P. auxiliar aponta inicio lista
  32. If (Px <> nil) then
  33. writeln ('Lista vazia')
  34. else
  35. Begin
  36. writeln('LISTA: '); writeln;
  37. while (Px <> nil) do
  38. begin
  39. writeln(Px^.info);
  40. Px:=Px^.prox;
  41. end;
  42. end;
  43. end;
  44.  
  45. Procedure Remover;
  46. var px: P_lista;
  47. pa: P_lista;
  48. //Ponteiro para nó anterior
  49. //do nó a remover
  50. dado:palavra;
  51. Begin
  52. if pi <> nil then
  53. begin
  54. write('Escreva dado a excluir da lista: ');
  55. readln(dado);
  56. px:=pi;
  57. pa:=nil;
  58. while (px <> nil) and
  59. (px^.info <> dado) do
  60. begin
  61. pa:=px;
  62. //Atualiza ponteiro
  63. //antecessor
  64. px:=px^.prox;
  65. //avança para próx. nó
  66. end;
  67. end;
  68. if px = nil then
  69. writeln(dado, ' não se encontra na lista')
  70. else
  71. begin
  72. if pa = nil
  73. //Caso em que vamos
  74. //excluir 1º nó da Lista
  75. then pi:=px^.prox
  76. //redefine-se o início da
  77. //lista
  78. else pa^.prox:=px^.prox;
  79. //Antecessor a apontar o
  80. //novo prox (próximo nó)
  81. dispose(px);
  82. writeln(dado, ' foi excluído da lista');
  83. end;
  84. end;
  85.  
  86. Procedure Ordenar;
  87. Var p1,p2:P_lista;
  88. trocar:boolean;
  89. aux:palavra;
  90.  
  91. begin
  92. if (pi <> nil) and
  93. (pi^.prox <> nil) then
  94. repeat
  95. trocar:=false;
  96. p1:=pi;
  97. p2:=pi^.prox;
  98. repeat
  99. if (p1^.info > p2^.info)
  100. then
  101. begin
  102. trocar:=true;
  103. aux:=p1^.info;
  104. p1^.info:=p2^.info;
  105. p2^.info:=aux;
  106. end;
  107. p1:= p1^.prox;
  108. p2:= p2^.prox;
  109. until pi^.prox=nil;
  110. until not trocar;
  111. end;
  112.  
  113.  
  114. Begin //Programa principal
  115. Pi:=nil;
  116. Repeat
  117. writeln('Menu');
  118. writeln('Inserir --> 1');
  119. writeln('Percorrer --> 2');
  120. writeln('Ordenar --> 3');
  121. writeln('Remover --> 4');
  122. writeln('Terminar --> 0');
  123. readln(op);
  124. Case op of
  125. '1' : Inserir;
  126. '2' : Percorrer;
  127. '3' : Ordenar;
  128. '4' : Remover;
  129. '0' : writeln('Fim');
  130. End;
  131. Until Op = '0';
  132.  
  133. End.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement