Glaas2

ListasDobles

Jun 14th, 2012
211
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 10.32 KB | None | 0 0
  1. /**********************\
  2.  
  3. * lista.c *
  4. \**********************/
  5. #include <stdio.h>
  6. #include <stdlib.h>
  7. #include <string.h>
  8. #include "lista.h"
  9. #include "lista _function.h"
  10.  
  11. int main(void)
  12. {
  13. char eleccion;
  14. char *nom;
  15. Lista *lista;
  16. Elemento *actual;
  17.  
  18. if ((lista = (Lista *) malloc (sizeof (Lista))) == NULL)
  19. return -1;
  20. if ((nom = (char *) malloc (50)) == NULL)
  21. return -1;
  22. actual = NULL;
  23. eleccion = 'o';
  24.  
  25. inicialisacion (lista);
  26. int pos, k;
  27.  
  28. while (eleccion!= 7){
  29. eleccion = menu (lista, &k);
  30. switch (eleccion){
  31. case 1:
  32. printf ("Ingrese un elemento : ");
  33. scanf ("%s", nom);
  34. getchar ();
  35. if (lista->tamano == 0)
  36. ins_en_lista_vacia (lista, nom);
  37. else
  38. ins_inicio_lista (lista, nom);
  39. printf ("%d elementos:ini=%s,fin=%s\n", lista->tamano,
  40. lista->inicio->dato, lista->fin->dato);
  41. muestra (lista);
  42. break;
  43. case 2:
  44. printf ("Ingrese un elemento: ");
  45. scanf ("%s", nom);
  46. getchar ();
  47. ins_fin_lista (lista, lista->fin, nom);
  48. printf ("%d elementos:ini=%s,fin=%s\n", lista->tamano,
  49. lista->inicio->dato, lista->fin->dato);
  50. muestra (lista);
  51. break;
  52. case 3:
  53. printf ("Ingrese un elemento: ");
  54. scanf ("%s", nom);
  55. getchar ();
  56. do{
  57. printf ("Ingrese la posicion: ");
  58. scanf ("%d", &pos);
  59. }
  60. while (pos < 1 || pos > lista->tamano);
  61. getchar ();
  62. if (lista->tamano == 1 || pos == lista->tamano){
  63. k = 1;
  64. printf("-----------------------------------------------\n");
  65. printf("/!\\Fracaso la insercion.Utilice el menu {1|2} /!\\\n");
  66. printf("-----------------------------------------------\n");
  67. break;
  68. }
  69. ins_lista (lista, nom, pos);
  70. printf ("%d elementos:ini=%s,fin=%s\n", lista->tamano,
  71. lista->inicio->dato, lista->fin->dato);
  72. muestra (lista);
  73. break;
  74. case 4:
  75. sup_inicio (lista);
  76. if (lista->tamano != 0)
  77. printf ("%d elementos:ini=%s,fin=%s\n", lista->tamano,
  78. lista->inicio->dato, lista->fin->dato);
  79. else
  80. printf ("lista vacia\n");
  81. muestra (lista);
  82. break;
  83. case 5:
  84. do{
  85. printf ("Ingrese la posicion : ");
  86. scanf ("%d", &pos);
  87. }
  88. while (pos < 1 || pos > lista->tamano);
  89. getchar ();
  90. sup_en_lista (lista, pos);
  91. if (lista->tamano != 0)
  92. printf ("Hay %d elementos:El inicio es: %s,El final es: %s\n", lista->tamano,
  93. lista->inicio->dato, lista->fin->dato);
  94. else
  95. printf ("lista vacia\n");
  96. muestra (lista);
  97. break;
  98. case 6:
  99. destruir (lista);
  100. printf ("la lista ha sido destruida: %d elementos\n", lista->tamano);
  101. break;
  102. }
  103. }
  104. return 0;
  105. }
  106. //Aqui esta la otra libreria
  107. /***************************\
  108.  
  109. * lista_function.h *
  110. \***************************/
  111.  
  112. void inicialisacion (Lista * lista)
  113. {
  114. lista ->inicio = NULL;
  115. lista ->fin = NULL;
  116. lista ->tamano = 0;
  117. }
  118.  
  119. /* insercion en une lista vacia */
  120. int ins_en_lista_vacia (Lista * lista, char *dato){
  121. Elemento *nuevo_elemento;
  122. if ((nuevo_elemento = (Elemento *) malloc (sizeof (Elemento))) == NULL)
  123. return -1;
  124. if ((nuevo_elemento->dato = (char *) malloc (50 * sizeof (char)))
  125. == NULL)
  126. return -1;
  127. strcpy (nuevo_elemento->dato, dato);
  128.  
  129. nuevo_elemento->siguiente = NULL;
  130. lista ->inicio = nuevo_elemento;
  131. lista ->fin = nuevo_elemento;
  132. lista ->tamano++;
  133. return 0;
  134. }
  135.  
  136. /* inserción al inicio de la lista */
  137. int ins_inicio_lista (Lista * lista, char *dato){
  138. Elemento *nuevo_elemento;
  139. if ((nuevo_elemento = (Elemento *) malloc (sizeof (Elemento))) == NULL)
  140. return -1;
  141. if ((nuevo_elemento->dato = (char *) malloc (50 * sizeof (char)))
  142. == NULL)
  143. return -1;
  144. strcpy (nuevo_elemento->dato, dato);
  145.  
  146. nuevo_elemento->siguiente = lista->inicio;
  147. lista ->inicio = nuevo_elemento;
  148. lista ->tamano++;
  149. return 0;
  150. }
  151.  
  152. /*insercion al final de la lista */
  153. int ins_fin_lista (Lista * lista, Elemento *actual, char *dato){
  154. Elemento *nuevo_elemento;
  155. if ((nuevo_elemento = (Elemento *) malloc (sizeof (Elemento))) == NULL)
  156. return -1;
  157. if ((nuevo_elemento->dato = (char *) malloc (50 * sizeof (char)))
  158. == NULL)
  159. return -1;
  160. strcpy (nuevo_elemento->dato, dato);
  161.  
  162. actual->siguiente = nuevo_elemento;
  163. nuevo_elemento->siguiente = NULL;
  164.  
  165. lista ->fin = nuevo_elemento;
  166.  
  167. lista ->tamano++;
  168. return 0;
  169. }
  170.  
  171. /* insercion en la posicion solicitada */
  172. int ins_lista (Lista * lista, char *dato, int pos){
  173. if (lista ->tamano < 2)
  174. return -1;
  175. if (pos < 1 || pos >= lista ->tamano)
  176. return -1;
  177.  
  178. Elemento *actual;
  179. Elemento *nuevo_elemento;
  180.  
  181. int i;
  182.  
  183. if ((nuevo_elemento = (Elemento *) malloc (sizeof (Elemento))) == NULL)
  184. return -1;
  185. if ((nuevo_elemento->dato = (char *) malloc (50 * sizeof (char)))
  186. == NULL)
  187. return -1;
  188.  
  189. actual = lista ->inicio;
  190. for (i = 1; i < pos; ++i)
  191. actual = actual->siguiente;
  192. if (actual->siguiente == NULL)
  193. return -1;
  194. strcpy (nuevo_elemento->dato, dato);
  195.  
  196. nuevo_elemento->siguiente = actual->siguiente;
  197. actual->siguiente = nuevo_elemento;
  198. lista ->tamano++;
  199. return 0;
  200. }
  201.  
  202. /* supresión al inicio de la lista */
  203. int sup_inicio (Lista * lista){
  204. if (lista ->tamano == 0)
  205. return -1;
  206. Elemento *sup_elemento;
  207. sup_elemento = lista ->inicio;
  208. lista ->inicio = lista ->inicio->siguiente;
  209. if (lista ->tamano == 1)
  210. lista ->fin = NULL;
  211. free (sup_elemento->dato);
  212. free (sup_elemento);
  213. lista ->tamano--;
  214. return 0;
  215. }
  216.  
  217. /* suprimir un elemento después de la posición solicitada */
  218. int sup_en_lista (Lista * lista, int pos){
  219. if (lista ->tamano <= 1 || pos < 1 || pos >= lista ->tamano)
  220. return -1;
  221. int i;
  222. Elemento *actual;
  223. Elemento *sup_elemento;
  224. actual = lista ->inicio;
  225.  
  226. for (i = 1; i < pos; ++i)
  227. actual = actual->siguiente;
  228.  
  229. sup_elemento = actual->siguiente;
  230. actual->siguiente = actual->siguiente->siguiente;
  231. if(actual->siguiente == NULL)
  232. lista ->fin = actual;
  233. free (sup_elemento->dato);
  234. free (sup_elemento);
  235. lista ->tamano--;
  236. return 0;
  237. }
  238.  
  239. /* visualización de la Lista */
  240. void muestra (Lista * lista){
  241. Elemento *actual;
  242. actual = lista ->inicio;
  243. while (actual != NULL){
  244. printf ("%p - %s\n", actual, actual->dato);
  245. actual = actual->siguiente;
  246. }
  247. }
  248.  
  249. /* destruir la Lista */
  250. void destruir(Lista * lista)
  251. {
  252. while (lista ->tamano > 0)
  253. sup_inicio (lista);
  254. }
  255.  
  256. int menu (Lista *lista,int *k){
  257. int eleccion;
  258. printf("********** MENU **********\n");
  259. if (lista ->tamano == 0){
  260. printf ("1. Adicion del primer elemento\n");
  261. printf ("2. Quitar\n");
  262. }else if(lista ->tamano == 1 || *k == 1){
  263. printf ("1. Adicion al inicio de la lista\n");
  264. printf ("2. Adicion al final de la lista\n");
  265. printf ("4. Supresion al inicio de la lista\n");
  266. printf ("6. Destruir la lista\n");
  267. printf ("7. Quitar\n");
  268. }else {
  269. printf ("1. Adicion al inicio de la lista\n");
  270. printf ("2. Adicion al final de la lista\n");
  271. printf ("3. Adicion después de la posicion indicada\n");
  272. printf ("4. Supresion al inicio de la lista\n");
  273. printf ("5. Supresion después de la posicion indicada\n");
  274. printf ("6. Destruir la lista\n");
  275. printf ("7. Quitar\n");
  276. }
  277. printf ("\n\nElegir: ");
  278. scanf ("%d", &eleccion);
  279. getchar();
  280. if(lista->tamano == 0 && eleccion == 2)
  281. eleccion = 7;
  282. return eleccion;
  283. }
  284. /* -------- FIN lista_function.h --------- */
  285. //y la otra
  286. #include <stdio.h>
  287. #include <stdlib.h>
  288. #include <conio.h>
  289.  
  290. struct registro{
  291. int valor;
  292. struct registro *sig;
  293. struct registro *ant;
  294. };
  295.  
  296. typedef struct registro _nodo;
  297.  
  298. _nodo *crearLista(_nodo *apuntador)
  299. {
  300. return(apuntador=NULL);
  301. }
  302.  
  303. _nodo *insertarEnLista(int numero, _nodo *apuntador)
  304. {
  305. _nodo *registroNuevo, *apuntadorAuxiliar;
  306.  
  307. registroNuevo=(_nodo *)malloc(sizeof(_nodo));
  308.  
  309. if(registroNuevo != NULL)
  310. {
  311. registroNuevo->valor=numero;
  312. registroNuevo->sig=NULL;
  313. if(apuntador == NULL)
  314. apuntador = registroNuevo;
  315. else
  316. {
  317. apuntadorAuxiliar = apuntador;
  318.  
  319. while(apuntadorAuxiliar->sig != NULL)
  320. apuntadorAuxiliar=apuntadorAuxiliar->sig;
  321. apuntadorAuxiliar->sig=registroNuevo;
  322. }
  323. }
  324. return apuntador;
  325. }
  326.  
  327.  
  328. _nodo *insertarInicio(int numero, _nodo *apuntador){
  329. _nodo *registroNuevo, *apuntadorAuxiliar;
  330.  
  331. registroNuevo=(_nodo *)malloc(sizeof(_nodo));
  332.  
  333. if(registroNuevo!=NULL)
  334. {
  335. registroNuevo->valor=numero;
  336. registroNuevo->sig=apuntador;
  337. if(apuntador==NULL)
  338. apuntador=registroNuevo;
  339. else
  340. {
  341. apuntadorAuxiliar = apuntador;
  342.  
  343. while(apuntadorAuxiliar->sig != NULL)
  344. apuntadorAuxiliar=apuntadorAuxiliar->sig;
  345. apuntadorAuxiliar->sig=registroNuevo;
  346. }
  347. }
  348. return apuntador;
  349. }
  350.  
  351.  
  352.  
  353.  
  354. void imprimirLista(_nodo *apuntador){
  355. _nodo *apuntadorAuxiliar;
  356.  
  357. apuntadorAuxiliar=apuntador;
  358. printf("Contenido de la lista: inicioLista-> ");
  359.  
  360. while (apuntadorAuxiliar != NULL)
  361. {
  362. printf("%d -> ",apuntadorAuxiliar->valor);
  363. apuntadorAuxiliar=apuntadorAuxiliar->sig;
  364. }
  365. printf("NULL\n");
  366.  
  367. getch();
  368.  
  369. }
  370. int main()
  371. {
  372. _nodo *inicioLista;
  373.  
  374. inicioLista = crearLista(inicioLista);
  375.  
  376. inicioLista = insertarEnLista(10,inicioLista);
  377.  
  378. inicioLista = insertarEnLista(11,inicioLista);
  379.  
  380. inicioLista = insertarInicio(5,inicioLista);
  381.  
  382. imprimirLista(inicioLista);
  383.  
  384. return EXIT_SUCCESS;
  385. }
Advertisement
Add Comment
Please, Sign In to add comment