Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- int fl=0,p=1,flp=1,znach,fli=0;
- struct list
- {int field;
- struct list *next;
- struct list *before;
- };
- struct list *first,*last,*firstTemp,*secondTemp;
- void makeEmpty()
- {
- flp=1;
- fli=1;
- }
- void checkEmpty()
- {
- if (flp==1)
- {printf("Список пуст\n");}
- else
- {printf ("Список не пуст\n");}
- }
- void pointerToHead()
- {
- firstTemp=first;
- }
- void pointerToEnd()
- {
- firstTemp=last;
- }
- void checkHead()
- {
- if(firstTemp==first)
- {
- printf("Указатель в начале\n");
- }
- else
- {
- printf("Указатель не в начале\n");
- }
- }
- void checkEnd()
- {
- if(firstTemp==last)
- {
- printf("Указатель в конце\n");
- }
- else
- {
- printf("Указатель не в конце\n");
- }
- }
- void moveForward()
- {
- int x;
- printf("Введите количество позиций:\n");
- scanf("%d",&x);
- for (int i=0;i<x;i++)
- {
- if(firstTemp->next== NULL)
- {
- printf("Вы в конце списка\n");
- break;
- }
- else
- {
- firstTemp=firstTemp->next;
- }
- }
- }
- void moveBackward()
- {
- int x,i;
- printf("Введите количество позиций:\n");
- scanf("%d",&x);
- for (i=0;i<x;i++)
- {
- if(firstTemp->before == NULL)
- {
- printf("Вы в начале списка\n");
- break;
- }
- else
- {
- firstTemp=firstTemp->before;
- }
- }
- }
- void valueBeforePointer()
- {
- if (firstTemp->before==NULL)
- {
- printf("Предыдущий элемент отсутствует\n");
- }
- else
- {
- printf("%d\n",((firstTemp->before)->field));
- }
- }
- void valueAfterPointer()
- {
- if(firstTemp->next==NULL)
- {
- printf("Следующий элемент отсутствует\n");}
- else
- {
- printf("%d\n", ((firstTemp->next)->field));
- }
- }
- void deleteBeforePointer()
- {
- struct list*dopa;
- secondTemp=firstTemp;
- if (secondTemp->before==NULL)
- {
- printf("Вы в начале\n");
- }
- else
- {
- secondTemp=secondTemp->before;
- if (secondTemp->before==NULL)
- {
- firstTemp->before=NULL;
- first=firstTemp;
- free(secondTemp);}
- else
- {
- dopa=secondTemp;
- secondTemp=secondTemp->before;
- firstTemp->before=secondTemp;
- secondTemp->next=firstTemp;
- secondTemp=dopa;
- free(secondTemp);
- }
- }
- }
- void deleteAfterPointer()
- {
- struct list*dopa;
- secondTemp=firstTemp;
- if (secondTemp->next==NULL)
- {
- printf("Вы в конце\n");
- }
- else
- {
- secondTemp=secondTemp->next;
- if (secondTemp->next==NULL)
- {
- firstTemp->next=NULL;
- last=firstTemp;
- free(secondTemp);
- }
- else
- {
- dopa=secondTemp;
- secondTemp=secondTemp->next;
- firstTemp->next=secondTemp;
- secondTemp->before=firstTemp;
- secondTemp=dopa;
- free(secondTemp);
- }
- }
- }
- void takeBeforePointer()
- {
- struct list*dopa;
- secondTemp=firstTemp;
- if (secondTemp->before==NULL)
- {
- printf("Вы в начале\n");
- }
- else
- {
- secondTemp=secondTemp->before;
- if (secondTemp->before==NULL)
- {
- firstTemp->before=NULL;
- znach=secondTemp->field;
- first=firstTemp;
- free(secondTemp);
- }
- else
- {
- dopa=secondTemp;
- znach=secondTemp->field;
- secondTemp=secondTemp->before;
- firstTemp->before=secondTemp;
- secondTemp->next=firstTemp;
- secondTemp=dopa;
- free(secondTemp);
- }
- }
- printf("%d\n",znach);
- }
- void takeAfterPointer()
- {
- struct list*dopa;
- secondTemp=firstTemp;
- if (secondTemp->next==NULL)
- {
- printf("Вы в конце\n");
- }
- else
- {
- secondTemp=secondTemp->next;
- if (secondTemp->next==NULL)
- {
- firstTemp->next=NULL;
- znach=secondTemp->field;
- last=firstTemp;
- free(secondTemp);}
- else
- {
- znach=secondTemp->field;
- dopa=secondTemp;
- secondTemp=secondTemp->next;
- firstTemp->next=secondTemp;
- secondTemp->before=firstTemp;
- secondTemp=dopa;
- free(secondTemp);
- }
- }
- printf("%d\n",znach);
- }
- void changeBeforePointer()
- {
- int c;
- printf("Введите новое значение:\n");
- scanf("%d",&c);
- if (firstTemp->before==NULL)
- {
- printf("Вы в начале\n");
- }
- else
- {
- secondTemp=firstTemp->before;
- secondTemp->field=c;
- }
- }
- void changeAfterPointer()
- {
- int c;
- printf("Введите новое значение:\n");
- scanf("%d",&c);
- if (firstTemp->next==NULL)
- {
- printf("Вы в конце\n");
- }
- else
- {
- secondTemp=firstTemp->next;
- secondTemp->field=c;
- }
- }
- void addBeforePointer()
- {
- int c;
- struct list*dopa;
- printf("Введите значение:\n");
- scanf("%d",&c);
- if (firstTemp->before==NULL)
- {
- secondTemp=(struct list*)malloc(sizeof(struct list));
- firstTemp->before=secondTemp;
- secondTemp->field=c;
- secondTemp->before=NULL;
- secondTemp->next=firstTemp;
- first=secondTemp;
- }
- else
- {
- secondTemp=(struct list*)malloc(sizeof(struct list));
- secondTemp->field=c;
- dopa=firstTemp->before;
- secondTemp->next=firstTemp;
- secondTemp->before=dopa;
- firstTemp->before=secondTemp;
- dopa->next=secondTemp;
- }
- }
- void addAfterPointer()
- {
- int c;
- struct list*dopa;
- printf("Введите значение:\n");
- scanf("%d",&c);
- if (flp==1)
- {
- first->field=c;
- first->next=NULL;
- first->before=NULL;
- last=first;
- firstTemp=first;
- }
- else
- {
- if (firstTemp->next==NULL)
- {
- secondTemp=(struct list*)malloc(sizeof(struct list));
- firstTemp->next=secondTemp;
- secondTemp->field=c;
- secondTemp->next=NULL;
- secondTemp->before=firstTemp;
- last=secondTemp;
- }
- else
- {
- secondTemp=(struct list*)malloc(sizeof(struct list));
- secondTemp->field=c;
- dopa=firstTemp->next;
- secondTemp->before=firstTemp;
- secondTemp->next=dopa;
- firstTemp->next=secondTemp;
- dopa->before=secondTemp;
- }
- }
- flp=0;
- }
- void Print()
- {
- secondTemp=first;
- do
- {
- if(secondTemp==firstTemp)
- {
- printf(" (%d) ",secondTemp->field);
- }
- else
- {
- printf(" %d ",secondTemp->field);
- }
- secondTemp=secondTemp->next;
- }
- while (secondTemp!=NULL);
- printf("\n");
- secondTemp=last;
- do
- {
- if(secondTemp==firstTemp)
- {
- printf(" (%d) ",secondTemp->field);
- }
- else
- {
- printf(" %d ",secondTemp->field);
- }
- secondTemp=secondTemp->before;
- }
- while(secondTemp!=NULL);
- printf("\n");
- }
- void main(void)
- {
- first=(struct list*)malloc(sizeof(struct list));
- if (first==NULL)
- {
- exit(1);
- }
- last=(struct list*)malloc(sizeof(struct list));
- if (last==NULL)
- {
- exit(1);
- }
- firstTemp=(struct list*)malloc(sizeof(struct list));
- if (firstTemp==NULL)
- {
- exit(1);
- }
- secondTemp=(struct list*)malloc(sizeof(struct list));
- if (secondTemp==NULL)
- {
- exit(1);
- }
- while (p==1)
- {
- int a,b;
- printf(" Выберите команду\n");
- printf(" \
- 1.Начать работу\n \
- 2.Сделать список пустым\n \
- 3.Проверка на пустоту\n \
- 4.Поставить указатель в начало\n \
- 5.Поставить указательв конец \n \
- 6.Проверка: Указатель в начале?\n \
- 7.Проверка: Указатель в конце?\n \
- 8.Передвинуть указатель вперед\n \
- 9.Передвинуть указатель назад\n \
- 10.Вывести значение перед указателем\n \
- 11.Вывести значение после указателя\n \
- 12.Удалить элемент, стоящий перед указателем\n \
- 13.Удалить элемент, стоящий после указателя\n \
- 14.Взять элемент, стоящий до указателя\n \
- 15.Взять элемент, стоящий после указателя\n \
- 16.Изменить значение ячейки, стоящей до указателя\n \
- 17.Изменить значение ячейки, стоящей после указателя\n \
- 18.Добавить элемент до указателя\n \
- 19.Добавить элемент после указателя\n \
- 20.Распечатать список\n \
- 21.Закончить работу\n");
- scanf("%d",&a);
- if (a!=1 && fl==0 && a!=21)
- {
- printf("Вы не начинали работу\n");
- }
- else
- if(fli==0&&a!=2&&a!=1&&a!=21)
- {
- printf("Для начала сделайте список пустым\n");
- }
- else
- if(flp==1&&a!=3&&a!=19&&a!=1&&a!=21&&a!=2)
- {
- printf("Список пуст\n");
- }
- else
- {
- switch(a)
- {
- case 1:
- fl=1;
- break;
- case 2:
- makeEmpty();
- break;
- case 3:
- checkEmpty();
- break;
- case 4:
- pointerToHead();
- break;
- case 5:
- pointerToEnd();
- break;
- case 6:
- checkHead();
- break;
- case 7:
- checkEnd();
- break;
- case 8:
- moveForward();
- break;
- case 9:
- moveBackward();
- break;
- case 10:
- valueBeforePointer();
- break;
- case 11:
- valueAfterPointer();
- break;
- case 12:
- deleteBeforePointer();
- break;
- case 13:
- deleteAfterPointer();
- break;
- case 14:
- takeBeforePointer();
- break;
- case 15:
- takeAfterPointer();
- break;
- case 16:
- changeBeforePointer();
- break;
- case 17:
- changeAfterPointer();
- break;
- case 18:
- addBeforePointer();
- break;
- case 19:
- addAfterPointer();
- break;
- case 20:
- Print();
- break;
- case 21:
- fl=2;
- break;
- }
- }
- if (fl==2)
- {
- break;
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement