joseleeph

Untitled

Oct 29th, 2020
102
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 8.71 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <ctype.h>
  4. #include <cs50.h>
  5.  
  6. typedef struct dllist
  7. {
  8. char word[26];
  9. struct dllist *next;
  10. struct dllist *prev;
  11. }
  12. dllnode;
  13.  
  14. bool find(dllnode *head, char *string);
  15.  
  16. dllnode *insert(dllnode *head, char *string)
  17. {
  18. dllnode *tmp = head;
  19. dllnode *input = malloc(sizeof(dllnode));
  20. for (int i = 0; string[i] != '\0'; i++)
  21. {
  22. input->word[i] = string[i];
  23. }
  24. input->next = tmp;
  25. return input;
  26. free(input);
  27. }
  28. unsigned int hash(const char *word)// to hash a-z 0-26, maybe use ascii value and subtract?
  29. {
  30.  
  31. char c;
  32. int val = 0;
  33. //int cval;
  34. for (int i = 0; word[i] != '\0'; i++)
  35. {
  36. c = word[i];
  37. if (isalpha(c))
  38. {
  39. if (isupper(c))
  40. {
  41. //c = word[i]
  42. val += c - 65;
  43. }
  44. if (islower(c))
  45. {
  46. val += c - 97;
  47. }
  48. if (c == 13)
  49. {
  50. continue;
  51. }
  52. }
  53. else
  54. continue;
  55.  
  56. }
  57. return val%26;
  58. }
  59. bool find(dllnode *head, char *string)
  60. {
  61. dllnode *trav = head;
  62. bool found = false;
  63.  
  64. for (int i = 0; trav != NULL; i++)
  65. {
  66. for (int j = 0; trav->word[j] != '\0'; j++)
  67. {
  68. if (trav->word[j] == string[j]) // this returns true if any of the characters match
  69. {
  70. found = true;
  71. //continue;?
  72. }
  73. else
  74. found = false;
  75. }
  76. trav=trav->next;
  77. }
  78. return found;
  79. }
  80. void erase(dllnode *target)
  81. {
  82. target->prev->next = target->next;
  83. target->next->prev = target->prev;
  84. free(target);
  85. }
  86.  
  87. int main(int argc, char *argv[])
  88. {
  89.  
  90. dllnode *fruit1 = malloc(sizeof(dllnode));
  91. dllnode *fruit2 = malloc(sizeof(dllnode));
  92. dllnode *fruit3 = malloc(sizeof(dllnode));
  93.  
  94. char *f1 = "apple";
  95. char *f2 = "avocado";
  96. char *f3 = "papaya";
  97.  
  98. for (int i = 0; f1[i] != '\0'; i++)
  99. {
  100. fruit1->word[i] = f1[i];
  101. }
  102. fruit1->next = fruit2;
  103. fruit1->prev = NULL;
  104.  
  105. for (int i = 0; f2[i] != '\0'; i++)
  106. {
  107. fruit2->word[i] = f2[i];
  108. }
  109. fruit2->next = fruit3;
  110. fruit2->prev = fruit1;
  111.  
  112. for (int i = 0; f3[i] != '\0'; i++)
  113. {
  114. fruit3->word[i] = f3[i];
  115. }
  116. fruit3->next = NULL;
  117. fruit3->prev = fruit2;
  118.  
  119. printf("\n\nnow printing linked list of fruits: \n\n");
  120. printf("fruit1->word prints: %s\n",fruit1->word);
  121. printf("fruit1->next->word prints: %s\n",fruit1->next->word);
  122. printf("fruit1->prev->word prints: %s\n",fruit1->prev->word);
  123. printf("fruit2->word prints: %s\n",fruit2->word);
  124. printf("fruit2->next->word prints: %s\n",fruit2->next->word);
  125. printf("fruit2->prev->word prints: %s\n",fruit2->prev->word);
  126. printf("fruit3->next->word prints: %s\n\n",fruit3->next->word);
  127. printf("fruit3->word prints: %s\n\n",fruit3->word);
  128. printf("fruit3->prev->word prints: %s\n\n",fruit3->prev->word);
  129.  
  130. dllnode *band1 = malloc(sizeof(dllnode));
  131. dllnode *band2 = malloc(sizeof(dllnode));
  132. dllnode *band3 = malloc(sizeof(dllnode));
  133.  
  134. char *b1 = "Soundgarden"; // points to nirvana next
  135. char *b2 = "Nirvana"; // points to mudhoney next
  136. char *b3 = "Mudhoney";
  137.  
  138. for (int i = 0; b1[i] != '\0'; i++)
  139. {
  140. band1->word[i] = b1[i];
  141. }
  142. band1->next = band2;
  143. band1->prev = NULL;
  144.  
  145. for (int i = 0; b2[i] != '\0'; i++)
  146. {
  147. band2->word[i] = b2[i];
  148. }
  149. band2->next = band3;
  150. band2->prev = band1;
  151.  
  152. for (int i = 0; b3[i] != '\0'; i++)
  153. {
  154. band3->word[i] = b3[i];
  155. }
  156. band3->next = NULL;
  157. band3->prev = band2;
  158.  
  159. printf("band1->word prints %s\n", band1->word);
  160. printf("band1->next->word prints %s\n", band1->next->word);
  161.  
  162. dllnode *prog1 = malloc(sizeof(dllnode));
  163. dllnode *prog2 = malloc(sizeof(dllnode));
  164. dllnode *prog3 = malloc(sizeof(dllnode));
  165.  
  166. char *p1 = "Photoshop";
  167. char *p2 = "Maya";
  168. char *p3 = "Zbrush";
  169.  
  170. // copy characters from pointers to word field
  171.  
  172. for (int i = 0; p1[i] != '\0'; i++)
  173. {
  174. prog1->word[i] = p1[i];
  175. }
  176. prog1->next = prog2;
  177. prog1->prev = NULL;
  178.  
  179. for (int i = 0; p2[i] != '\0'; i++)
  180. {
  181. prog2->word[i] = p2[i];
  182. }
  183. prog2->next = prog3;
  184. prog2->prev = prog1;
  185.  
  186. for (int i = 0; p3[i] != '\0'; i++)
  187. {
  188. prog3->word[i] = p3[i];
  189. }
  190. prog3->next = NULL;
  191. prog3->prev = prog2;
  192.  
  193.  
  194.  
  195. //node *table[N] = malloc(N*sizeof(node));
  196.  
  197. dllnode *table[3];
  198. table[0] = fruit1;
  199. table[1] = band1;
  200. table[2] = prog1;
  201.  
  202. for (int i = 0; i < 3; i++)
  203. {
  204. printf("table[%i]->word prints: %s\n",i,table[i]->word);
  205. printf("table[%i]->next->word prints: %s\n",i,table[i]->next->word);
  206. printf("table[%i]->next->next->word prints: %s\n",i,table[i]->next->next->word);
  207.  
  208. }
  209.  
  210.  
  211. for (int i = 0; i < 3; i++)
  212. {
  213. for (int j = 0; table[i]->word[j] != '\0'; j++)
  214. {
  215.  
  216. if (table[i]->word[j] == '\0')
  217. {
  218. printf("%c \n",table[i]->word[j]);
  219. }
  220. else
  221. {
  222. printf("%c \n", table[i]->word[j]);
  223. }
  224. }
  225. }
  226.  
  227. printf("\n\n");
  228.  
  229. printf("cursor word loop forwards\n");
  230. for (int i = 0; i < 3; i++) // how do i know how big table is?
  231. {
  232. dllnode *cursor = table[i];
  233. //for (int j = 0; cursor->next != NULL; j++)
  234. for (int j = 0; cursor != NULL; j++)
  235. {
  236. printf("%s ", cursor->word);
  237. cursor = cursor->next;
  238. }
  239. }
  240. printf("\n\n");
  241.  
  242. printf("cursor word loop backwards\n");
  243. for (int i = 2; i >= 0; i--) // how do i know how big table is?
  244. {
  245. dllnode *cursor = table[i]->next->next;
  246. //for (int j = 0; cursor->next != NULL; j++)
  247. for (int j = 0; cursor != NULL; j++)
  248. {
  249. printf("%s ", cursor->word);
  250. cursor = cursor->prev;
  251. }
  252. }
  253. printf("\n\n");
  254.  
  255. //bool found = false;
  256. printf("testing the find function");
  257.  
  258. bool resultm = find(table[2],"Maya");
  259. printf("now looking for a word with the find() function\n");
  260. printf("does the word maya appear in the table[2]?\n");
  261. printf("looking for the word Maya in table[2]\n");
  262. printf("find(table[2],resultm) prints: \n");
  263. printf("%d\n",resultm);
  264. printf("resultm prints:\n");
  265. if (resultm)
  266. {
  267. printf("Found!\n\n");
  268. }
  269. else
  270. printf("Not Found :(\n\n");
  271.  
  272. printf("searching table[1] for papaya\n");
  273. bool resultp = find(table[0], "papaya");
  274. if (resultp)
  275. {
  276. printf("papaya found!\n");
  277. }
  278. else
  279. printf("papaya not found :(");
  280.  
  281. bool results = find(table[1], "stairs");
  282. if (results)
  283. {
  284. printf("stairs found!\n");
  285. }
  286. else
  287. printf("stairs not found :(\n");
  288.  
  289. printf("the words in table[1] are:\n\n");
  290.  
  291. dllnode *cursor = table[1];
  292. for (int j = 0; cursor != NULL; j++)
  293. {
  294. printf("%s ", cursor->word);
  295. cursor = cursor->next;
  296. }
  297. printf("\n");
  298.  
  299. printf("does the word boobs appear in table[1]?\n");
  300. bool resultb = find(table[1], "boobs");
  301. if (resultb)
  302. {
  303. printf("boobs found!\n");
  304. }
  305. else
  306. printf("boobs not found :(\n");
  307.  
  308. printf("testing the insert function:\n");
  309.  
  310. printf("the words in table[0] before insert() are:\n\n");
  311.  
  312. dllnode *traverse = table[0];
  313. for (int j = 0; traverse != NULL; j++)
  314. {
  315. printf("%s ", traverse->word);
  316. traverse = traverse->next;
  317. }
  318. printf("\n\n");
  319.  
  320.  
  321. char *insword = "hereiam!";
  322. char *outword = table[0]->next->word;
  323.  
  324. table[0] = insert(table[0], insword);
  325.  
  326.  
  327. printf("the words in table[0] after insert() are:\n\n");
  328.  
  329. traverse = table[0];
  330. for (int j = 0; traverse != NULL; j++)
  331. {
  332. printf("%s ", traverse->word);
  333. traverse = traverse->next;
  334. }
  335. printf("\n\n");
  336.  
  337. printf("testing the erase function:\n");
  338. printf("trying to erase the node stored at table[0]->next");
  339. erase(table[0]->next);
  340. printf("the words in table[0] after erase() are: \n"); // delete is a key word and shouldn't be used?
  341.  
  342.  
  343. traverse = table[0];
  344. for (int j = 0; traverse != NULL; j++)
  345. {
  346. printf("%s ", traverse->word);
  347. traverse = traverse->next;
  348. }
  349. printf("\n\n");
  350.  
  351.  
  352.  
  353.  
  354.  
  355. free(prog1);
  356. free(prog2);
  357. free(prog3);
  358. free(band1);
  359. free(band2);
  360. free(band3);
  361. free(fruit1);
  362. free(fruit2);
  363. free(fruit3);
  364. }
  365.  
Advertisement
Add Comment
Please, Sign In to add comment