Guest
Public paste!

ejemplo de listas circulares en C

By: a guest | Mar 17th, 2010 | Syntax: C++ | Size: 3.37 KB | Hits: 459 | Expires: Never
Copy text to clipboard
  1. #include<stdio.h>
  2. #include<conio.h>
  3. #include<stdlib.h>
  4. #include<string.h>
  5.  
  6. struct lista
  7. {
  8. int num;
  9. struct lista *sig;
  10. };
  11. typedef struct lista nodo;
  12.  
  13. void inicio();
  14. void final();
  15. void mostrar();
  16. void del();
  17. void antes();
  18. void despues();
  19.  
  20. nodo *cab=NULL;
  21. nodo *ult=NULL;
  22.  
  23. void main()
  24. {
  25. int opc=0;
  26. while(opc!=7)
  27. {
  28. clrscr();
  29. printf("MENU\n1.- ingresar al inicio\n2.- ingresar al final\n3.- insertar antes\n4.- insertar despues\n5.- imprimir\n6.- eliminar\n7.- salir\ningrese su opcion: ");
  30. scanf("%d",&opc);
  31. switch(opc)
  32. {
  33. case 1:
  34. inicio();
  35. break;
  36. case 2:
  37. final();
  38. break;
  39. case 3:
  40. antes();
  41. break;
  42. case 4:
  43. despues();
  44. break;
  45. case 5:
  46. mostrar();
  47. break;
  48. case 6:
  49. del();
  50. break;
  51. }
  52. }
  53. }
  54.  
  55. void inicio()
  56. {
  57. nodo *nuevo;
  58. char resp='s';
  59. while(resp!='n')
  60. {
  61. nuevo=((nodo*)malloc(sizeof(nodo)));
  62. printf("\ningrese el nuevo numero: ");
  63. scanf("%d",&nuevo->num);
  64. if(cab==NULL)
  65. {
  66. cab=nuevo;     
  67. nuevo->sig=cab;
  68. ult=cab;
  69. }
  70. else
  71. {
  72. nuevo->sig=cab;
  73. cab=nuevo;
  74. ult->sig=cab;
  75. }
  76. printf("\ndesea agregar otro numero? s/n: ");
  77. fflush(stdin);
  78. scanf("%c",&resp);
  79. }
  80. }
  81.  
  82. void final()
  83. {
  84. nodo *nuevo;
  85. char resp='s';
  86. while(resp!='n')
  87. {
  88. nuevo=((nodo*)malloc(sizeof(nodo)));
  89. printf("\ningrese el nuevo numero: ");
  90. scanf("%d",&nuevo->num);
  91. if(cab==NULL)
  92. {
  93. cab=nuevo;
  94. nuevo->sig=cab;
  95. ult=cab;
  96. }
  97. else
  98. {
  99. ult->sig=nuevo;
  100. ult=nuevo;
  101. ult->sig=cab;
  102. }
  103. printf("\ndesea agregar otro numero? s/n: ");
  104. fflush(stdin);
  105. scanf("%c",&resp);
  106. }
  107. }
  108.  
  109. void mostrar()
  110. {
  111. nodo *ptr;
  112. int valido=0;
  113. ptr=cab;
  114. while(valido!=1)
  115. {
  116. if(ptr==ult)
  117. {
  118. valido=1;
  119. }
  120. printf("%d",ptr->num);
  121. ptr=ptr->sig;
  122. }
  123. getch();
  124. }
  125.  
  126. void del()
  127. {
  128. nodo *ptr;
  129. nodo *pkr;
  130. nodo *aux=NULL;
  131. int num, y=0, valido=0, vali2=0, vali3=0;
  132. ptr=cab;
  133. pkr=cab;
  134. printf("\ningrese el numero a borrar: ");
  135. scanf("%d",&num);
  136. while(valido!=1)
  137. {
  138. if(ptr==ult)
  139. {
  140. valido=1;
  141. }
  142. if(num==ptr->num)
  143. {
  144. aux=ptr;
  145. y=1;
  146. }
  147. if((ptr==cab)&&(y==1))
  148. {
  149. cab=ptr->sig;
  150. ult->sig=cab;
  151. y=0;
  152. }
  153. else if((ptr==ult)&&(y==1))
  154. {
  155. while(vali2!=1)
  156. {
  157. if(pkr==ult)
  158. {
  159. vali2=1;
  160. }
  161. if(pkr->sig==aux)
  162. {
  163. ult=pkr;
  164. ult->sig=cab;
  165. y=0;
  166. }
  167. pkr=pkr->sig;
  168. }
  169. }
  170. else if(y==1)
  171. {
  172. while(vali3!=1)
  173. {
  174. if(pkr==ult)
  175. {
  176. vali3=1;
  177. }
  178. if(pkr->sig==aux)
  179. {
  180. pkr->sig=aux->sig;
  181. y=0;
  182. }
  183. pkr=pkr->sig;
  184. }
  185. }
  186. ptr=ptr->sig;
  187. }
  188. }
  189.  
  190. void antes()
  191. {
  192. nodo *nuevo, *ptr, *pkr, *aux;
  193. int num, y=0, valido=0;
  194. char resp='s';
  195. ptr=cab;
  196. pkr=cab;
  197. while(resp!='n')
  198. {
  199. nuevo=((nodo*)malloc(sizeof(nodo)));
  200. printf("\ningrese el nuevo numero: ");
  201. scanf("%d",&nuevo->num);
  202. printf("\nantes de quien quiere ingresar? INGRESE EL NUMERO: ");
  203. scanf("%d",&num);
  204. while(valido!=1)
  205. {
  206. if(ptr==ult)
  207. {
  208. valido=1;
  209. }
  210. if(num==ptr->num)
  211. {
  212. aux=ptr;
  213. y=1;
  214. }
  215. while(y==1)
  216. {
  217. if(pkr->sig==aux)
  218. {
  219. pkr->sig=nuevo;
  220. nuevo->sig=aux;
  221. y=0;
  222. }
  223. pkr=pkr->sig;
  224. }
  225. ptr=ptr->sig;
  226. }
  227. printf("\ndesea agregar otro numero? s/n: ");
  228. fflush(stdin);
  229. scanf("%c",&resp);
  230. }
  231.  
  232. }
  233.  
  234. void despues()
  235. {
  236. nodo *ptr, *nuevo;
  237. ptr=cab;
  238. char resp='s';
  239. int num, valido=0;
  240. while(resp!='n')
  241. {
  242. nuevo=((nodo*)malloc(sizeof(nodo)));
  243. printf("\ningrese el nuevo numero: ");
  244. scanf("%d",&nuevo->num);
  245. printf("\ndespues de quien quiere ingresar? INGRESE EL NUMERO: ");
  246. scanf("%d",&num);
  247. while(valido!=1)
  248. {
  249. if(ptr==ult)
  250. {
  251. valido=1;
  252. }
  253. if(num==ptr->num)
  254. {
  255. nuevo->sig=ptr->sig;
  256. ptr->sig=nuevo;
  257. }
  258. ptr=ptr->sig;
  259. }
  260. printf("\ndesea agregar otro numero? s/n: ");
  261. fflush(stdin);
  262. scanf("%c",&resp);
  263. }
  264. }