Advertisement
Guest User

Untitled

a guest
Jan 25th, 2020
124
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.79 KB | None | 0 0
  1. /******************************************************************************
  2.  
  3. Online C Compiler.
  4. Code, Compile, Run and Debug C program online.
  5. Write your code in this editor and press "Run" button to compile and execute it.
  6.  
  7. *******************************************************************************/
  8.  
  9. #include <stdio.h>
  10. struct Node
  11. {
  12. void* key;
  13. struct Node* next;
  14. struct Node* pre;
  15. };
  16.  
  17. struct List
  18. {
  19. struct Node* end;
  20. struct Node* current;
  21. struct Node* start;
  22. int start_index;
  23. int end_index;
  24. int current_index;
  25. };
  26. struct Node arr2[100];
  27. struct List arr1[5];
  28. int head_free_index=0;
  29. int node_free_index=0;;
  30. struct List* ListCreate()
  31. {
  32. struct List* ret;
  33. if(head_free_index+1>=5 || node_free_index+1>=100)
  34. return NULL;
  35. arr2[node_free_index].next=NULL;
  36. arr2[node_free_index].pre=NULL;
  37. arr2[node_free_index].key=NULL;
  38. arr1[head_free_index].start=&arr2[node_free_index];
  39. arr1[head_free_index].end=&arr2[node_free_index];
  40. arr1[head_free_index].current=&arr2[node_free_index];
  41. arr1[head_free_index].start_index=head_free_index;
  42. arr1[head_free_index].end_index=head_free_index;
  43. arr1[head_free_index].current_index=head_free_index;
  44. //if(arr1[head_free_index].start!=NULL) printf("hello");
  45. ret=&arr1[head_free_index];
  46. head_free_index++;
  47. node_free_index++;
  48. return ret;
  49. }
  50. int ListCount(struct List A)
  51. {
  52.  
  53. //A.start=arr1[0].start;
  54. //A.end=arr1[0].end;
  55. //A.current=arr1[0].current;
  56. int count=1;
  57. /*while( arr1[0].current->next!=NULL)
  58. {
  59. //printf("hello0000");
  60. count++;
  61. if (count>=2)break;
  62. struct Node temp;
  63. arr1[0].current=&temp;//arr1[0].current->next;
  64. //A=A.current->next;
  65.  
  66. }*/
  67. int ind = A.end_index - A.start_index;
  68.  
  69. //if(arr1[0].current->next!=NULL)printf("adad");
  70. return ind;
  71. }
  72. void* ListFirst(struct List A)
  73. {
  74. A.current=A.start;
  75. return A.start;
  76. }
  77. void* ListLast(struct List A)
  78. {
  79. A.current=A.end;
  80. return A.end;
  81. }
  82. void* ListNext(struct List A)
  83. {
  84. if(A.current->next==NULL)
  85. return NULL;
  86. A.current=A.current->next;
  87. return A.current;
  88. }
  89. void* ListPrev(struct List A)
  90. {
  91. if(A.current->pre==NULL)
  92. return NULL;
  93. A.current=A.current->pre;
  94. return A.current;
  95. }
  96. void* ListCurr(struct List A)
  97. {
  98. return A.current;
  99. }
  100. int ListAdd(struct List A, void* item )
  101. {
  102. struct Node newNode;
  103. newNode.key=item;
  104. if(node_free_index>=100)
  105. return -1;
  106. if(A.start->next==NULL&&A.start->pre==NULL)
  107. {
  108. //printf("hello");
  109. newNode.next=arr1[0].start;
  110. //if(arr1[0].start!=NULL)printf("fassafds");
  111. newNode.pre=NULL;
  112. arr1[0].start->pre=&newNode;
  113. arr1[0].start=&newNode;
  114. arr1[0].end=newNode.next;
  115. arr1[0].current=&newNode;
  116. node_free_index++;
  117. arr1[0].end_index++;
  118. node_free_index++;
  119. return 0;
  120. //if(arr1[0].current->next!=NULL)printf("asd");
  121. }
  122. else if(A.current==NULL && A.current->next!=NULL)
  123. {
  124. newNode.next=A.start;
  125. A.start->pre=&newNode;
  126. newNode.pre=NULL;
  127. A.start=&newNode;
  128. A.current=&newNode;
  129. //arr1[0].end_index++;
  130. }
  131. else if(A.current==NULL && A.current->pre!=NULL)
  132. {
  133. newNode.pre=A.end;
  134. A.end->next=&newNode;
  135. newNode.next=NULL;
  136. A.end=&newNode;
  137. A.current=&newNode;
  138. //arr1[0].end_index++;
  139. }
  140. else
  141. {
  142. newNode.next=A.current->next;
  143. A.current->next=&newNode;
  144. newNode.pre=A.current;
  145. newNode.next->pre=&newNode;
  146. arr1[0].end_index++;
  147. }
  148. for(int i=node_free_index;i>A.current_index;i--)
  149. {
  150. arr2[i].key=arr2[i-1].key;
  151. arr2[i].next=arr2[i-1].next;
  152. arr2[i].pre=arr2[i-1].pre;
  153. }
  154. for(int i=0;i<head_free_index;i++)
  155. {
  156. if(i!=0)
  157. arr1[i].start=arr1[i].start->next;
  158. arr1[i].end=arr1[i].end->next;
  159. arr1[i].current=arr1[i].current->next;
  160. }
  161. node_free_index++;
  162. //if(arr1[0].current->next!=NULL)printf("asd");
  163. return 0;
  164. }
  165. int ListInsert(struct List A, void* item)
  166. {
  167.  
  168. }
  169. int ListAppend (struct List A, void* item)
  170. {
  171. struct Node newNode;
  172. newNode.key = item;
  173. if(node_free_index>=100)
  174. return -1;
  175. if(A.start->next==NULL&&A.start->pre==NULL)
  176. {
  177. newNode.next=arr1[0].start;
  178. newNode.pre=NULL;
  179. arr1[0].start->pre=&newNode;
  180. arr1[0].start=&newNode;
  181. arr1[0].end=newNode.next;
  182. arr1[0].current=&newNode;
  183. //node_free_index++;
  184. arr1[0].end_index++;
  185. node_free_index++;
  186. return 0;
  187. }
  188. else
  189. {
  190. newNode.pre=A.end;
  191. newNode.next=NULL;
  192. A.end->next=&newNode;
  193. A.end=&newNode;
  194. }
  195. for(int i=node_free_index;i>A.current_index;i--)
  196. {
  197. arr2[i].key=arr2[i-1].key;
  198. arr2[i].next=arr2[i-1].next;
  199. arr2[i].pre=arr2[i-1].pre;
  200. }
  201. for(int i=1;i<head_free_index;i++)
  202. {
  203. arr1[i].start=arr1[i].start->next;
  204. arr1[i].end=arr1[i].end->next;
  205. arr1[i].current=arr1[i].current->next;
  206. }
  207. node_free_index++;
  208. arr1[0].end_index++;
  209. return 0;
  210.  
  211. }
  212. void* ListRemove(struct List A)
  213. {
  214. if(A.current==A.end)
  215. {
  216. //printf("end");
  217. arr1[0].current->pre->next=NULL;
  218. arr1[0].end=arr1[0].end->pre;
  219. arr1[0].current->next=NULL;
  220. arr1[0].current->pre=NULL;
  221. struct Node* temp1=arr1[0].current;
  222. //detele A.current;
  223. arr1[0].end_index--;
  224. arr1[0].current=arr1[0].end;
  225. return temp1;
  226. }
  227. else if(A.current==A.start)
  228. {
  229. //printf("start");
  230. arr1[0].current->next->pre=NULL;
  231. arr1[0].start=arr1[0].start->next;
  232. arr1[0].current->next=NULL;
  233. arr1[0].current->pre=NULL;
  234. struct Node* temp2=arr1[0].current;
  235. //(A.current);
  236. arr1[0].current=arr1[0].start;
  237. arr1[0].start_index++;
  238. return temp2;
  239. }
  240. else
  241. {
  242. //printf("else");
  243. arr1[0].current->next->pre=arr1[0].current->pre;
  244. arr1[0].current->pre->next=arr1[0].current->next;
  245. struct Node* temp=arr1[0].current->next;
  246. arr1[0].current->next=NULL;
  247. arr1[0].current->pre=NULL;
  248. struct Node* temp3=arr1[0].current;
  249. //detele A.current;
  250. arr1[0].end_index--;
  251. arr1[0].current=temp;
  252. return temp3;
  253. }
  254. }
  255. void* ListTrim(struct List A)
  256. {
  257. arr1[0].end->pre->next=NULL;
  258. struct Node* temp=arr1[0].end->pre;
  259. if(A.current==A.end) arr1[0].current=temp;
  260. arr1[0].end->pre=NULL;
  261. arr1[0].end->next=NULL;
  262. struct Node* ret=arr1[0].end;
  263. //delete A.end;
  264. arr1[0].end= temp;
  265. arr1[0].end_index--;
  266. return ret;
  267. }
  268. void* ListConcat(struct List A, struct List B)
  269. {
  270. A.end->next = B.start;
  271. B.start = NULL;
  272. B.end = B.current = B.start;
  273. //Listfree B (but not yet made)
  274. }
  275. int main()
  276. {
  277. arr1[0]=*ListCreate();
  278. //if(arr1[0].current!=NULL)printf("hello");
  279. struct List C;
  280. C.start=arr1[0].start;
  281. C.end=arr1[0].end;
  282. C.current=arr1[0].current;
  283. void* abc=NULL;
  284.  
  285. int a = ListCount(arr1[0]);
  286. printf("%d \n", a);
  287.  
  288. int ads= ListAdd(arr1[0],abc);
  289. //if(arr1[0].current->next!=NULL)printf("adsafafa");
  290. //printf("%d \n", ads);
  291. //if(arr1[0].current->next!=NULL)printf("adsafafa");
  292. a = ListCount(arr1[0]);
  293. printf("%d \n", a);
  294.  
  295. void* gef = NULL;
  296. int blah = ListAdd(arr1[0],gef);
  297. a = ListCount(arr1[0]);
  298. printf("%d \n", a);
  299. void* axe=ListRemove(arr1[0]);
  300. a = ListCount(arr1[0]);
  301. printf("%d \n", a);
  302. return 0;
  303. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement