Herowaree

Lista_Sequencial.c

Nov 6th, 2014
214
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.81 KB | None | 0 0
  1. //Implementação lista sequencial
  2. #include "lista_sequencial.h"
  3. #include <stdio.h>
  4. #define MAX 100
  5.  
  6. void iniciarLista(struct lista_seq *lista){
  7. lista->tamanho = 0;
  8. }
  9.  
  10. int vaziaLista(struct lista_seq *lista){
  11. if(lista->tamanho == 0){
  12. return 1;
  13. }else{
  14. return 0;
  15. }
  16. }
  17.  
  18. int cheiaLista(struct lista_seq *lista){
  19. if(lista->tamanho == MAX){
  20. return 1;
  21. }else{
  22. return 0;
  23. }
  24. }
  25.  
  26. int tamanhoLista(struct lista_seq *lista){
  27. return lista->tamanho;
  28. }
  29.  
  30. int elementoListaValor(struct lista_seq *lista, int valor){
  31. int count;
  32. for(count = 0; count < lista->tamanho; count++){
  33. if(lista->array[count] == valor){
  34. return count + 1;
  35. }
  36. }
  37. return 0;
  38. }
  39.  
  40. int elementoListaPosicao(struct lista_seq *lista, int posicao){
  41. if((posicao > lista->tamanho) || posicao > MAX){
  42. return 0;
  43. }else{
  44. return lista->array[posicao - 1];
  45. }
  46. }
  47.  
  48. int insereListaPosicao(struct lista_seq *lista, int posicao, int valor){
  49. int count, tamanho;
  50.  
  51. tamanho = lista->tamanho;
  52.  
  53. if(cheiaLista(lista) || posicao - 1 > tamanho){
  54. return 0;
  55. }else{
  56. for(count = tamanho; count >= posicao; count--){
  57. lista->array[count] = lista->array[count - 1];
  58. }
  59. lista->array[posicao - 1] = valor;
  60. ++(lista->tamanho);
  61. return 1;
  62. }
  63. }
  64.  
  65. int insereLista(struct lista_seq *lista, int valor){
  66. if(cheiaLista(lista)){
  67. return 0;
  68. }else{
  69. lista->array[ lista->tamanho ] = valor;
  70. ++(lista->tamanho);
  71. return 1;
  72. }
  73. }
  74.  
  75. int removerLista(struct lista_seq *lista, int posicao){
  76. int count;
  77.  
  78. if(vaziaLista(lista) || posicao > lista->tamanho || posicao < 1){
  79. return 0;
  80. }else{
  81. for(count = posicao - 1; count < lista->tamanho - 1; count++){
  82. lista->array[count] = lista->array[count + 1];
  83. }
  84. --(lista->tamanho);
  85. return 1;
  86. }
  87. }
  88.  
  89. int mostrarLista(struct lista_seq *lista){
  90. int count;
  91.  
  92. if(vaziaLista(lista)){
  93. return 0;
  94. }
  95.  
  96. printf("Tamanho da lista: %d elemento(s)\n", lista->tamanho);
  97. printf("--------------------------------\n");
  98. for(count = 0; count < lista->tamanho; count++){
  99. printf("\n\tINDICE: %d\n", count + 1);
  100. printf("\tVALOR: %d\n", lista->array[count]);
  101. }
  102. printf("\n");
  103. return 1;
  104. }
  105.  
  106. int concatenaLista(struct lista_seq *lista, struct lista_seq *lista2, struct lista_seq *novalista){
  107. int count;
  108.  
  109. if(vaziaLista(lista) || vaziaLista(lista2)){
  110. return 0;
  111. }
  112.  
  113. for(count = 0; count < lista->tamanho; count++){
  114. insereLista(novalista, lista->array[count]);
  115. }
  116.  
  117. for(count = lista->tamanho; count < (lista2->tamanho + lista->tamanho); count++){
  118. insereLista(novalista, lista2->array[count - lista->tamanho]);
  119. }
  120.  
  121. mostrarLista(novalista);
  122.  
  123. return 1;
  124. }
  125.  
  126. int dividirLista(struct lista_seq *lista, struct lista_seq *lista_par, struct lista_seq *lista_impar){
  127. int count;
  128.  
  129. if(vaziaLista(lista)){
  130. return 0;
  131. }
  132.  
  133. for(count = 0; count < lista->tamanho; count++){
  134. if(lista->array[count]%2 == 0){
  135. insereLista(lista_par, lista->array[count]);
  136. }else{
  137. insereLista(lista_impar, lista->array[count]);
  138. }
  139. }
  140.  
  141. mostrarLista(lista_par);
  142. mostrarLista(lista_impar);
  143.  
  144. return 1;
  145. }
  146.  
  147. int modificarElemento(struct lista_seq *lista, int posicao, int valor){
  148. if((posicao > lista->tamanho) || (posicao > MAX) || (posicao <= 0)){
  149. return 0;
  150. }
  151.  
  152. lista->array[posicao - 1] = valor;
  153.  
  154. return 1;
  155. }
  156.  
  157. int removerValor(struct lista_seq *lista, int valor){
  158. int count;
  159.  
  160. if(vaziaLista(lista)){
  161. return 0;
  162. }
  163. for(count = 0; count < lista->tamanho; count++){
  164. if(lista->array[count] == valor){
  165. removerLista(lista, count + 1);
  166. }
  167. }
  168.  
  169. return 1;
  170. }
  171.  
  172. int main(){
  173.  
  174. struct lista_seq exemplo;
  175. struct lista_seq exemplo2;
  176. struct lista_seq novalista;
  177. struct lista_seq lista_par;
  178. struct lista_seq lista_impar;
  179.  
  180. //Inicializando listas
  181. iniciarLista(&exemplo);
  182. iniciarLista(&exemplo2);
  183. iniciarLista(&novalista);
  184. iniciarLista(&lista_par);
  185. iniciarLista(&lista_impar);
  186.  
  187. printf("%d\n", vaziaLista(&exemplo2));
  188.  
  189. //Inserindo elementos da lista exemplo2
  190. insereListaPosicao(&exemplo2, 1, 5);
  191. insereListaPosicao(&exemplo2, 1, 4);
  192. insereListaPosicao(&exemplo2, 1, 3);
  193. insereListaPosicao(&exemplo2, 2, 10);
  194. insereListaPosicao(&exemplo2, 1, 1);
  195. insereListaPosicao(&exemplo2, 3, 1234);
  196.  
  197. //Teste da função tamanhoLista e vaziaLista
  198. printf("%d\n", tamanhoLista(&exemplo2));
  199. printf("%d\n", vaziaLista(&exemplo2));
  200.  
  201. mostrarLista(&exemplo2);
  202.  
  203. //Inserindo elementos da lista exemplo
  204. insereListaPosicao(&exemplo, 1, 10);
  205. insereListaPosicao(&exemplo, 1, 1000);
  206. insereListaPosicao(&exemplo, 1, 35);
  207. insereListaPosicao(&exemplo, 1, 40);
  208. insereListaPosicao(&exemplo, 1, 50);
  209.  
  210. mostrarLista(&exemplo);
  211.  
  212. //Testando as funções de remoção
  213. removerValor(&exemplo2, 10);
  214. removerLista(&exemplo2, 2);
  215.  
  216. mostrarLista(&exemplo2);
  217.  
  218. //Teste da função concatenarLista e dividirLista
  219. concatenaLista(&exemplo2, &exemplo, &novalista);
  220. dividirLista(&novalista, &lista_par, &lista_impar);
  221.  
  222. //Mostrar que elemento se encontra na posição 4 na novalista
  223. printf("%d\n", elementoListaPosicao(&novalista, 3));
  224. //Mostrar em que posição de encontra o elemento 50 na novalista
  225. printf("%d\n", elementoListaValor(&novalista, 1000));
  226.  
  227. //Teste da função modificarElemento
  228. modificarElemento(&novalista, 8, 2000);
  229. mostrarLista(&novalista);
  230.  
  231. return 0;
  232. }
Advertisement
Add Comment
Please, Sign In to add comment