Advertisement
Guest User

cuvinte

a guest
Dec 3rd, 2016
84
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.18 KB | None | 0 0
  1. //
  2. // main.c
  3. // cuvinte_grafuri
  4. //
  5. // Created by Groza Miruna on 12/3/16.
  6. // Copyright © 2016 Groza Miruna. All rights reserved.
  7. //
  8.  
  9. #include <stdio.h>
  10. #include <string.h>
  11. #include <stdlib.h>
  12.  
  13. int k=0,n;//nr de noduri inserate
  14.  
  15. struct Nod {
  16. char *ch;
  17. struct Nod *urm;
  18. };
  19.  
  20.  
  21. struct graf {
  22. char *cheie;
  23. struct Nod *prim;
  24. }gr[100];
  25.  
  26.  
  27. void initializare()
  28. {
  29. int i;
  30. for (i = 0; i < 100; i++)
  31. {
  32. gr[i].cheie="\n";
  33. gr[i].prim = NULL;
  34. }
  35. k=0;
  36. }
  37.  
  38. void afisare()
  39. {
  40. struct Nod *p;
  41. for(int i=0;i<k;i++)
  42. {
  43. printf("%s-> ",gr[i].cheie);
  44. for(p=gr[i].prim; p!=NULL; p=p->urm)
  45. printf("%s; ",p->ch);
  46. printf("\n");
  47. }
  48. }
  49.  
  50.  
  51. int exista_arc(char *x, char *y)
  52. {
  53. int ok=0,i;
  54.  
  55. for(i=0; i<n && ok<2 ;i++)
  56. if(x[i]!=y[i])
  57. ok++;
  58. return ok;
  59. }
  60.  
  61. int exista_nod(char *x)
  62. {
  63. int ok=1;
  64. for(int i=0;i<k && ok;i++)
  65. if(strcmp(x,gr[i].cheie)==0)
  66. ok=0;
  67. return ok;
  68. }
  69.  
  70.  
  71. void inserare_arc(char *x, char *y)
  72. {
  73. struct Nod *n,*m,*p = NULL,*q= NULL;
  74. int i;
  75.  
  76. n = (struct Nod*)malloc(sizeof(struct Nod*));
  77. n->ch=(char*)malloc(strlen(x)+1);
  78. strcpy(n->ch,x);
  79. n->urm=NULL;
  80.  
  81. m = (struct Nod*)malloc(sizeof(struct Nod*));
  82. m->ch=(char*)malloc(strlen(y)+1);
  83. strcpy(m->ch,y);
  84. m->urm=NULL;
  85.  
  86. for(i=0;i<k;i++)
  87. {
  88. if(strcmp(gr[i].cheie,x)==0)
  89. {
  90. if(gr[i].prim == NULL)
  91. gr[i].prim=m;
  92. else
  93. {
  94. for(p=gr[i].prim; p->urm!=NULL ; p=p->urm);
  95. p->urm=m;
  96. }
  97. }
  98. else
  99. if(strcmp(gr[i].cheie,y)==0)
  100. {
  101. if(gr[i].prim==NULL)
  102. gr[i].prim=n;
  103. else
  104. {
  105. for(q= gr[i].prim; q->urm!= NULL; q=q->urm);
  106. q->urm=n;
  107. }
  108.  
  109. }
  110. }
  111. }
  112.  
  113.  
  114.  
  115. void inserare_nod (char *x)
  116. {
  117. gr[k].cheie=(char*)malloc(strlen(x)+1);
  118. strcpy(gr[k].cheie,x);
  119. gr[k].prim = NULL;
  120. k++;
  121. for(int i=0;i<k;i++)
  122. if(exista_arc(x ,gr[i].cheie)==1)
  123. inserare_arc(x,gr[i].cheie);
  124. }
  125.  
  126.  
  127. void sterge(char *x)
  128. {
  129. int i;
  130. struct Nod *p, *q;
  131. for (i = 0; i < k; i++) {
  132. if (gr[i].prim != NULL) {
  133. p = gr[i].prim;
  134. if (strcmp(gr[i].prim->ch,x)==0)
  135. {
  136. q = gr[i].prim;
  137. gr[i].prim = q->urm;
  138. free(p);
  139. }
  140. else {
  141. while (p->urm != NULL) {
  142. if (strcmp(p->urm->ch,x)==0)
  143. {
  144. q = p->urm;
  145. if (q->urm == NULL)
  146. {
  147. p->urm = NULL;
  148. free(q);
  149. }
  150. else
  151. {
  152. p->urm = q->urm;
  153. free(q);
  154. }
  155. }
  156. p = p->urm;
  157. }
  158. }
  159. }
  160. }
  161. }
  162. void suprima_nod(char* x)
  163. {
  164. int i, j;
  165. sterge(x);
  166. for (i = 0; i < k; i++)
  167. if (strcmp(gr[i].cheie,x)==0)
  168. break;
  169. for(j=i;j<k-1;j++)
  170. gr[j] = gr[j+1];
  171. gr[j].cheie = 0;
  172. gr[j].prim = NULL;
  173. }
  174.  
  175.  
  176.  
  177. int main(int argc, const char * argv[])
  178. {
  179. int opt;
  180. char v[10];
  181.  
  182. initializare();
  183. printf("\nDati lungimea cuvantului: ");
  184. scanf("%d",&n);
  185. do{
  186. printf("\n1.Introducere\n2.Suprimare\n3.Afisare\nDati opt: ");
  187. scanf("%d",&opt);
  188. switch (opt) {
  189. case 1:
  190. printf("Dati cuvantul de lungime %d: ",n);
  191. fflush(stdin);
  192. scanf("%s",v);
  193. if(strlen(v) == n && exista_nod(v))
  194. inserare_nod(v);
  195.  
  196. else
  197. printf("Cuvantul introdus nu are lungimea de %d litere sau exista deja!",n);
  198. break;
  199. case 2:
  200. printf("Dati cuvantul care doriti sa il suprimati: ");
  201. scanf("%s",v);
  202. if(!exista_nod(v))
  203. {
  204. suprima_nod(v);
  205. k--;
  206. }
  207. else
  208. printf("Cuvantul cautat nu exista!\n");
  209. break;
  210. case 3:
  211. afisare();
  212. break;
  213.  
  214. case 5:
  215. inserare_nod("CERNE");
  216. inserare_nod("CARNE");
  217. inserare_nod("CARTE");
  218. inserare_nod("CERTE");
  219. inserare_nod("CURTE");
  220. inserare_nod("CURBE");
  221. inserare_nod("CURSE");
  222. inserare_nod("BURSE");
  223.  
  224. break;
  225. default:
  226. printf("Nu ati introdus o optiune valida!\n");
  227. break;
  228. }
  229. }while(opt!=0);
  230.  
  231. return 0;
  232. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement