Advertisement
Guest User

Untitled

a guest
Nov 21st, 2018
101
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 12.25 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. int fl=0,p=1,flp=1,znach,fli=0;
  4. struct list
  5. {int field;
  6. struct list *next;
  7. struct list *before;
  8. };
  9. struct list *first,*last,*firstTemp,*secondTemp;
  10.  
  11.  
  12. void makeEmpty()
  13. {
  14. flp=1;
  15. fli=1;
  16. }
  17. void checkEmpty()
  18. {
  19. if (flp==1)
  20. {printf("Список пуст\n");}
  21. else
  22. {printf ("Список не пуст\n");}
  23. }
  24. void pointerToHead()
  25. {
  26. firstTemp=first;
  27. }
  28. void pointerToEnd()
  29. {
  30. firstTemp=last;
  31. }
  32. void checkHead()
  33. {
  34. if(firstTemp==first)
  35. {
  36. printf("Указатель в начале\n");
  37. }
  38. else
  39. {
  40. printf("Указатель не в начале\n");
  41. }
  42. }
  43. void checkEnd()
  44. {
  45. if(firstTemp==last)
  46. {
  47. printf("Указатель в конце\n");
  48. }
  49. else
  50. {
  51. printf("Указатель не в конце\n");
  52. }
  53. }
  54. void moveForward()
  55. {
  56. int x;
  57. printf("Введите количество позиций:\n");
  58. scanf("%d",&x);
  59. for (int i=0;i<x;i++)
  60. {
  61. if(firstTemp->next== NULL)
  62. {
  63. printf("Вы в конце списка\n");
  64. break;
  65. }
  66. else
  67. {
  68. firstTemp=firstTemp->next;
  69. }
  70. }
  71. }
  72. void moveBackward()
  73. {
  74. int x,i;
  75. printf("Введите количество позиций:\n");
  76. scanf("%d",&x);
  77. for (i=0;i<x;i++)
  78. {
  79. if(firstTemp->before == NULL)
  80. {
  81. printf("Вы в начале списка\n");
  82. break;
  83. }
  84. else
  85. {
  86. firstTemp=firstTemp->before;
  87. }
  88. }
  89. }
  90. void valueBeforePointer()
  91. {
  92. if (firstTemp->before==NULL)
  93. {
  94. printf("Предыдущий элемент отсутствует\n");
  95. }
  96. else
  97. {
  98. printf("%d\n",((firstTemp->before)->field));
  99. }
  100. }
  101. void valueAfterPointer()
  102. {
  103. if(firstTemp->next==NULL)
  104. {
  105. printf("Следующий элемент отсутствует\n");}
  106. else
  107. {
  108. printf("%d\n", ((firstTemp->next)->field));
  109. }
  110. }
  111. void deleteBeforePointer()
  112. {
  113. struct list*dopa;
  114. secondTemp=firstTemp;
  115. if (secondTemp->before==NULL)
  116. {
  117. printf("Вы в начале\n");
  118. }
  119. else
  120. {
  121. secondTemp=secondTemp->before;
  122. if (secondTemp->before==NULL)
  123. {
  124. firstTemp->before=NULL;
  125. first=firstTemp;
  126. free(secondTemp);}
  127. else
  128. {
  129. dopa=secondTemp;
  130. secondTemp=secondTemp->before;
  131. firstTemp->before=secondTemp;
  132. secondTemp->next=firstTemp;
  133. secondTemp=dopa;
  134. free(secondTemp);
  135. }
  136. }
  137. }
  138. void deleteAfterPointer()
  139. {
  140. struct list*dopa;
  141. secondTemp=firstTemp;
  142. if (secondTemp->next==NULL)
  143. {
  144. printf("Вы в конце\n");
  145. }
  146. else
  147. {
  148. secondTemp=secondTemp->next;
  149. if (secondTemp->next==NULL)
  150. {
  151. firstTemp->next=NULL;
  152. last=firstTemp;
  153. free(secondTemp);
  154. }
  155. else
  156. {
  157. dopa=secondTemp;
  158. secondTemp=secondTemp->next;
  159. firstTemp->next=secondTemp;
  160. secondTemp->before=firstTemp;
  161. secondTemp=dopa;
  162. free(secondTemp);
  163. }
  164. }
  165. }
  166. void takeBeforePointer()
  167. {
  168. struct list*dopa;
  169. secondTemp=firstTemp;
  170. if (secondTemp->before==NULL)
  171. {
  172. printf("Вы в начале\n");
  173. }
  174. else
  175. {
  176. secondTemp=secondTemp->before;
  177. if (secondTemp->before==NULL)
  178. {
  179. firstTemp->before=NULL;
  180. znach=secondTemp->field;
  181. first=firstTemp;
  182. free(secondTemp);
  183. }
  184. else
  185. {
  186. dopa=secondTemp;
  187. znach=secondTemp->field;
  188. secondTemp=secondTemp->before;
  189. firstTemp->before=secondTemp;
  190. secondTemp->next=firstTemp;
  191. secondTemp=dopa;
  192. free(secondTemp);
  193. }
  194. }
  195. printf("%d\n",znach);
  196. }
  197. void takeAfterPointer()
  198. {
  199. struct list*dopa;
  200. secondTemp=firstTemp;
  201. if (secondTemp->next==NULL)
  202. {
  203. printf("Вы в конце\n");
  204. }
  205. else
  206. {
  207. secondTemp=secondTemp->next;
  208. if (secondTemp->next==NULL)
  209. {
  210. firstTemp->next=NULL;
  211. znach=secondTemp->field;
  212. last=firstTemp;
  213. free(secondTemp);}
  214. else
  215. {
  216. znach=secondTemp->field;
  217. dopa=secondTemp;
  218. secondTemp=secondTemp->next;
  219. firstTemp->next=secondTemp;
  220. secondTemp->before=firstTemp;
  221. secondTemp=dopa;
  222. free(secondTemp);
  223. }
  224. }
  225. printf("%d\n",znach);
  226. }
  227. void changeBeforePointer()
  228. {
  229. int c;
  230. printf("Введите новое значение:\n");
  231. scanf("%d",&c);
  232. if (firstTemp->before==NULL)
  233. {
  234. printf("Вы в начале\n");
  235. }
  236. else
  237. {
  238. secondTemp=firstTemp->before;
  239. secondTemp->field=c;
  240. }
  241. }
  242. void changeAfterPointer()
  243. {
  244. int c;
  245. printf("Введите новое значение:\n");
  246. scanf("%d",&c);
  247. if (firstTemp->next==NULL)
  248. {
  249. printf("Вы в конце\n");
  250. }
  251. else
  252. {
  253. secondTemp=firstTemp->next;
  254. secondTemp->field=c;
  255. }
  256. }
  257. void addBeforePointer()
  258. {
  259. int c;
  260. struct list*dopa;
  261. printf("Введите значение:\n");
  262. scanf("%d",&c);
  263. if (firstTemp->before==NULL)
  264. {
  265. secondTemp=(struct list*)malloc(sizeof(struct list));
  266. firstTemp->before=secondTemp;
  267. secondTemp->field=c;
  268. secondTemp->before=NULL;
  269. secondTemp->next=firstTemp;
  270. first=secondTemp;
  271. }
  272. else
  273. {
  274. secondTemp=(struct list*)malloc(sizeof(struct list));
  275. secondTemp->field=c;
  276. dopa=firstTemp->before;
  277. secondTemp->next=firstTemp;
  278. secondTemp->before=dopa;
  279. firstTemp->before=secondTemp;
  280. dopa->next=secondTemp;
  281. }
  282. }
  283. void addAfterPointer()
  284. {
  285. int c;
  286. struct list*dopa;
  287. printf("Введите значение:\n");
  288. scanf("%d",&c);
  289. if (flp==1)
  290. {
  291. first->field=c;
  292. first->next=NULL;
  293. first->before=NULL;
  294. last=first;
  295. firstTemp=first;
  296. }
  297. else
  298. {
  299. if (firstTemp->next==NULL)
  300. {
  301. secondTemp=(struct list*)malloc(sizeof(struct list));
  302. firstTemp->next=secondTemp;
  303. secondTemp->field=c;
  304. secondTemp->next=NULL;
  305. secondTemp->before=firstTemp;
  306. last=secondTemp;
  307. }
  308. else
  309. {
  310. secondTemp=(struct list*)malloc(sizeof(struct list));
  311. secondTemp->field=c;
  312. dopa=firstTemp->next;
  313. secondTemp->before=firstTemp;
  314. secondTemp->next=dopa;
  315. firstTemp->next=secondTemp;
  316. dopa->before=secondTemp;
  317. }
  318. }
  319. flp=0;
  320. }
  321. void Print()
  322. {
  323. secondTemp=first;
  324. do
  325. {
  326. if(secondTemp==firstTemp)
  327. {
  328. printf(" (%d) ",secondTemp->field);
  329. }
  330. else
  331. {
  332. printf(" %d ",secondTemp->field);
  333. }
  334. secondTemp=secondTemp->next;
  335. }
  336. while (secondTemp!=NULL);
  337. printf("\n");
  338. secondTemp=last;
  339. do
  340. {
  341. if(secondTemp==firstTemp)
  342. {
  343. printf(" (%d) ",secondTemp->field);
  344. }
  345. else
  346. {
  347. printf(" %d ",secondTemp->field);
  348. }
  349. secondTemp=secondTemp->before;
  350. }
  351.  
  352. while(secondTemp!=NULL);
  353.  
  354. printf("\n");
  355. }
  356. void main(void)
  357. {
  358. first=(struct list*)malloc(sizeof(struct list));
  359. if (first==NULL)
  360. {
  361. exit(1);
  362. }
  363. last=(struct list*)malloc(sizeof(struct list));
  364. if (last==NULL)
  365. {
  366. exit(1);
  367. }
  368. firstTemp=(struct list*)malloc(sizeof(struct list));
  369. if (firstTemp==NULL)
  370. {
  371. exit(1);
  372. }
  373. secondTemp=(struct list*)malloc(sizeof(struct list));
  374. if (secondTemp==NULL)
  375. {
  376. exit(1);
  377. }
  378. while (p==1)
  379. {
  380. int a,b;
  381. printf(" Выберите команду\n");
  382. printf(" \
  383. 1.Начать работу\n \
  384. 2.Сделать список пустым\n \
  385. 3.Проверка на пустоту\n \
  386. 4.Поставить указатель в начало\n \
  387. 5.Поставить указательв конец \n \
  388. 6.Проверка: Указатель в начале?\n \
  389. 7.Проверка: Указатель в конце?\n \
  390. 8.Передвинуть указатель вперед\n \
  391. 9.Передвинуть указатель назад\n \
  392. 10.Вывести значение перед указателем\n \
  393. 11.Вывести значение после указателя\n \
  394. 12.Удалить элемент, стоящий перед указателем\n \
  395. 13.Удалить элемент, стоящий после указателя\n \
  396. 14.Взять элемент, стоящий до указателя\n \
  397. 15.Взять элемент, стоящий после указателя\n \
  398. 16.Изменить значение ячейки, стоящей до указателя\n \
  399. 17.Изменить значение ячейки, стоящей после указателя\n \
  400. 18.Добавить элемент до указателя\n \
  401. 19.Добавить элемент после указателя\n \
  402. 20.Распечатать список\n \
  403. 21.Закончить работу\n");
  404. scanf("%d",&a);
  405. if (a!=1 && fl==0 && a!=21)
  406. {
  407. printf("Вы не начинали работу\n");
  408. }
  409. else
  410. if(fli==0&&a!=2&&a!=1&&a!=21)
  411. {
  412. printf("Для начала сделайте список пустым\n");
  413. }
  414. else
  415. if(flp==1&&a!=3&&a!=19&&a!=1&&a!=21&&a!=2)
  416. {
  417. printf("Список пуст\n");
  418. }
  419. else
  420. {
  421. switch(a)
  422. {
  423. case 1:
  424. fl=1;
  425. break;
  426. case 2:
  427. makeEmpty();
  428. break;
  429. case 3:
  430. checkEmpty();
  431. break;
  432. case 4:
  433. pointerToHead();
  434. break;
  435. case 5:
  436. pointerToEnd();
  437. break;
  438. case 6:
  439. checkHead();
  440. break;
  441. case 7:
  442. checkEnd();
  443. break;
  444. case 8:
  445. moveForward();
  446. break;
  447. case 9:
  448. moveBackward();
  449. break;
  450. case 10:
  451. valueBeforePointer();
  452. break;
  453. case 11:
  454. valueAfterPointer();
  455. break;
  456. case 12:
  457. deleteBeforePointer();
  458. break;
  459. case 13:
  460. deleteAfterPointer();
  461. break;
  462. case 14:
  463. takeBeforePointer();
  464. break;
  465. case 15:
  466. takeAfterPointer();
  467. break;
  468. case 16:
  469. changeBeforePointer();
  470. break;
  471. case 17:
  472. changeAfterPointer();
  473. break;
  474. case 18:
  475. addBeforePointer();
  476. break;
  477. case 19:
  478. addAfterPointer();
  479. break;
  480. case 20:
  481. Print();
  482. break;
  483. case 21:
  484. fl=2;
  485. break;
  486. }
  487. }
  488. if (fl==2)
  489. {
  490. break;
  491. }
  492. }
  493. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement