Advertisement
S4NCHEZ

Untitled

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