Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #define _CRT_SECURE_NO_WARNINGS
- #include <Windows.h>
- #include <stdio.h>
- #include <stdlib.h>
- #include <locale.h>yy
- #include <math.h>
- struct list
- {
- int field;
- struct list* ptr;
- struct list* prevptr;
- };
- struct list* init()
- {
- struct list* lst;
- lst = (struct list*)malloc(sizeof(struct list));
- if (!lst) {
- printf("Ошибка выделения памяти\n");
- }
- lst->ptr = NULL;
- lst->prevptr = NULL;
- return(lst);
- }
- struct list* addelem(struct list* lst, int number)
- {
- struct list* temp1, * p1;
- temp1 = (struct list*)malloc(sizeof(struct list));
- if (!temp1) {
- printf("Ошибка выделения памяти\n");
- }
- p1 = lst->ptr;
- lst->ptr = temp1;
- temp1->field = number;
- temp1->ptr = p1;
- temp1->prevptr = lst;
- if (p1 != NULL) { p1->prevptr = temp1; }
- return temp1;
- }
- struct list* deletelem(struct list* lst)
- {
- struct list* prev, * next;
- prev = lst->prevptr;
- next = lst->ptr;
- if (prev != NULL)
- prev->ptr = lst->ptr;
- if (next != NULL)
- next->prevptr = lst->prevptr;
- free(lst);
- return(prev);
- }
- struct list* deletehead(struct list* root)
- {
- struct list* temp;
- temp = root->ptr;
- free(root);
- return(temp);
- }
- void deleteall(struct list* root)
- {
- struct list* temp, * p;
- p = root->ptr;
- temp = p;
- while (p != NULL) {
- p = p->ptr;
- free(temp);
- temp = p;
- }
- }
- void listprintall(struct list* lst)
- {
- struct list* p;
- p = lst->ptr;
- do {
- printf("%d ", p->field);
- p = p->ptr;
- } while (p != NULL);
- }
- void listprint(struct list* lst, struct list* pointer)
- {
- struct list* p;
- p = lst->ptr;
- do {
- if (p == pointer) {
- printf(" ->");
- printf("%d", p->field);
- printf("<- ");
- p = p->ptr;
- }
- else {
- printf("%d ", p->field);
- p = p->ptr;
- }
- } while (p != NULL);
- }
- struct list* move(struct list* root, int n) {
- struct list* s;
- int i = 0;
- s = root;
- for (i = 0; i < n; i++) {
- if (s->ptr == NULL) break;
- s = s->ptr;
- }
- return s;
- }
- int stuckThree(struct list* root) {
- return root->ptr == NULL ? 1 : 0;
- }
- int checkAccessable(int isStructAccessable) {
- if (isStructAccessable == 0) {
- printf("Был выбран невозможный для выполнения пункт, пожалуйста выберите 'пункт начать работу'!\n");
- }
- return isStructAccessable;
- }
- void endAccess(int* isStructAccessable, int* isStructCreated, int toDel) {
- if (toDel == 1) {
- *isStructCreated = 0;
- }
- *isStructAccessable = 0;
- }
- struct list* endPoint(struct list* root) {
- struct list* copyRoot;
- copyRoot = root->ptr;
- while (copyRoot != NULL) {
- copyRoot = copyRoot->ptr;
- }
- return copyRoot;
- }
- void listprintr(struct list* lst, struct list* pointer) {
- struct list* p;
- p = lst;
- while (p->ptr != NULL)
- p = p->ptr;
- do {
- if (p == pointer) {
- printf(" ->");
- printf("%d", p->field);
- printf("<- ");
- p = p->prevptr;
- }
- else {
- printf("%d ", p->field);
- p = p->prevptr;
- }
- } while (p->prevptr != NULL);
- }
- int main()
- {
- setlocale(LC_ALL, "Rus");
- struct list* root = init(), * Ist = root, * copy;
- int flagAccessable = 0, ex;
- struct list* CopyElement;
- int menu_enter = 0;
- int elemcanhge;
- int number;
- int stuck;
- while (menu_enter != 22) {
- printf("////////////////////////////////////////////////////////////////////////////\n");
- printf("1. Начать работу +\n");
- printf("2. Опустошить список +\n");
- printf("3. Проверить яляется ли список пустым +\n");
- printf("4. Установить рабочий указатель на начало списка +\n");
- printf("5. Установить рабочий указатель в конец списка +\n");
- printf("6. Проверка: рабочий указатель в начале списка? +\n");
- printf("7. Проверка: рабочий указатель в конце списка? +\n");
- printf("8. Передвинуть рабочий указатель вперёд +\n");
- printf("9. Передвинуть рабочий указатель назад +\n");
- printf("10. Показать значение элемента списка до указателя \n");
- printf("11. Показать значение элемента списка за указателем \n");
- printf("12. Удалить элемент списка до указателя\n");
- printf("13. Удалить элемент списка за указателем\n");
- printf("14. Взять элемент списка до указателя\n");
- printf("15. Взять элемент списка за указателем\n");
- printf("16. Изменить значение списка до указателя +\n");
- printf("17. Изменить значение списка за указателем +\n");
- printf("18. Добавить элемент до указателя указателем +\n");
- printf("19. Добавить элемент за указателем +\n");
- printf("20. Распечатать список +\n");
- printf("21. Включение\\Отключение идентификатора доступа +\n");
- printf("22. Закончить работу +\n");
- printf("////////////////////////////////////////////////////////////////////////////\n");
- printf("Введите желаемый пункт : ");
- scanf("%d", &menu_enter);
- switch (menu_enter) {
- case 1:
- system("cls");
- if (flagAccessable != 1) {
- root = init();
- flagAccessable = 1;
- Ist = root;
- }
- break;
- case 2:
- system("cls");
- if (checkAccessable(flagAccessable) == 1) {
- deleteall(root);
- }
- break;
- case 3:
- system("cls");
- if (checkAccessable(flagAccessable) == 1) {
- stuck = stuckThree(root);
- if (stuck == 1) {
- printf("Список пуст\n");
- }
- else { printf("Список не пуст\n"); }
- }
- else printf("Начните Работу\n");
- break;
- case 4:
- system("cls");
- if (checkAccessable(flagAccessable) == 1) {
- Ist = root->ptr;
- printf("Список значений : ");
- listprint(root, Ist);
- printf("\n");
- printf("Список значений в обратном направлении :");
- listprintr(root, Ist);
- printf("\n");
- }
- break;
- case 5:
- system("cls");
- if (checkAccessable(flagAccessable) == 1) {
- Ist = endPoint(root);
- printf("Список значений : ");
- listprint(root, Ist);
- printf("\n");
- printf("Список значений в обратном направлении :");
- listprintr(root, Ist);
- printf("\n");
- }
- break;
- case 6:
- system("cls");
- if (checkAccessable(flagAccessable) == 1) {
- copy = Ist->prevptr;
- if (copy->prevptr == NULL) {
- printf("Рабочий указатель в начале.");
- }
- else { printf("Рабочий указатель не в начале."); }
- printf("Список значений : ");
- listprint(root, Ist);
- printf("\n");
- printf("Список значений в обратном направлении :");
- listprintr(root, Ist);
- printf("\n");
- }
- break;
- case 7:
- system("cls");
- if (checkAccessable(flagAccessable) == 1) {
- if (Ist->ptr == NULL) {
- printf("Рабочий указатель в конце.");
- }
- else { printf("Рабочий указатель не в конце."); }
- printf("Список значений : ");
- listprint(root, Ist);
- printf("\n");
- printf("Список значений в обратном направлении :");
- listprintr(root, Ist);
- printf("\n");
- }
- break;
- case 8:
- system("cls");
- if (checkAccessable(flagAccessable) == 1) {
- Ist = Ist->ptr;
- printf("Список значений : ");
- listprint(root, Ist);
- printf("\n");
- printf("Список значений в обратном направлении :");
- listprintr(root, Ist);
- printf("\n");
- }
- break;
- case 9:
- system("cls");
- if (checkAccessable(flagAccessable) == 1 || Ist->ptr != NULL) {
- Ist = Ist->prevptr;
- printf("Список значений : ");
- listprint(root, Ist);
- printf("\n");
- printf("Список значений в обратном направлении :");
- listprintr(root, Ist);
- printf("\n");
- }
- break;
- case 10:
- system("cls");
- if (checkAccessable(flagAccessable) == 1) {
- copy = Ist->prevptr;
- printf("Значение элемента до указателя : ");
- printf("%d", copy->field);
- printf("\n");
- printf("Список значений : ");
- listprint(root, Ist);
- printf("\n");
- printf("Список значений в обратном направлении :");
- listprintr(root, Ist);
- printf("\n");
- }
- break;
- case 11:
- system("cls");
- if (checkAccessable(flagAccessable) == 1) {
- printf("Значение элемента за указателем : ");
- printf("%d", Ist->field);
- printf("\n");
- printf("Список значений : ");
- listprint(root, Ist);
- printf("\n");
- printf("Список значений в обратном направлении :");
- listprintr(root, Ist);
- printf("\n");
- }
- break;
- case 12:
- system("cls");
- if (checkAccessable(flagAccessable) == 1) {
- deletelem(Ist->prevptr);
- printf("Список значений : ");
- listprint(root, Ist);
- printf("\n");
- printf("Список значений в обратном направлении :");
- listprintr(root, Ist);
- printf("\n");
- }
- break;
- case 13:
- system("cls");
- if (checkAccessable(flagAccessable) == 1 && Ist->ptr != NULL) {
- deletelem(Ist->ptr);
- printf("Список значений : ");
- listprint(root, Ist);
- printf("\n");
- printf("Список значений в обратном направлении :");
- listprintr(root, Ist);
- printf("\n");
- }
- break;
- case 14:
- system("cls");
- if (checkAccessable(flagAccessable) == 1) {
- CopyElement = Ist->prevptr;
- // Ist = deletelem(Ist,root);
- }
- break;
- case 15:
- system("cls");
- if (checkAccessable(flagAccessable) == 1) {
- CopyElement = Ist->ptr;
- // Ist = deletelem(Ist,root);
- }
- break;
- case 16:
- system("cls");
- if (checkAccessable(flagAccessable) == 1) {
- printf("Введите значение на которое хотитите поменять : ");
- scanf("%d", &elemcanhge);
- copy = Ist->prevptr;
- copy->field = elemcanhge;
- printf("Список значений : ");
- listprint(root, Ist);
- printf("\n");
- printf("Список значений в обратном направлении :");
- listprintr(root, Ist);
- printf("\n");
- }
- break;
- case 17:
- system("cls");
- if (checkAccessable(flagAccessable) == 1) {
- printf("Введите значение на которое хотитите поменять : ");
- scanf("%d", &elemcanhge);
- copy = Ist->ptr;
- copy->field = elemcanhge;
- printf("Список значений : ");
- listprint(root, Ist);
- printf("\n");
- printf("Список значений в обратном направлении :");
- listprintr(root, Ist);
- printf("\n");
- }
- break;
- case 18:
- system("cls");
- if (checkAccessable(flagAccessable) == 1) {
- printf("Введите значение которое хотитите добавить : ");
- scanf("%d", &number);
- //printf("%d", number);
- Ist = addelem(Ist->prevptr, number);
- //Ist = PIst->ptr;
- // printf("%d",Ist->field);
- printf("Список значений : ");
- listprint(root, Ist);
- printf("\n");
- printf("Список значений в обратном направлении :");
- listprintr(root, Ist);
- printf("\n");
- }
- break;
- case 19:
- system("cls");
- if (checkAccessable(flagAccessable) == 1) {
- printf("Введите значение которое хотитите добавить : ");
- scanf("%d", &number);
- //printf("%d", number);
- Ist = addelem(Ist, number);
- //PIst = Ist->prevptr;
- // printf("%d",Ist->field);
- printf("Список значений : ");
- listprint(root, Ist);
- printf("\n");
- printf("Список значений в обратном направлении :");
- listprintr(root, Ist);
- printf("\n");
- }
- break;
- case 20:
- system("cls");
- if (checkAccessable(flagAccessable) == 1 && stuckThree(root) != 1) {
- printf("Список значений : ");
- listprintall(root);
- printf("\n");
- }
- else printf("Список пуст\n");
- break;
- case 21:
- system("cls");
- if (checkAccessable(flagAccessable) == 1) {
- printf("Выберите протакол закрытия доступа\n");
- printf("1-Отключение идентификатора доступа 2-Включение идентификатора доступа\n");
- printf("Введите желаемый пункт : ");
- scanf("%d", &ex);
- if (ex == 2) {
- flagAccessable = 1;
- //deleteall(root);
- }
- else { flagAccessable = 0; }
- // else printf("Начните Работу\n");
- }
- break;
- case 22:
- system("cls");
- deleteall(root);
- break;
- default:
- printf("Данной операции не существует\n");
- }
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement